Excel VBA 図形の参照

スポンサーリンク

図形を参照する方法

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

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

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

図形を表すコレクションとオブジェクト一覧

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

図形を表すコレクションやオブジェクトのプロパティ一覧

プロパティ 内容
Shapes
【シェイプス】
ワークシート上の1つの図形を表す
Shape【シェイプ】オブジェクトを取得します。
ShapeRange
【シェイプレンジ】
複数の図形を参照している
ShapeRange【シェイプレンジ】コレクション
を取得します。
Range
【レンジ】
複数の図形を表す
Shapes【シェイプス】コレクションから
図形や複数の図形を参照します。
Name
【ネーム】
図形の名前を取得または、設定します。
ZOrderPosition
【ゼットオーダーポジション】
図形の重なり順を取得します。

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オブジェクトのプロパティ
図形の塗りつぶしを設定するプロパティやメソッド 
以上で、図形の参照についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告