Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » グループ化されたオートシェイプ・図形をVBAでグループ解除する

グループ化されたオートシェイプ・図形をVBAでグループ解除する

対象:Excel2003, Excel2007, Excel2010, Excel2013

グループ化されたオートシェイプ・図形をすべてグループ解除するエクセルマクロ

Excelでグループ化されたオートシェイプ・図形が大量に存在するときに、それらを一気にグループ解除したいということがあります。

単純にグループ化されているだけならいいのですが、グループ化されている図形が更にグループ化されているようなときに、手作業で解除をしようとするとかなり面倒です。

[スポンサードリンク]

全グループ化解除を行うサンプルマクロ

以下のようなマクロで、ワークシート上のグループ化されている図形がすべてグループ解除できます。

Sub アクティブシート上のグループ化図形をすべてグループ解除する()
 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

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » グループ化されたオートシェイプ・図形をVBAでグループ解除する

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.