動作検証バージョン:Windows版Excel(バージョン1901 ビルド11231.20130)
Shapesコレクションの、Itemメソッドや_Defaultメソッドの引数にインデックス番号を指定することで、
個々の図形を表す、単独のShapeオブジェクトを取得できます。
このインデックス番号は固定ではなく、重なり順(前面・背面)を変更すると変化し、
(グループ化された図形がなければ)ShapeオブジェクトのZOrderPositionプロパティが返す値と一致します。
このことをご存じないと思われる記述を見かけたので、記事にさせていただきます。
Shapesのインデックス番号は基本的にはZOrderPositionと一致する
Shape.ZOrderPositionのヘルプには、以下のように書かれています。
A shape's position in the z-order corresponds to the shape's index number in the Shapes collection. (重ね順での図形の位置は Shapes コレクションの図形のインデックス番号に対応します。)
Shapesのインデックス番号がZOrderPositionと一致することを確認するサンプル
以下のSubプロシージャを実行すると、アクティブシート上の最背面に配置されている図形から順番に、前面に配置されている図形が選択され、インデックス番号とZOrderPositionプロパティの返す値がメッセージボックスに表示されます。
Sub Shapesのインデックス番号とZOrderPositionが一致することを確認する()
With ActiveSheet.Shapes
Dim i As Long
For i = 1 To .Count
.Item(i).Select
Application.ScreenUpdating = True
MsgBox _
i & vbCrLf & _
.Item(i).ZOrderPosition
Next i
End With
End Sub
With ActiveSheet.Shapes
Dim i As Long
For i = 1 To .Count
.Item(i).Select
Application.ScreenUpdating = True
MsgBox _
i & vbCrLf & _
.Item(i).ZOrderPosition
Next i
End With
End Sub
アクティブシート上の図形の重なり順を変更して、何度か実行してみてください。
ただし、グループ化された図形が存在する場合には、インデックス番号とZOrderPositionは一致しなくなります。
最終更新日時:2021-12-22 13:16
[スポンサードリンク]
- Newer:他の受講者との会話も刺激に
- Older:クラスを作ったらステップ実行してみましょう
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Shapesのインデックス番号は固定ではなく基本的にはZOrderPositionと同じ