水曜日, 6月 14, 2023

Excel VBA 20 
図形の回転、複製と組み合わせ

選択した図形の回転と複製、そしてそれらの組み合わせについて整理してみました。今回はWordやPowerPointでも使えます。

■選択した図形を数値入力値の角度で回転
----------------------
Sub 図形回転()
    ' 選択した図形を取得
Dim selectedShape As Shape
Set selectedShape = Selection.ShapeRange(1)

' ユーザーから回転角度を数値入力してもらう
Dim rotationAngle As Double
rotationAngle = _
    CDbl(InputBox("回転角度を入力してください(度数法)"))
' 図形を回転
With selectedShape
.IncrementRotation rotationAngle
End With
End Sub
----------------------

上は処理結果です。

なお、Selection.ShapeRange(1) は・・・
(1)は描画した図形の順番で、5つの図形を描いて全選択していても
(3)と記述すれば3番目に描いた図形が対象になります。

選択した図形を複製
----------------------
Sub 図形複製()
    ' 選択した図形を取得
Dim selectedShape As Shape
Set selectedShape = Selection.ShapeRange(1) 

' 図形を複製
Dim duplicatedShape As Shape
Set duplicatedShape = selectedShape.Duplicate

End Sub
----------------------

上は処理結果ですが、出来れば同じ位置に複製したいのでソースを再考。


選択図形を同じ位置に複製
----------------------
Sub 選択図形を同じ位置に複製()
    ' 選択した図形を取得
Dim selectedShape As Shape
Set selectedShape = Selection.ShapeRange(1)

' 図形を複製
Dim duplicatedShape As Shape
Set duplicatedShape = selectedShape.Duplicate

' 複製された図形は元データの位置に
duplicatedShape.Left = selectedShape.Left
duplicatedShape.Top = selectedShape.Top
End Sub
----------------------

なんとか同じ位置に複製できました。


選択図形を指定位置に複製
----------------------
Sub 選択図形を指定位置に複製()
    ' 選択した図形を取得
Dim selectedShape As Shape
Set selectedShape = Selection.ShapeRange(1)

    ' 図形を複製
Dim duplicatedShape As Shape
Set duplicatedShape = selectedShape.Duplicate

' 複製された図形は元データの位置に
duplicatedShape.Left = selectedShape.Left
duplicatedShape.Top = selectedShape.Top

' 複製された図形を移動するなどの処理を行う
' 例えば、複製された図形を右に移動する場合
' 水平方向の移動量(ピクセル)
Dim offsetX As Long
offsetX = 50
' 垂直方向の移動量(ピクセル)
Dim offsetY As Long
offsetY = 50
' 図形を移動
selectedShape.Left = selectedShape.Left + offsetX
selectedShape.Top = selectedShape.Top + offsetY
End Sub
----------------------

上は処理結果です。


選択した図形を複製し数値入力値の角度で回転
----------------------
Sub 選択図形を複製て回転()
    ' 選択した図形を取得
Dim selectedShape As Shape
Set selectedShape = Selection.ShapeRange(1)
' 図形を複製
Dim duplicatedShape As Shape
Set duplicatedShape = selectedShape.Duplicate
' 複製された図形は元データの位置に
    duplicatedShape.Left = selectedShape.Left
    duplicatedShape.Top = selectedShape.Top
' ユーザーから回転角度を数値入力してもらう
Dim rotationAngle As Double
rotationAngle = _
    CDbl(InputBox("回転角度を入力してください(度数法)"))
' 複製された図形を回転
With duplicatedShape
.IncrementRotation rotationAngle
End With
End Sub
----------------------

上は処理結果です。