【VBA】ワークシートに円を作成してジグザグに動かします
今回はVBAで円をジグザグにアニメーションさせちゃおうという記事です。いわゆる有名なランダムウォークのアルゴリズムを使います。
最初に、ワークシートに円を表示させて名前をつけるマクロを用意しておきます。
'[VBA] ワークシートに円を作成するプロシージャ Sub Make_Circle() Dim p1 As Single, p2 As Single Dim s1 As Single, s2 As Single With Selection p1 = 200 '左端からの位置 p2 = 200 '上端からの位置 s1 = 20 '図形の横幅 s2 = 20 '図形の縦幅 End With '円(楕円)を追加 ActiveSheet.Shapes.AddShape(msoShapeOval, p1, p2, s1, s2).Name = "circle" With ActiveSheet.Shapes("circle") '図形の背景色を青に設定 .Fill.ForeColor.RGB = vbBlue '図形の枠線を無しに設定 .Line.Visible = False End With End Sub
Make_Circle() を実行すると、ワークシートに青い円がひょっこり出現します。AddShape メソッドの引数を msoShapeOval で指定して Shape コレクションに新しい図形(楕円)を追加しています。msoShapeOval は一般に楕円を作成しますが、縦幅と横幅を同じにすることで円になります。このマクロで図形に “circle” という名前をつけていますが、このオブジェクト名は次のマクロで使用します。
Make_Circle() を実行してから(シートに円を作ってから)、次の Move_Circle() を実行すると、円がジグザグ(ランダム)にあちこち動き回りますよ。
'[VBA] 円がジグザグに動き回るプロシージャ Sub Move_Circle() Dim ct As Integer Dim crc As Object 'オブジェクト変数に図形を入れる Set crc = ActiveSheet.Shapes("circle") Randomize For ct = 1 To 100 '1~4の乱数を発生させる rd = Int(RND * 4 + 1) '得られた乱数によって移動方向を決定する Select Case rd Case 1 crc.Top = crc.Top + 3 Case 2 crc.Top = crc.Top - 3 Case 3 crc.Left = crc.Left + 3 Case Else crc.Left = crc.Left - 3 End Select '処理間隔を 0.1 秒に設定 Application.Wait [Now() + "0:00:00.1"] Next ct End Sub
面白いから試してみてね。
Waitメソッド は処理を指定時間だけ停止させます。
Application.Wait [Now() + "0:00:00.1"]
という記述で繰り返し処理の 1 ステップごとに 0.1 秒だけ時間を止めて円の移動速度を緩めています。この記述がないと、あっという間に処理が終わってしまうので、円が瞬間移動したようにしか見えません。
コメント