Excel VBA 図形(オートシェイプ)の位置やサイズを変更する

図形作成/操作

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
タイトルとURLをコピーしました