【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つのプロパティを持っていて、これらを同じ値にすることで位置をピッタリ合わせています。

《VBA初心者におすすめの本》
VBA初心者には、株式会社すごい改善さんの本が分かりやすくておすすめです。

created by Rinker
技術評論社
¥2,178 (2022/01/21 17:47:06時点 Amazon調べ-詳細)

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/01/21 23:17:25時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい