VBA と Excel ワークシートを連携させることで、ある種の運動を簡単にシミュレーションすることができます。今回はグラフのプロットエリアに表示された点(データ要素)を半径 1 の円周に沿って運動させてみます。角度 t を媒介変数とする円の方程式は
x = cost, y = sint
によって与えられます。
グラフのプロットエリアに円運動を表示します
まずは下図のようなシートを用意します。
セル B2 は空白にしておきます。あとで VBA で計算された度数単位の角度がここに入力されます。セル B3 には B2 の角度をラジアンに変換するために
=RADIANS(B2)
と入力しておきます。セル E3 と F3 には動点の x 座標と y 座標を計算させるために、それぞれ
=COS(B3) =SIN(B3)
と入力しておきます。そして E3 と F3 だけをデータ要素としてグラフにプロットします。この 2 つのデータを選択してグラフを表示させるとうまくいかないので、まず何も選択しない状態で [挿入]、[散布図]、[散布図] の順にクリックしてデータ要素のないグラフを表示させます。
それから 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() を実行すると、プロットエリアのデータ要素が円運動を始めます。
このぐらいの繰返し処理は本来なら一瞬で終わってしまいますが、4行目にある
Application.Wait [Now() + "0:00:00.01"]
という記述で処理を1ステップごとに 0.01 秒停止させて、点の動きを目で追えるようにしてあります。
エクセルや数学に関するコメントをお寄せください
グラフ上の点が0°と360°のみ反映されただけで、
点が回転することがありませんでした。
Application.Wait [Now() + “0:00:00.01”]
Next i
を
Application.Wait [Now() + “0:00:00.01”]
DoEvents ←オペレーティングシステムに制御を渡す処理
Next i
に修正した結果、動作が安定しました。
コメントありがとうございます。
確かに、DoEvents がないと環境によっては動作が不安定になってしまいますね。
このような御指摘をいただけると、とても助かります。
さっそく、記事のコードを書き換えておきます。
今後とも、よろしくお願い致します。