図形(オートシェイプ)を反転、回転させる方法をご説明します。
図形を作成/追加した場合に、矢印や線など用途によって反転させたり、角度を調整することでより視覚的な操作が必要になることがあります。
図形の反転には「Flipメソッド」を、回転させるには「Rotationプロパティ」を使用して操作します。
反転、回転それぞれ順にご説明します。
また、無限ループを使用して画像が動き続ける簡単なコードも紹介します。
また、その他の図形の操作については次の記事をご覧ください。
- 図形(オートシェイプ)一覧と作成/追加する方法
- 図形(オートシェイプ)の位置やサイズを変更する
- 図形(オートシェイプ)を取得する方法
- 図形(オートシェイプ)の塗りつぶしを変更する方法
- 図形(オートシェイプ)の枠線の色や種類と太さを変更する方法
- 図形(オートシェイプ)にテキスト・文字列の入力方法
- 図形(オートシェイプ)にマクロを登録する方法
1.図形を反転させる方法
図形(オートシェイプ)を反転するには、「Flipメソッド」を使います。
次のように記述します。
Object.Flip 反転方向
Flipの引数一覧
引数 | 説明 |
msoFlipHorizontal | 左右反転 |
msoFlipVertical | 上下反転 |
2.図形を反転させるサンプルコード
図形を反転させるサンプルコードです。
次の図を左右上下それぞれ反転させたいと思います。
図形の取得方法については「図形(オートシェイプ)を取得する方法」をご覧ください。

上下反転
Sub Sample1()
With ActiveSheet
.Shapes(1).Flip msoFlipVertical
End With
End Sub

左右反転
Sub Sample2()
With ActiveSheet
.Shapes(1).Flip msoFlipHorizontal
End With
End Sub

3.図形を回転させる方法
図形(オートシェイプ)を回転するには、「Rotationメソッド」を使います。
図形は設定した角度で、図形の中心を軸に時計周りに回転します。
反時計回りに回転させたい場合には、回転させる値をマイナスで設定してください。
また、注意として現時点の角度から指定した数値分回転させるのではなく、指定した数値の角度になります。
次のように記述します。
Object.Rotation = 回転させる数値
4.図形を反転させるサンプルコード
図形を回転させるサンプルコードです。
次の図を時計回り/反時計回りでそれぞれ回転させたいと思います。

時計回りに回転
時計回りに45度傾けます。
Sub Sample3()
With ActiveSheet
.Shapes(1).Rotation = 45
End With
End Sub

反時計回りに回転
半時計回りに45度傾けます。
Sub Sample4()
With ActiveSheet
.Shapes(1).Rotation = -45
End With
End Sub

6.回転させ続けるサンプルコード
無限ループを使用する事で、図形をずっと回転させることも可能です。
ポイントは無限ループを意図的に組み込むことと、「DoEvents」で滑らかに描画することです。
また、回転をゆっくりするためにAPI関数の「Sleep」を使用しています。
「Sub Sample5()」の上に書かれている部分でSleepを使用できるように宣言しています。
また、より複雑に作りこむことで「太陽系をイメージして図形の球体(Shape)をグラフィカルに動かす」のような図形の移動も可能です。
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
Sub Sample5()
Dim i As Long
i = 1
With ActiveSheet
Do
DoEvents
DoEvents
.Shapes(1).Rotation = i
If i = 360 Then
i = 1
Else
i = i + 1
End If
Sleep 10
Loop
End With
End Sub