【VBA】図形(Shape)の位置とサイズを指定する方法
今回は図形(Shapeオブジェクト)の位置とサイズをVBAで指定する方法を紹介します。
位置は上下左右ではなく、上・高さ・左・幅の4つを指定することによって決めることができます。
位置指定を応用して、図形の位置をセルに合わせる方法もお見せするので、必要に応じて使ってみてください。
図形の位置とサイズを指定する方法
Shapeオブジェクトの位置はTop、Height、Left、Widthの4つのプロパティによって指定します。
このプロパティの関係は上の図のようになります。
上下左右の下と右を指定する部分はないのですが、代わりに高さ(Height)と幅(Width)によって調整することができます。
Sub ShpPos()
Dim oneShp As Shape
For Each oneShp In ActiveSheet.Shapes
'図形の位置をイミディエイトウィンドウに表示
Debug.Print oneShp.Top
Debug.Print oneShp.Height
Debug.Print oneShp.Left
Debug.Print oneShp.Width
Next
End Sub
試しにシート上に1つだけShapeオブジェクトを置いた状態で、上のサンプルコードを実行してみてください。
Shapeオブジェクトを動かしつつ、各プロパティの値を確認すると理解できると思います。
図形の位置とサイズをセルに合わせる方法
Sub ShpPosCell()
'アクティブシート上の図形の位置をすべてA1:C3セルに合わせる
Dim rng As Range: Set rng = Range("A1:C3")
Dim oneShp As Shape
For Each oneShp In ActiveSheet.Shapes
'図形の位置をrng(A1:C3セル)と一致させる
oneShp.Top = rng.Top
oneShp.Height = rng.Height
oneShp.Left = rng.Left
oneShp.Width = rng.Width
Next
End Sub
4つのプロパティを応用すると、図形をセルに合わせて配置することもできます。
上のコードを実行すると、アクティブシート上のすべての図形がA1:C3セルと同じ位置に移動します。
'図形の位置をrng(A1:C3セル)と一致させる
oneShp.Top = rng.Top
oneShp.Height = rng.Height
oneShp.Left = rng.Left
oneShp.Width = rng.Width
RangeオブジェクトもShapeオブジェクトと同じく4つのプロパティを持っていて、これらを同じ値にすることで位置をピッタリ合わせています。