当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】円運動シミュレーション

VBA と Excel ワークシートを連携させることで、ある種の運動を簡単にシミュレーションすることができます。今回はグラフのプロットエリアに表示された点(データ要素)を半径 1 の円周に沿って運動させてみます。角度 t を媒介変数とする円の方程式は

x = cost, y = sint

によって与えられます。

グラフのプロットエリアに円運動を表示します

まずは下図のようなシートを用意します。

Excel VBA 円運動シミュレーションのワークシート

セル B2 は空白にしておきます。あとで VBA で計算された度数単位の角度がここに入力されます。セル B3 には B2 の角度をラジアンに変換するために

=RADIANS(B2)

と入力しておきます。セル E3 と F3 には動点の x 座標と y 座標を計算させるために、それぞれ

=COS(B3)
=SIN(B3)

と入力しておきます。そして E3 と F3 だけをデータ要素としてグラフにプロットします。この 2 つのデータを選択してグラフを表示させるとうまくいかないので、まず何も選択しない状態で [挿入]、[散布図]、[散布図] の順にクリックしてデータ要素のないグラフを表示させます。

Excel データ要素のないプロットエリア

それから x 軸を右クリックして [軸の書式設定] で境界値の最小値を -1.5、最大値を 1.5 に設定しておきます。y 軸についても同じように設定します(これをしておかないと、点が動くたびに自動で境界値が変化してしまいます)。

そのあとグラフを右クリックして [データの選択] 、[追加] を選択して [系列 x の値] に E3 を、 [系列 y の値] に F3 を入れて点を表示させます。

この要素(点)を右クリックして [データ系列の書式]、[塗り潰しと線]、[マーカー]、[マーカーのオプション] を順に選択し、[組み込み] にチェックを入れると要素のサイズを変更することができます。上の図では 7 ポイントに設定してあります。

角度 t を 1° 刻みに変化させるマクロ

VBE には、単に媒介変数 t を 1 ずつ変化させるコードを記述するだけです。

'[VBA]プロットエリアに円運動を表示させるサンプルコード
Sub Revolve()
  Dim i As Long
  For i = 1 To 360
    Range("B2").Value = i
    Application.Wait [Now() + "0:00:00.01"]
    DoEvents
  Next i
End Sub

Revolve() を実行すると、プロットエリアのデータ要素が円運動を始めます。

Excel VBA プロットエリアの動点が回転します

このぐらいの繰返し処理は本来なら一瞬で終わってしまいますが、4行目にある

Application.Wait [Now() + "0:00:00.01"]

という記述で処理を1ステップごとに 0.01 秒停止させて、点の動きを目で追えるようにしてあります。

エクセルや数学に関するコメントをお寄せください

  1. VBA初心者 より:

    グラフ上の点が0°と360°のみ反映されただけで、
    点が回転することがありませんでした。
    Application.Wait [Now() + “0:00:00.01”]
    Next i

    Application.Wait [Now() + “0:00:00.01”]
    DoEvents ←オペレーティングシステムに制御を渡す処理
    Next i
    に修正した結果、動作が安定しました。

    • Blog Cat より:

      コメントありがとうございます。
      確かに、DoEvents がないと環境によっては動作が不安定になってしまいますね。
      このような御指摘をいただけると、とても助かります。
      さっそく、記事のコードを書き換えておきます。
      今後とも、よろしくお願い致します。