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

f:id:yshgs_elec:20210122223427j:plain

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

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

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

 

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

 

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

 

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

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

スポンサーリンク

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

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

 

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

エクセル上でフリー曲線を使う画面

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

マウスポチポチ・・・

 

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

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

フリー曲線でSINカーブを手書きで書いた結果

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

VBAでフリー曲線を使ってSINカーブを書いた結果

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

※「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

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

VBAでフリー曲線を使ってSINカーブを書いた結果

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

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

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

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

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

 

また、

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

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

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

 

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

スポンサーリンク

曲線の精度検証

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

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

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

フリー曲線で作成したSIN波の精度確認用グラフを作成している様子

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

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

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

フリー曲線で作成したSIN波と精度確認用グラフを重ねた結果

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

スポンサーリンク

終わりに

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

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

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

 

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

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

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

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

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

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

↓ 応援ボタン

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

それではまた!

コメント

  1. T.TANAKA より:

    上記の「◆フリー曲線でサインカーブを描くVBAコード」で線の書式設定を変えたいのですが、コードのどこに挿入すればいいでしょうか。
    よろしくお願いいたします。

タイトルとURLをコピーしました