VBA （ Visual BASIC for Application）
を使って、リサージュ曲線を回転させる。

VBA
Microsoft Office （Excel や Word などのソフトウェア）に組み込まれたBASIC 言語によるプログラム、マクロ作成ツール。
使えるようになると 非常に便利。

リサージュ曲線を回転させるマクロを含むエクセルワークシートを作成する。

マクロ 【macro】
ワープロソフトや表計算ソフトなどで、特定の操作手順をプログラムとして記述して自動化する機能。
プログラムの記述に使う言語をマクロ言語という。
よく使う処理をマクロとして保存しておけば、必要なときに簡単に実行できるようになる。
マクロ機能を持ったアプリケーションソフトは、マクロの開発環境や動作環境が用意されている。
できたプログラムは文書ファイルに他のデータと一緒に保存される。

メニューバーの空白領域を右クリックするとＶｉｓｕａｌ Ｂａｓｉｃ メニューバー表示を選択するリストがでるので、Ｖｉｓｕａｌ Ｂａｓｉｃ をチェックする。

これをクリックすると VBA が出る。

VBA Project ウィンドウの Sheet 1 をクリック。
Sheet 1 で動作する マクロ コードを記述するウィンドウが現れる。

Sheet とはエクセルの表形式ファイルは、デフォルトでは（特に編集しなければ）はじめは、３ページ用意され、各ページに Sheet 1,2,3 と名前が付いている。表の左下に、ページをめくるためのボタン（タグ）があるので、押してみて下さい。
Sheet 1、2、3 に別々のデータやマクロを書き込むことができる。
Sheet の追加、削除、名前の変更は自由に可能。

セルE1 に X amplitude と入力、 F1 に 1 と入力。

（Xの振幅）

セルE2 に X frequency と入力、 F2 に 50 と入力。 （Xの周波数）
セルE4 に Y amplitude と入力、 F4 に 1 と入力。

（Yの振幅）

セルE5 に Y frequency と入力、 F5 に 50 と入力。 （Yの周波数）

Sheet 1 で動作する マクロ コードを記述する。
まず、sub Lissajous () と入力し、キーボードのEnter キーを押す。 End Sub 文が自動的に記述される。

Sub Lissajous () とEnd Sub の間にこのコードを記述する。

コード記入時には、大文字、小文字の区別は不要。
VBAが自動的に大文字が必要な箇所は変換してくれる。
重要な部位のコードは、自動的に青色に変化する。
Sub 関数名() ～ End Sub
Sub は、サブルーチン（プログラムの一部、関数）を記述する範囲を設定するコード。 関数名は自由に付けられる。
Sub 関数名() と End Sub の間に、実行したいプログラムを書く。
Worksheets ("sheet 1") . Cells ( 1, 6 )エクセル ワークシート の sheet 1 の セル(1,6) の値を指す関数。
Cells は（たて、よこ）の順に座標を記述するので、混乱しないように。

Cells ( i , j ) = 上から i 番目で、左から j 番目 のセルの値

xa = Worksheets ("sheet1") . Cells (1, 6)
xf = Worksheets ("sheet1") . Cells (2, 6)
ya = Worksheets ("sheet1") . Cells (4, 6)
yf = Worksheets ("sheet1") . Cells (5, 6)
xa に、セル（1，６）つまり セル F1 に書いた値を入れる。
xf に、セル（2，６）つまり セル F2 に書いた値を入れる。
ya に、セル（4，６）つまり セル F4 に書いた値を入れる。
yf に、セル（5，６）つまり セル F5 に書いた値を入れる。

xa に 交流 X の 振幅が代入される。
xf に 交流 X の 周波数が代入される。
ya に 交流 Y の 振幅が代入される。
yf に 交流 Y の 周波数が代入される。
類似したコードの繰り返し記述は、コピー （Ctrl C）,ペースト （Ctrl V） を使って省力化してくださいFor xp = 0 To 360 Step 10
Next xp

For ～ Next 文
変数 xp （ここでは、交流 X の 位相 phase） を０°から ３６０°まで １０°刻みで増加させながらFor と Next の間に記述されたプログラムを繰り返し実行する文。

For i = 2 To 22
Next i
変数 i （ここではワークシートの たての番号）を、２ から 22 まで 1 づつ 増加させながらFor と Next の間のプログラムを繰り返し実行する。
（Step文 が省略されると 増分は １ になる。）
t = Worksheets ("sheet1") . Cells (i, 1)
変数 t （ここでは 時間（秒））の値が上から i 番目、左から 1 番目つまり カラムA のセルの値になる。

x = xa * Sin ( 2 * 3.14 * xf * t + xp * 3.14 / 180 )y = ya * Sin (2 * 3.14 * yf * t )Worksheets ("sheet1") . Cells ( i , 2 ) = x
Worksheets ("sheet1") . Cells ( i , 3 ) = y
変数 x （交流X）の値を、xa, xf, xp から求め、変数 ｙ （交流Y）の値を、ya, yf から求める。
求めた x, y の値を、それぞれカラムB （左から２番目）と カラムC （左から３番目）の、上から i 番目の セルに入力される。

