ジャンプするボタン


1。概要

 ボタンなどのコントロールの位置を変更することができる。ここでは、3つのボタンのうち、ボタン3を上下に移動させることを考える。



2。遊び方

 スタートボタン(ボタン1)をクリックすると、全体の処理が始まる。時間の経過につれて、ボタン3が落ちてくる。高度を維持するには、ボタン2をクリックすればよい。

3。作り方

 まず、3つのボタンを作成する。つぎに以下のように、VBAスクリプトを記述する。
----------------------------------- Global sokudo Sub ボタン1_Click() '初期設定 ichi = 100 sokudo = 0 Cells(11, 2) = ichi Cells(12, 2) = sokudo 'メイン x = 1000 Do While x > 0 x = x - 1 Cells(10, 2) = x sokudo = sokudo - 0.1 ichi = ichi - sokudo If ichi >= 300 Then ichi = 300 If ichi >= 300 Then sokudo = 0 If ichi < 1 Then sokudo = 0 Sheet1.Shapes("Button 3").Top = ichi Cells(11, 2) = ichi Cells(12, 2) = sokudo DoEvents Loop Sheet1.Cells(10, 2).Select End Sub -------------------------------- Sub ボタン2_Click() '速度を増加させる sokudo = sokudo + Cells(13, 2) End Sub -------------------------------- Sub ボタン3_Click() End Sub 4。プログラムの解説

 まずは、ボタン1の中身を見よう。初期設定を行なったあと、Do文がメインのプログラムである。Do While x > 0 と Loopで囲まれたところが繰り返される。変数xが正である限り繰り返せ、ということである。変数xは、残り時間である。繰り返すたびにxの値は1づつ減ってゆく。
 また位置ichiと速度sokudoを計算し、その位置にボタン3を移動させることになる。移動は、Sheet1.Shapes("Button 3").Top = ichi で行なう。Topとは、ボタンの上辺のY座標のことである。これを計算値ichiにセットすると、ボタンをその位置に移動させることができる。「何度も繰り返して少しづつ移動させることで、なめらかな動きを表現することができる」というのが、このプログラムのポイントである。位置と速度の計算結果は、毎回セルに記入するようにした。
 DoEvents は曲者である。ふつう、ひとつのボタンをクリックして、処理を継続しているとき、別のボタンは押せない。さらなるクリックという別のイベントが発生しないようにできている。しかし、DoEventsで「他のイベントの発生を感知できるようにすることができる」。したがって、ボタン1の処理を継続しているとき、ボタン2の処理を割り込ませることができる。
 ボタン2をクリックすると、速度が「発射の強さ」だけ増加するように、Cells(13, 2)の数値を、速度sokudoに加える。ただし、sokudoという変数は、ふたつのボタンのなかで共通に用いるので、プログラム第1行目にグローバル変数であることを宣言している。

5。その他

 問題1:ボタンが動くのじゃ、つまらない。ボタン3でなく、あなたが作成した図形を取り込んで、それを動かしてみよう。また、クリックしたときに、自分が作成した音(短時間)が出るようにしよう。ヒント:お絵書きソフトで、図形を作成する、それをgif形式などのファイルに保存する。それをExcelに取り込む(挿入メニューから図形を選択)。たぶん、その図形の名前は「Picture 4」だろう。そこで、Do whileループの中の"Button 3"の部分を"Picture 4"に書き直せば良い。
 問題2:このプログラムを修正して、ゲームを作成せよ。例えば、ある高さを維持し続けることができれば得点が与えられる。ヒント:Do whileループの中で、位置を判定し、一定期間ある範囲にあれば得点を加える。
 問題3:上記問題2のプログラムを修正して、ゲームを作成せよ。例えば、右から弾が飛んでくる。当たらなかったら得点が加算され、弾が当たったらゲームオーバーとなる。ヒント:どうすれば衝突を判定できるかを考える。