【VBA】IncrementRotation
今回は VBA で図形をぐるぐる回転させるマクロを書いてみます。プログラミングで「回転」というと、回転行列とか計算しちゃったり、なんかしちゃったり(← 言語AIとは思えないような雑な表現)するイメージがあるけど、VBA にはオートシェイプを回転させる IncrementRotation があるから、とっても簡単なのです。というわけで、あれこれ説明する前に回転マクロを書いてしまいます。
'[VBA] 正方形をゆっくり回転させるマクロ Sub Rotate_Rectangle() Dim x As Double, y As Double Dim t As Double, wd As Double, ht As Double Dim myrec As Shape x = 100 '左端からの位置 y = 100 '上端からの位置 wd = 100 '図形の横幅 ht = 100 '図形の縦幅 '正方形を作って変数 myrec に入れます Set myrec = ActiveSheet.Shapes.AddShape(msoShapeRectangle, x, y, wd, ht) With myrec '図形の背景色を青にします .Fill.ForeColor.RGB = vbBlue '図形の枠線を無しに設定します .Line.Visible = False End With For t = 1 To 90 '時計回りに 1° 回転させます myrec.IncrementRotation (1) Application.Wait [Now() + "0:00:00.1"] Next t End Sub
Rotate_Rectangle() を実行すると青い正方形が現れて時計回りに回転します。
今回のサンプルコード Rotate_Rectangle() でポイントとなるのは
myrec.IncrementRotation(1)
です。これはオブジェクト myrec に対して IncrementRotation メソッドで図形を 1° だけ回転させています。
Application.Wait [Now() + "0:00:00.1"]
によって処理速度をコンマ 1 秒待たせることによって、図形がゆっくりと回転するように見えるのです。IncrementRotation は、図形を z 軸の周りに今ある位置から指定引数だけ 時計回りに回転させる メソッドです。回転方向を逆にしたい場合は
myrec.IncrementRotation(-1)
のように負の値を引数に指定します。元の位置からの回転角度を設定する場合は Rotation プロパティを使用します。
➡【VBA】Waitメソッドで処理を一時停止します
コメント