For i = 2 To 22t = Worksheets("sheet1").Cells(i, 1)x = xa * Sin(2 * 3.14 * xf * t + xp * 3.14 / 180)y = ya * Sin(2 * 3.14 * yf * t)
Worksheets("sheet1").Cells(i, 2) = x
Worksheets("sheet1").Cells(i, 3) = y
Next i

上記のコードが、xp が 10 づつ増加するごとに実行され、カラムBとカラムCの上から2番目から22番目の数字が変化するたびに、グラフに表示されるリサージュ曲線が変化する。

For xp = 0 To 360 Step 10
MsgBox ("X phase = " & xp)
Next xp
交流Xの位相 xp が 10づつ増加するたびにリサージュ曲線が変化する様子を観察したいが、For ～ Next 文 の間に、小休止を入れないとプログラムが瞬時に終了して、観察できない。
そこで、 For ～ Next ループ の中に、ループを一時停止させるためのMsgBox () 関数 （メッセージボックス） を入れる。

MsgBox ("X phase = " & xp)
MsgBox () メッセージボックス関数
For ～ Next 文の中に入れると、ループが1回回るたびに、エクセルワークシート上にメッセージボックスが現れる。
その中の OK ボタンをクリックしないと、次のループが回らない。
メッセージボックス内には、文を表示できるので、"X phase = " & xp を表示させる。
" " で挟まれた文字はそのまま表示される。
変数 xp を入れると、変数の値が表示される。
＆記号は、文字または数字をつなぐ働きを持つ。

作ったプログラム（マクロを含むファイル）の保存方法。
Ｅｘｃｅｌ の ファイルメニユー 名前をつけて保存を選択。

VBAのマクロを加えたエクセルプログラムは、VBAウィンドウのファイルメニューではなく、Excelのファイルメニューから保存する。

Ｅｘｃｅｌ２００７では、Ｅｘｃｅｌ９７－２００３ブック形式のファイルで保存する。

ファイルを保存したら、一度エクセルを終了する。
再度、マクロを含むエクセルファイル（ブック）を開く。
Ｅｘｃｅｌ のセキュリティ が高く設定されているとこのような警告が出て、プログラムが開かない。

Ｅｘｃｅｌ のセキュリティ を下げる方法。
ツール ー マクロ － セキュリティ を選択Ｅｘｃｅｌ のセキュリティレベル を 中 に選択。

再度、作成したＥｘｃｅｌ ファイル（ブック）を開くとこのようなダイアログがでるので、マクロを有効にする を選択。

ＶＢＡマクロ実行ボタンをクリック

マクロを実行し、メッセージボックスのOKボタンを押して、リサージュ曲線が回転する様子を観察してください。
OKボタンを押しても曲線が動かない不都合が生じる。
メッセージボックスの位置をマウスで移動させると動く。

メッセージボックスのOKボタンを押しただけではリサージュ曲線が回転しない理由は、エクセルワークシート内のグラフが再描画されないため。
ワークシート内の数字などに変更が生じた場合にワークシートを再計算 （再描画）するコマンド（命令）Calculateを、マクロのプログラムに追加する。

ＶＢＡボタンをクリックしてマクロを編集する。

このコードを記述する。

Excel のＶＢＡマクロ実行ボタンをクリック。
OKボタンを押すと曲線が再描画されて回転することを確認して下さい。

マクロを追加する。
リサージュ曲線が自動的に回転する
マクロ Lissajous2 を作成する。

End Sub の下に
Sub Lissajous2（ ）と記述してEnter キーを押す。

複数のマクロが連続して表示されるモード
マクロが１つずつ表示されるモード
Sub Lissajous2（） の下に End Sub が現れる。
Sub Lissajous2（） と End Sub の間にSub Lissajous（） と同じプログラム（コード）を記述する。（ Sub Lissajous（） からコピーして貼り付けて下さい。）

マクロ Lissajous2 の編集を行う。

xp の最大値を 360 に、xp の 増分値を １０ に変更。

Calculate の下に記述されていた
MsgBox ("X phase = " & xp)を削除する。

Excel のＶＢＡマクロ実行ボタンをクリックするとマクロ選択ダイアログ内に新たなマクロ Lissajous2 が出る。これを選択。

xp の増分値を１にしたので（ step 1 ）（プログラム中の step １ は、省略できる。
For 文の中で step 文が省略されるとstep （増分）は 1 と解釈される。）
自動的にリサージュ曲線が１度刻みで回転するグラフが出現する。
xpの最大値を 720 にしたので、リサージュ曲線は、２回転 （360°x 2 ） してプログラムが止まる。
各自、xp の増分や最大値、XとYの振幅、周波数の値を変えて、描画されるリサージュ曲線の変化を確認して下さい。

今回作成したマクロは、必要最低限の機能しか記述していないので、各自、工夫してマクロコードの改良を試みてください。
例： 自動的にXとYの周波数比が変化していくマクロ、曲線の色が変化するマクロ、リサージュの立体的表示を行うマクロ、など。