「エクセル上にきれいな波動曲線を描きたい。」
「フリー曲線だとどうしてもいびつな形になってしまう。」
こんなとき、わざわざグラフでサインカーブを作成し、背景色を透明にしたりしていませんか?
この記事では、VBAをつかってフリー曲線であってもきれいな波動曲線(サインカーブ)を描く方法をご紹介します。
この記事の内容を一度マクロファイルとして保存しておけば、いつでも簡単にサインカーブを作成できます。
工夫次第でどんな曲線も簡単に作ることができますので、ぜひあなたも一緒に作ってみましょう。
それでは早速やっていきます!
紹介するスキルの概要説明
まずはじめに今回の記事で紹介する内容を簡単にご説明しておきます。
今回使用するのはエクセル上のフリー曲線にまつわる話です。
このフリー曲線を使ってまずはマウスをつかってサインカーブを書いてみましょう。
マウスポチポチ・・・
はい。まぁこんなもんです。
とてもきれいなサインカーブとは言えませんね。
人間の手でやるとこのレベルですが、この記事で紹介する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
このコードの実行結果は先ほど示したとおり以下のようにきれいな曲線が出力されます。
基本的にこのコード中でやっていることとしては、
①事前にサインカーブを描けるようにエクセルシート上の座標を計算しておく。
②BuildFreeform(フリー曲線作成)で①で作った座標をなぞっていく
ということをやっているだけです。
※このコードは(max_angle / delta_angle)が100以下でないと動きませんのでご注意ください。100以上にしたい場合はx(100), y(100)の数値を大きくすればOKです。
また、
y(i / delta_angle) = Sin(rad)の部分を
y(i / delta_angle) = Cos(rad)に変えると
コサインカーブを描くことも可能です。
まぁこのへんは自分でいろいろといじってみると理解が深まるはずです。
曲線の精度検証
最後にこのコードで作成したサインカーブがグラフで厳密に作成したサインカーブとどのくらい一致しているのかも確認しておきましょう。
まずはグラフを作成します。
今回はこんな感じでグラフ上にサインカーブを作成しました。
※重ねて見やすいようにグラフ領域を透明化、縦横線も排除しています。
こいつを先ほどのコードでつくった曲線(以下の細い青線)に重ねてみました。
※グラフはうまいこと縦横比を調整しています。
このように、フリー曲線をつかって描いた青い線とグラフを使って作成した黒い点線はほぼきれいに一致していることが確認できました。
終わりに
というわけで今回はフリー曲線をVBAで動かすことによって、きれいな波動曲線を描く方法をご紹介しました。
あるマクロファイルに、このような曲線作成コレクションを作っておくといろんな場面で活躍するのではないでしょうか。
ぜひ時間をとっていろいろ作成してみましょう!
このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント
上記の「◆フリー曲線でサインカーブを描くVBAコード」で線の書式設定を変えたいのですが、コードのどこに挿入すればいいでしょうか。
よろしくお願いいたします。
ご質問いただきありがとうございます。
(また、返信が遅れてしまい申し訳ありません。)
記事中のコードのEnd Subの直前に以下のようなコードを追加すればOKです。
With Selection.ShapeRange.Line
.Weight = 4
.ForeColor.RGB = RGB(255, 0, 0)
.DashStyle = 2
End With
これで太さ、色、線のスタイルを変えることができます。
線のスタイル変更については以下で詳細解説していますのでこちらも見てみてください。