「vba GroupShapes GroupItems オブジェクト」
という検索キーワードでアクセスがありました。
Excel VBAの、GroupItemsプロパティとGroupShapesコレクションについて調べていた方による検索でしょうか。
Excel VBAのGroupItems・GroupShapesとは
Excel VBAのGroupItemsは、(オブジェクトブラウザーで検索すればわかるとおり)図形を表すShapeオブジェクトまたはShapeRangeオブジェクトに用意されているプロパティで、
いずれも、グループ化されている個々の図形(Shapeオブジェクト)を要素として含むGroupShapesコレクションが戻り値です。
グループ化された図形を確認するサンプル
サンプルマクロもご紹介しておきましょう。
アクティブなワークシートに、グループ化された図形を作成しておいてから、以下のSubプロシージャを実行してみてください。
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoGroup Then
shp.Select
Application.ScreenUpdating = True
MsgBox shp.Name
Dim shp_child As Shape
For Each shp_child In shp.GroupItems
shp_child.Select
Application.ScreenUpdating = True
MsgBox shp_child.Name
Next shp_child
Next shp
End Sub
アクティブシート上の全図形に対してFor Each~Nextループを回して、
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
グループ化された図形だったときに、
If shp.Type = msoGroup Then
その図形が選択され、
shp.Select
図形の名前がメッセージボックスに表示されます。
MsgBox shp.Name
途中に入っている、
Application.ScreenUpdating = True
は、以前のExcelならば不要だった処理で、最近はVBAで選択した状態をExcel側ですぐに目視確認できないときがあるので、画面を更新するために入れています。
つづく処理が、
「vba GroupShapes GroupItems オブジェクト」
と検索なさった方に、しっかり確認していただきたい部分です。
グループ化された図形を表すShapeオブジェクトのGroupItemsプロパティで取得したグループ化された個々の図形に対してFor Each~Nextループを回して、
Dim shp_child As Shape
For Each shp_child In shp.GroupItems
図形を選択して名前を表示しています。
shp_child.Select
Application.ScreenUpdating = True
MsgBox shp_child.Name
内側のFor Each文
For Each shp_child In shp.GroupItems
で使っている「.GroupItem」がShapeオブジェクトのGroupItemプロパティで、実行されるとGroupShapesコレクションが返されることを強く意識しましょう。
最終更新日時:2021-05-26 16:02
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » GroupItems・GroupShapesとは