[VBA] Waitメソッドでアニメーション(ブロックを動かします)

Waitメソッドでアニメーション

 今回はセルに色塗りする機能を使って簡単なアニメーションを作ってみますよ。コードはとっても簡単ね~。

 'ブロック落とし① (C)KOBATO
 '(C)KOBATO http://atelierkobato.com/vba-wait/

 Sub CellMovement1()

 Dim i As Integer

 For i = 1 To 9

 '背景色をクリアします
 Cells(i, 2).Interior.ColorIndex = 0

 '背景色を赤にします
 Cells(i + 1, 2).Interior.ColorIndex = 3
 Application.Wait (Now + TimeValue("0:00:01"))

 Next i

 End Sub

 実行すると赤いセルがブロックみたいに下に落ちて行きますよ~。

 WaitメソッドでVBAブロックアニメーション

 何をしているのかというと、

 ① セル A1 の背景色をクリアする

 ② セル A2 を赤く塗る

 ③ セル A2 の背景色をクリアする

 ④ セル A3 を赤く塗る

 ⑤ セル A3 の背景色をクリアする

てことを繰り返しているだけなのね~。でも普通に For...Next で実行させると目にも止まらぬ速さで処理してしまうので、何が起こったのかわらないうちに終わってしまいます。そんな高速アニメーションを目で追うなんて、一生懸命忍術の修業をしなくては無理です(意味不明)。でも忍術修業より VBA 修業のほうが簡単ですよ。たぶん。てことで、

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

という一文で処理を敢えて遅くしておきましょ~。Applicationオブジェクトに対して Waitメソッド を使用すると、指定時間まで 処理を一時停止 しておけるのです。Now関数で現在のシステム日付と時刻を得て、それに 1 秒を加えています。つまり「次の処理に移るまで 1 秒待ちなさい」という命令を与えているのです。

 ところで、上のマクロを実行してみると「ちょっと動きが遅いな~」と思うかもしれません。アニメーションで 1 秒はかなり長く感じる間隔です。てことで、これを 0.5 秒間隔にしてみましょ~。

 'ブロック落とし② (C)KOBATO

 Sub CellMovement2()

 Dim i As Integer

 For i = 1 To 9

 '背景色をクリアします
 Cells(i, 2).Interior.ColorIndex = 0

 '背景色を赤にします
 Cells(i + 1, 2).Interior.ColorIndex = 3
 Application.Wait [Now() + "0:00:00.5"]

 Next i

 End Sub

 Waitメソッドの引数の中で加える時間を

"0:00:00.5"

のように指定してあります。これがコンマ 5 秒を表す書き方です。最小でミリ秒まで指定できますよ。これを応用すると「テトリス」みたいなゲームが作れるかもしれません ...... たぶん ...... 作ったことないからわからないけど。
 

ぐるぐる動き回ります

 今度はブロックがあちこち動き回るプログラムを作ってみましょ~。
 マクロはこんなふうに書くのね~。

 'ぐるぐる動き回ります
 '(C)KOBATO http://atelierkobato.com/vba-wait/

 Sub CellAnimation()

 Dim i As Integer
 Dim j As Integer
 Dim ct As Integer
 Dim rd As Integer

 Randomize

 i = 10
 j = 10

 For ct = 1 To 30

 '1 から 4 の乱数を作るよ
 rd = Int(RND * 4 + 1)

 Cells(i, j).Interior.ColorIndex = 0

 Select Case rd

 Case 1

  i = i + 1

 Case 2

  i = i - 1

 Case 3

  j = j + 1

 Case Else

  j = j - 1

 End Select

 '端に来たら戻りましょ~
 If i <= 0 Then

  i = i + 1

 End If

 If j <= 0 Then

  j = j + 1

 End If

 Cells(i, j).Interior.ColorIndex = 3
 Application.Wait [Now() + "0:00:00.5"]

 Next ct

 End Sub

 Rnd関数で乱数を発生させて、色を塗るセルをランダムに移動させているのです。このマクロを実行すると、ブロックがぐるぐるぐると動き回りますよ~。面白いのでぜひ試してみてね~。それではまた次回お会いしましょ~。 ≫ VBA の技術

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)