Excelでグループ化されたオートシェイプ・図形が大量に存在するときに、それらを一気にグループ解除したいということがあります。
単純にグループ化されているだけならいいのですが、グループ化されている図形が更にグループ化されているようなときに、手作業で解除をしようとするとかなり面倒です。
全グループ化解除を行うサンプルマクロ
以下のようなマクロで、ワークシート上のグループ化されている図形がすべてグループ解除できます。
Dim has_grp As Boolean ''グループ化図形があることを示すフラグ
Dim shp As Shape has_grp = True
Do While has_grp
For Each shp In ActiveSheet.Shapes
If shp.Type = msoGroup Then
has_grp = True
shp.Ungroup
Else
has_grp = False
End If
Next shp
Loop
End Sub
サンプルマクロの解説
単純にグループ化されたオートシェイプ・図形が存在しているだけなら、
For Each shp In ActiveSheet.Shapes
If shp.Type = msoGroup Then
shp.Ungroup
End If
Next shp
といったマクロでOKです。
厄介なのは、グループ化された図形がさらにグループ化されているようなケースです。
そんなときにも対応できるようにしたのが上記のマクロです。
グループ化されている図形があることを示すフラグが立っている間、処理し続けるDo~Loop文の中に、
has_grp = True
Do While has_grp
シート上のすべての図形に対してループをまわすFor Each~Nextループを入れて、
For Each shp In ActiveSheet.Shapes
その中でグループ化の解除とフラグの変更を行っています。
If shp.Type = msoGroup Then
has_grp = True
shp.Ungroup
Else
has_grp = False
End If
Next shp
Loop
- Newer:フィルタ実行時に可視セルにだけ連番を振る
- Older:文字数をカウントするPowerPointマクロ
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » グループ化されたオートシェイプ・図形をVBAでグループ解除する