シミュレーション作成実習7

7.VBAを使いコマンドボタンを活用する。

 

  <目的> VBAの記述方法とその利用法について知る

+ 左画面から、以下に紹介している「VBAを使いコマンドボタンを活用する。」マニュアルのA4版PDFファイルをダウンロードできます。

 ご利用下さい。


 

 実習1で作成した進行波ファイルにコマンドボタンを付ける。

 

 実習1の課題を終えて作成したExcelファイルを用意してください。(用意できない場合は

ここからDownloadしてください。)

   

  この実習では以下の4っつボタンをこのファイルに付けます。

Resetボタンを付け、ボタンでリセットできるようにします。

縦波のスイッチボタンを付け、横波と同時に表示したり横波だけを表示したりできるようにします。

STOPボタンSTARTボタンを付け自動でタイマーが動くようにします。

 

 その前に「開発」タブが表示されているか確認してください。

 [開発] タブが表示されていない場合は、

 

 [ファイル] タブから、[オプション] の [リボンのユーザー設定] 画面を表示させて、 [メイン タブ] の下の [開発] チェック ボックスをオンにします。

 

(1)Resetボタンを付ける 

1.「開発」⇒「挿入」⇒ActivXコントロールの中から四角の(コッマンドボタン)を選択後、画面のように適当な場所にコマンドボタンを貼り付けます。

2.コマンドボタン上でクリックしプロパティ画面の  Caption  「Reset」と入力します。

 文字が全部表示されない時はコマンドボタンを広げて大きくしてください。

3.次は、このコマンドボタンを押したとき、何をするのか(命令)をVBAで記述します。

 この命令を書き込む場所を(VBAエディタ)と言い、このエディタを表示させるには、

 「Reset]ボタンの上で左Wクリックします。(開発⇒VisualBasicでも表示できる)

 ②出てくるエディタには左画面のように、

Private sub CommandButton1_Click()

End Sub

と表示されているので、CommandButton1をクリックしたときの命令文はこの2行の間に記述します。

命令文は Range(”A2”)=0 と半角英数で記述します。(大文字小文字は関係ない)

これは、カウントを記述するセル番地がA2なのでA2セルに0(ゼロ)を代入せよ と言う意味です。

 デザインモードになっているのでこのままでは動きません。

 左の画面のように、「開発」⇒「デザインモード」をクリックしデザインモードを解除します。

 

 これで動くようになりました。ボタンをクリックしてみて下さい。A2セルの値が0になりましたか?


(2)縦波のスイッチボタンを付ける

 まず、「Reset」ボタンの時同様にしてE28セルの左にコマンドボタンを貼り付ける。

 次に、左画面のようにボタンのプロパティのCaptionを「縦波」にして縦波のスイッチボタンを作る。

最後に、このコマンドボタンを押したとき、何をするのか(命令)をVBAで記述します。

 「Reset]ボタンの上で左Wクリックします。

 ②出てくるエディタには左画面のように、

Private sub CommandButton2_Click()

End Sub

の行間に

 

   Private sub CommandButton2_Click()

    If Range("E28") = "ON" Then

       Range("E28") = "OFF"

      Else

       Range("E28") = "ON"

    End If

   End Sub

という命令文を英数半角で記述します。(大文字小文字は関係ない)

この意味は、

 もし、E28セルに ON と書かれていたら、

   E28セルに OFF と書き、

   そうでなければ

   E28セルに ON と書け

という意味です。これをIF文といい、条件にを満たしているかどうか判断し処理させる命令文です。

 

 書き終わったら、デザインモードを終了させてください。ボタンを押してみて下さい。E28セルにON、OFFが交互に現れますか?

 

 最後の仕上げです

「縦波」がON/OFFと切り替わってもこのままでは縦波は表示されたままです。したがってこのE28の変化に合わせてグラフ上の縦波が現れたり消えたりするようにM列に次のように細工をします。

M2セルにはすでに0(ゼロ)が入っているが、このセルに

 

=IF(E28=”OFF”,1000,0 )

 

という関数式を記述し、M3~M27までコピーする。

 

これで、「縦波」ボタンを押すたびにグラフ上の縦波が現れたり消えたりするようになる。

 

ここで一度上書き保存して置いて下さい。

 


