ヒガサラblog

サラリーマン向けに、仕事を効率良く進めていくための方法についてご紹介しています。プログラミングから対人スキルまでを幅広く掲載中。

ヒガサラblog

【エクセルVBA】フリー曲線できれいなSIN(COS)カーブを描く方法!

f:id:yshgs_elec:20210122223427j:plain

 

「エクセル上にきれいな波動曲線を描きたい。」

「フリー曲線だとどうしてもいびつな形になってしまう。」

こんなとき、わざわざグラフでサインカーブを作成し、背景色を透明にしたりしていませんか?

 

この記事では、VBAをつかってフリー曲線であってもきれいな波動曲線(サインカーブ)を描く方法をご紹介します。

 

この記事の内容を一度マクロファイルとして保存しておけば、いつでも簡単にサインカーブを作成できます。

工夫次第でどんな曲線も簡単に作ることができますので、ぜひあなたも一緒に作ってみましょう。

 

それでは早速やっていきます!

 

スポンサーリンク

 

紹介するスキルの概要説明

 まずはじめに今回の記事で紹介する内容を簡単にご説明しておきます。

今回使用するのはエクセル上のフリー曲線にまつわる話です。

f:id:yshgs_elec:20210204154918j:plain

このフリー曲線を使ってまずはマウスをつかってサインカーブを書いてみましょう。

 

マウスポチポチ・・・

 

はい。まぁこんなもんです。

とてもきれいなサインカーブとは言えませんね。

f:id:yshgs_elec:20210204154934j:plain

 

人間の手でやるとこのレベルですが、この記事で紹介するVBAコードを実行することで、以下のように美しいサインカーブを描くことができます。

f:id:yshgs_elec:20210204154951j:plain

 

事前説明はこのくらいにして、早速どうやれば作れるのかをご紹介していきます。

 

※「VBAをつかったことがない」という方は以下の記事を参考にVBAを使える環境を整えておきましょう。

【初心者用】エクセルマクロ(VBA)の始め方を詳細解説

 

スポンサーリンク

 

フリー曲線でサインカーブを描くVBAコード

早速ですが、VBAコードを記述していきましょう。

以下のコードをそのままコピーしてください。

 

◆フリー曲線でサインカーブを描くVBAコード

Sub Make_Line()

'使用する変数の方を宣言
Dim max_angle As Integer
Dim delta_angle As Integer
Dim amp As Integer
Dim i As Integer
Dim rad As Single
Dim x(100) As Variant
Dim y(100) As Variant

'振幅を決める
amp = 100
'どの角度まで描くか決める
max_angle = 720
'どのくらいの粗さで書くか決める
delta_angle = 10

'座標データを準備する
For i = 0 To max_angle Step delta_angle
x(i / delta_angle) = i
rad = WorksheetFunction.Radians(i)
y(i / delta_angle) = Sin(rad)
Next

'曲線を書く
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 0, y(0) * amp)
    For i = delta_angle To max_angle Step delta_angle
    .AddNodes msoSegmentCurve, msoEditingAuto, x(i / delta_angle), y(i / delta_angle) * amp
    Next
    .ConvertToShape.Select
End With

End Sub

 

このコードの実行結果は先ほど示したとおり以下のようにきれいな曲線が出力されます。

f:id:yshgs_elec:20210204154951j:plain

 

基本的にこのコード中でやっていることとしては、

①事前にサインカーブを描けるようにエクセルシート上の座標を計算しておく。

②BuildFreeform(フリー曲線作成)で①で作った座標をなぞっていく

ということをやっているだけです。

※このコードは(max_angle / delta_angle)が100以下でないと動きませんのでご注意ください。100以上にしたい場合はx(100), y(100)の数値を大きくすればOKです。

 

また、

y(i / delta_angle) = Sin(rad)の部分を

y(i / delta_angle) = Cos(rad)に変えると

コサインカーブを描くことも可能です。

 

まぁこのへんは自分でいろいろといじってみると理解が深まるはずです。

スポンサーリンク

 

曲線の精度検証

 最後にこのコードで作成したサインカーブがグラフで厳密に作成したサインカーブとどのくらい一致しているのかも確認しておきましょう。

 

まずはグラフを作成します。

今回はこんな感じでグラフ上にサインカーブを作成しました。

f:id:yshgs_elec:20210204155018j:plain

 ※重ねて見やすいようにグラフ領域を透明化、縦横線も排除しています。

 

こいつを先ほどのコードでつくった曲線(以下の細い青線)に重ねてみました。

※グラフはうまいこと縦横比を調整しています。

f:id:yshgs_elec:20210204155032j:plain

 このように、フリー曲線をつかって描いた青い線とグラフを使って作成した黒い点線はほぼきれいに一致していることが確認できました。

 

 

スポンサーリンク

 

終わりに

というわけで今回はフリー曲線をVBAで動かすことによって、きれいな波動曲線を描く方法をご紹介しました。

あるマクロファイルに、このような曲線作成コレクションを作っておくといろんな場面で活躍するのではないでしょうか。

ぜひ時間をとっていろいろ作成してみましょう!

 

このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

・日々の残業時間を減らしたい。

・業務をもっと効率的にこなしたい。

・もっと勉強する時間を作りたい。

こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。

 

この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

 ↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

 

それではまた!