Excel VBA(マクロ)で図形の位置を取得・変更・移動する方法/Top、Left、IncrementLeft、IncrementTopの使い方

IT

Top、Leftプロパティを変更することで、図形の位置、座標を変更・取得することができます。

スポンサーリンク

Left、Topプロパティの使い方

図形の位置の取得
図形.Left(左右)
図形.Top(上下)

図形の位置の変更
図形.Left = 値(左右)
図形.Top = 値(上下)
※図形はShapeオブジェクトまたはShapeRangeコレクションで指定

左右に移動

shape top left1
動かすための図形をいくつか用意しておきます。
' vba
ActiveSheet.Shapes(1).Left = 200
Shapes(1)でインデックス番号1(重なり順が一番下)の図形を取得し、Leftプロパティの値を200に変更してみましょう。
shape top left2
図形が左から200ポイントの位置に移動します。

上下に移動

' vba
ActiveSheet.Shapes("図形1").Top = 100
図形の取得を名前で行う場合は、Shapes(“図形の名前”)のように記述します。
今度は同じ図形を名前で指定し、Topプロパティを100に指定してみます。
shape top left3
図形が上から100ポイントの位置へ移動します。図形の名称は、図形をクリックした状態で名前ボックスを参照するなどの方法で確認できます。
' vba
With ActiveSheet.Shapes("図形1")
.Left = 35
.Top = 20
End With
縦横を同時に指定する場合は、Withステートメントを使用するとすっきりおさまります。

位置の取得

' vba
Range("C1").Value = ActiveSheet.Shapes(2).Left
=をつけずに値として使用することで、図形の位置を取得することができます。
shape top left5
四角い図形の座標が取得され、セルに代入されました。
' vba
MsgBox "図形の位置はLeftが" & ActiveSheet.Shapes(2).Left & "、Topが" & ActiveSheet.Shapes(2).Top & "です"
もうちょっと色々つけてやると、
shape top left4
たとえばこんな感じのこともできます。

複数図形を操作

' vba
ActiveSheet.Shapes.Range(Array(1, 2)).Left = 150
ShapeRangeコレクションで複数図形を指定すれば、同時にプロパティを変更することができます。
shape top left6
実行結果です。
' vba
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.Top = 50
すべての図形を同時に操作するには、一度Shapes.SelectAllで全図形を選択してから、Selection.ShapeRangeに対してプロパティを指定します。
shape top left7
実行結果です。丸はインデックス番号が低いので、四角の後ろに隠れてしまっています。

複数図形の取得はできない

' vba
MsgBox ActiveSheet.Shapes.Range(Array(1, 3)).Left
複数図形の位置を取得しようとすると、
shape top left8
あまりよろしくない雰囲気の結果になります。
shape top left9
同じコードでTopを取得するとちゃんと取得できるので、どうやら平均を取得してるようです。
つまり同時に複数の座標は取得できないと思ってよいと思います。

IncrementLeft、IncrementTopメソッドの使い方

図形を現在の位置を基準に移動

図形.IncrementLeft(Increment)(左右)
図形.IncrementTop(Increment)(上下)
※図形はShapeオブジェクトまたはShapeRangeコレクションで指定

現在地を基準に左右に移動

' vba
ActiveSheet.Shapes(1).IncrementLeft (10)
IncrementLeftは、現在の図形の座標を基準に左右に移動させることができるメソッドです。
incrementleft 1
実行すると、
incrementleft 2
指定ポイント分図形が左右に移動します。

現在地を基準に上下に移動

' vba
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.IncrementTop (-10)
IncrementTopも同様に、現在地を基準に図形を上下に動かせるメソッドです。
incrementleft 3
今度はすべての図形を選択し、ShapeRangeコレクションに対して実行します。
incrementleft 4
実行結果です。
Excel(エクセル):図形
Excelでは、図形という機能を使うことで四角形や丸、矢印などのオブジェクトをシート状に配置することができます。セルの形状を無視して配置できるので、フローチャートや装飾、注釈などアイデア次第でさまざまな用途に利用できます。 図形作成の基礎...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

コメント