(3-1)Stop ボタンを作成する 

 

 これからVBAで動く自動Timerを作りますが、自動Timerはループ(Loop)と言う命令文を使います。このLoopはぐるぐる回り続けるものでです。したがってまずはのLoopに割り込んでSTOPさせるブレーキを作ってから始めないと止められなくなってしまいます。(無限ループ)最悪の場合は電源を切らないと止まりません。

 

 (3-1)ではこのLoop命令に割り込める「Stop」ボタンを作ります。

 

 まず、今までと同じように「開発」⇒「挿入」⇒ActivXコントロールの中からコマンドボタンを選択し「Reset」ボタンの横に貼り付け、右クリックのプロパティの Captin を「Stop」としボタンを作成します。

 

 次にボタン上で左WクリックをしてVBAエディタ画面を表示すると、

まずは今までと同じように 

 Private Sub CommandButton3_Click()

 End Sub 

と出るが今回はLoopに割り込む機能を持たせるために下の図の様に「MouseDown」機能を持ったSubを使う。

Private Sub CommandButton3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub

 

 最後に、下の画面を見ながら読んでください。出てきた

 

Private Sub CommandButton3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub

 

の間に

 

Private Sub CommandButton3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

 停止=True

End Sub

 

エディタの先頭に 

 

Private 停止 as Boolean

 

と記述します。この「Private 停止 as Boolean」は非常に大切で、このシートでは 停止 という記号は論理記号でその宣言をしているのです。ここで宣言がなされた記号は優先的にLoopに割り込めることになります。ですからこれがなされている記号を使わないと割り込みが上手くいかずSTOPできなくなってしまうのです。

 

 これで停止ボタンを押すと 停止 と言う記号(変数)がTrueとなり、Loopの中に書かれている 停止 という記号の中身も True と変われるようになるのです。

 この 停止 記号を見ながらLoopしていたTimerは 停止 記号がTrueになった途端そこで止まるという仕掛けを組んでおけばそこでLoopはStopするのです。

 

 ではいよいよ自動TimerのStartボタンんの作成です。ここで念のためもう一度上書き保存をしておきましょう。


 

(3-2)Start ボタンを作成する 

 

 これからVBAで動く自動Timerを作りますが、自動Timerはループ(Loop)と言う命令文を使います。このLoopはぐるぐる回り続けるものでです。したがってまずはのLoopに割り込んでSTOPさせるブレーキを作ってから始めないと止められなくなってしまいます。(無限ループ)最悪の場合は電源を切らないと止まりません。

 

 (3-2)ではこのLoop命令に割り込める「Stop」ボタンを作りますが、作ってすぐに動かしてはいけません。

 必ずBackup(上書き保存)を取ってから行なってください。また、Stopボタンを押しても止まらない時(暴走)の対処方法(後述)を読んでから行ってください。

 まず、今までと同じように「開発」⇒「挿入」⇒ActivXコントロールの中からコマンドボタンを選択し「Stop」ボタンの横に貼り付け、右クリックのプロパティの Captin を「Start」としボタンを作成します。

 次にボタン上で左WクリックをしてVBAエディタ画面を表示すると、

まずは今までと同じように 

 Private Sub CommandButton4_Click()

 End Sub 

 

と出るのでこの行間に実行させる命令文を記述します。

記述する時、日本語の「停止」という文字以外は全て半角英数なので必ず切り替えて正確に記述して下さい。また大文字小文字の区別もして下さい。

 

左は記述した概要画面です。

 

   Private Sub CommandButton4_Click()           

       停止 = False   

       Range("A1").Activate 

       Do Until 停止 

           Range("A2").Value = Range("A2").Value + 1 

           DoEvents   

       Loop 

   End Sub

 

ボタンを押す前に、ここで必ず上書き保存をしておいて下さい。

 

 Stopボタンを押しても止まらない時は、

 

 [ESC]キー(大体が左上にある)を押し続けてください。その内引っかかって止まるのを待ちます。

 

 いくら押し続けても止まらない時は電源をOFFにするしかありません。近くに指導者がいれば声を掛け助けてもらってください。電源を強制的に切るには、電源ボタン を30秒以上押し続けて下さい。

 

 以上を確認して「デザインモード」を解除後Startボタンを押してみて下さい。続いてStopボタンを押してみて下さい。順調に機能しましたか?

 

  めでたしめでたし!       以上でおしまい

 

 以上で実習7は終わりです。    完成例はここ(実習7)からDownload できます。