Excel VBA 図形の参照

スポンサーリンク
スポンサーリンク

図形を参照する方法

VBAでは、ワークシート上に作成された図形は
すべてShapes【シェイプス】コレクションとして扱い
各図形をShape【シェイプ】オブジェクトとして扱います。

また、複数の図形をまとめて扱いたい場合は
図形の範囲を表すShapeRange【シェイプレンジ】コレクションを
使用します。

Shape【シェイプ】は「形状」という意味があります。

  • Shapes【シェイプス】コレクション
    ワークシート上のすべての図形を表します。
    すべての図形をまとめて扱う場合に使用します。
  • ShapeRange【シェイプレンジ】コレクション
    ワークシート上にあるすべての図形または、図形の範囲を表します。
    複数の図形を指定して扱う場合などに使用します。
  • Shape【シェイプ】オブジェクト
    ワークシート上にある単体の図形を表します
    一つの図形を扱う場合などに使用します。

Shapes【シェイプス】プロパティ

ワークシート上の1つの図形を表す
Shape【シェイプ】オブジェクトを取得するには
Shapes【シェイプス】プロパティを使用します。

引数のIndex【インデックス】に図形のインデックス番号や
図形の名前を指定することで特定の図形を参照することができます。

引数のIndexを省略すると、ワークシート上のすべての図形を表す
Shapes【シェイプス】コレクションを参照します。

Shapes【シェイプス】プロパティの書式

[]内は省略可能です。
オブジェクト.Shapes([Index])


設定値(引数)の説明

  • オブジェクト(必須)
    Worksheetオブジェクトまたは、Chartオブジェクトを指定します。
  • Index【インデックス】(省略可)
    図形のインデックス番号または、図形の名前を指定します。
    図形のインデックス番号は、図形の重なり順に下から連番で振られます。
    通常、作成順と重なり順は一致しますが、図形の重なり順を変更したり
    削除したりするとインデックス番号が振り直されてしまします。
    インデックス番号で図形を参照する場合は注意が必要です。

ワークシート上のすべての図形を削除するコード例

Sub 全図形削除()
ActiveSheet.Shapes.SelectAll
Selection.Delete
End Sub

すべての図形を参照するには、Shapesプロパティの引数を省略して
shapesコレクションを参照します。
shapesコレクションはDelete【デリート】メソッドを持たないため
SelectAll【セレクトオール】メソッドですべての図形を選択して
Selection【セレクション】プロパティのDeleteメソッドで
すべての図形を削除しています。

ワークシート上で1番最初に作成された図形を削除するコード例

Sub 初めの図形削除()
ActiveSheet.Shapes(1).Select
Selection.Delete
End Sub

ShapeRange【シェイプレンジ】プロパティ

複数の図形に対して同時に削除や書式を設定するときは
図形範囲を表すShapeRangeコレクションに対して操作を
行います。

ShapeRange【シェイプレンジ】プロパティの書式

オブジェクト.ShapeRange


設定値の説明

  • オブジェクト(必須)
    Selectionプロパティで参照している、描画オブジェクトを指定します。
    Shapesコレクションは、ShapeRangeプロパティを持ちません。
    アクティブシート上のすべての図形に対して同じ処理をする場合は
    「ActiveSheet.Shapes.SelectAll」ですべての図形を選択しておき
    「Selection.ShapeRange」でShapeRangeコレクションを参照して
    各種設定を行います。

Range【レンジ】プロパティ

Rangeプロパティで複数の図形を参照するには
Array関数を使用して目的の図形を配列として指定します。

Range【レンジ】プロパティの書式

オブジェクト.Range(Index)


設定値(引数)の説明

  • オブジェクト(必須)
    Shapesコレクションを指定します。
  • Index【インデックス】(必須)
    図形のインデクス番号または、図形の名前
    複数の図形を参照する場合はArray【アレイ】関数で配列を指定します。

特定の図形を選択して色を変更するコート例

実行前

Sub 図形書式変更()
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
ActiveSheet.Shapes.Range(Array(1, 3)).Line.ForeColor.RGB = RGB(0, 255, 0)
End Sub
実行後


Name【ネーム】プロパティ

図形の名前の取得または、設定をするには
Shapeオブジェクトの
Name【ネーム】プロパティを使用します。

Name【ネーム】プロパティの書式

【取得】
オブジェクト.Name
【設定】
オブジェクト.Name = 設定値


設定値の説明

  • オブジェクト(必須)
    Shapeオブジェクトまたは、ShapeRangeコレクションを指定します。
  • 設定値(必須)
    任意の図形の名前を文字列で指定します。
    図形を操作し易くするために同じワークシート上に複数の図形がある場合は
    分かり易い異なる名前を付けるようにしてください。
    また、既定の名前で図形を参照する場合、Excel 2010以降は
    Nameプロパティで取得される名前は、名前ボックスに表示される
    日本語の名前ではなく、英語表記の名前になります。
    参照するときは、日本語表記、英語表記の両方使用できますが
    既定の名前で図形を参照、操作するときは注意が必要です。

インデックス番号1の図形の名前を「丸」に変更するコード例

Sub 図形名前()
ActiveSheet.Shapes(1).Name = "丸"
End Sub

ZOrderPosition【ゼットオーダーポジション】プロパティ

図形のインデクス番号を取得するには
図形の重なり順を調べることで取得することができます。
図形の重なり順は
ZOrderPosition【ゼットオーダーポジション】プロパティで取得できます。

ZOrderPosition【ゼットオーダーポジション】プロパティの書式

オブジェクト.ZOrderPosition


設定値の説明

  • オブジェクト(必須)
    インデックス番号を取得するShapeオブジェクトを指定します。

選択した図形のインデックス番号をメッセージボックスで表示するコード例

Sub インデックス番号()
MsgBox Selection.ShapeRange.ZOrderPosition
End Sub

その他の図形に関するメソッドやプロパティ

直線やテキストボックス、図形を作成するメソッド
線の書式を設定する LineFormatオブジェクトのプロパティ
図形の塗りつぶしを設定するプロパティやメソッド 
以上で
図形の参照についての解説を終了します。
ありがとうございます。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク