VBAで図形(オートシェイプ)の位置やサイズを変更する方法です。
図形を操作するには、Shapeオブジェクトを操作します。
作成する際に位置やサイズを指定する方法と、すでに作成済みの図形を操作する方法、全ての図形の操作等それぞれご説明します。
その他の図形の操作については、下記記事をご覧ください。
- 図形(オートシェイプ)一覧と作成/追加する方法
- 図形(オートシェイプ)を取得する方法
- 図形(オートシェイプ)を反転、回転させる方法
- 図形(オートシェイプ)の塗りつぶしを変更する方法
- 図形(オートシェイプ)の枠線の色や種類と太さを変更する方法
- 図形(オートシェイプ)にテキスト・文字列の入力方法
- 図形(オートシェイプ)にマクロを登録する方法
1.図形(オートシェイプ)の位置やサイズを操作する
新しく図形を作成する場合は「AddShapeメソッド」の引数で作成と同時に指定します。
すでに作成済みの図形を操作する場合は、図形を取得してから「Shapeオブジェクト」を操作する事になります。
Shapeオブジェクトで位置とサイズを操作する場合の説明です。
位置を操作する
図形の位置を操作するには「Shapeオブジェクト」のTopプロパティとLeftプロパティを操作します。
位置はセルで指定する事もできますし、数値でそれぞれ「x,y」座標で指定する事ができます。
次のように記述します。
Object.Top=Range("B2").Top
Object.Lset=Range("B2").Lset
Object.Top=100
Object.Lset=100
サイズを操作する
図形のサイズを操作するには、「Shapeオブジェクト」のWidthプロパティとHeightプロパティで操作します。
サイズはセルで指定する事もできますし、数値で指定する事ができます。
次のように記述します。
Object.Width=Range("B2:C2").Width
Object.Height=Range("B2:C3").Height
Object.Width=100
Object.Height=100
2.図形を作成と同時に位置とサイズを指定する
図形を作成時に位置とサイズを指定する方法です。
図形(オートシェイプ)を作成するには「Shapeオブジェクト」を操作します。
AddShapeメソッドで新しく図形を作成できます。
次のように記述します。
Shapesオブジェクト.AddShape(Type, Left, Top, Width, Height)
AddShapeメソッドの引数の「Left, Top, Width, Height」で指定します。
サンプルコード
Sub Sample1()
'Type,Left,Top,Width,Heightを指定
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50)
'図形の塗りつぶし色を指定
.Fill.ForeColor.RGB = RGB(100, 200, 255)
End With
End Sub
3.作成済みの図形(オートシェイプ)の位置とサイズを変更する
作成時には「AddShapeメソッド」で同時に指定しましたが、すでに作成済みの場合は「 Shapeオブジェクト 」を取得して、取得した図形を操作します。
図形を取得するには番号、もしくは図形の名前で取得します。
取得するには次のように記述します。
ActiveSheet.Shapes(1)
ActiveSheet.Shapes("正方形/長方形 1")
サンプルコード
1つの図形を指定して操作するサンプルコードです。
Sub Sample2()
'Shapeオブジェクトを指定
With ActiveSheet.Shapes(1)
.Top = 50 '位置を指定
.Left = 50 '位置を指定
.Width = 50 '幅を指定
.Height = 50 '高さを指定
End With
End Sub
4. すべての作成済みの図形の位置とサイズを変更する
ワークシートに作成された全ての図形(オートシェイプ)を操作して位置とサイズを変更します。
全て操作するにはループで図形を1つずつ取得して、操作します。
For Each~Nextで取得して変更するサンプルコード
図形もオブジェクトなので、For Each~Nextでループして取得する事ができます。
Sub Sample3()
Dim Shp As Shape
Dim t As Long
Dim l As Long
Dim w As Long
Dim h As Long
t = 50 'Top位置
l = 50 'Left位置
w = 50 '幅
h = 50 '高さ
For Each Shp In ActiveSheet.Shapes
With Shp
.Top = t
.Left = l
.Width = w
.Height = h
End With
l = l + 100 '左の位置のみ変更
Next Shp
End Sub
For~Nextで取得して変更するサンプルコード
For~Nextでループする場合には図形の数を取得する必要があります。
その場合は「Count」で取得可能です。
Sub Sample4()
Dim i As Long
Dim t As Long
Dim l As Long
Dim w As Long
Dim h As Long
t = 50 'Top位置
l = 50 'Left位置
w = 50 '幅
h = 50 '高さ
With ActiveSheet
For i = 1 To .Shapes.Count
With .Shapes(i)
.Top = t
.Left = l
.Width = w
.Height = h
End With
l = l + 100 '左の位置のみ変更
Next i
End With
End Sub