「パワポ グループ化 解除 vba」
「パワーポイント マクロ グループ化解除」
「powerpoint vba オートシェイプグループ化解除」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
Excelのアクティブなシート上の、グループ化されている図形・オートシェイプのグループ解除を行うマクロをご紹介しています。
「パワポ グループ化 解除 vba」
「パワーポイント マクロ グループ化解除」
「powerpoint vba オートシェイプグループ化解除」
といった検索は、このマクロのPowerPoint版を探している方によるものでしょう。
Excelの全グループ化解除と同じロジックではPowerPointの場合...
既にご紹介しているExcelマクロで、
For Each shp In ActiveSheet.Shapes
となっている部分を、例えば、
For Each shp In ActiveWindow.Selection.SlideRange.Shapes
としてやれば、PowerPointのアクティブなスライド上で、グループ解除が行われそうなものですが、残念ながらダメです。
これだけではPowerPointの場合、グループ解除されない図形が残ってしまいます。
For Each~Nextループが、Excel VBAとPowerPoint VBAでは異なった動きをするためです。
全グループ化図形をグループ解除するサンプルマクロ
PowerPointでは以下のようなマクロにすれば、グループ化された図形の中で更にグループ化されている場合でも、すべてグループ解除されます。
Dim has_grp As Boolean ''グループ化された図形の存在を示すフラグ
Dim shp As Shape has_grp = True
Do While has_grp
For Each shp _
In ActiveWindow.Selection.SlideRange.Shapes
If shp.Type = msoGroup Then
has_grp = True
shp.Ungroup
Exit For
Else
has_grp = False
End If
Next shp
Loop
End Sub
Excel版とPowerPoint版の違い
パッと見ただけでは、基本的な処理は、Excel版のグループ解除マクロと同じに見えるかもしれません。
どこが違うかというと、グループ化されている図形が見つかったときの、
If shp.Type = msoGroup Then
has_grp = True
shp.Ungroup
Exit For
Else
の部分です。
この部分がExcel版では、
If shp.Type = msoGroup Then
has_grp = True
shp.Ungroup
Else
となっています。
PowerPoint版では、グループ解除を行う
shp.Ungroup
という行のあとに、
Exit For
という行が存在する点が違っています。
つまり、グループ化された図形がみつかったら、グループ解除をしてFor Each~Nextループを抜けて、もう一度For Each~Nextループを最初からやり直しているのです。
Excelの場合こんな冗長な処理をしなくてもいいのですが、PowerPoint VBAでは、For Each~Nextループの動きがExcel VBAとは異なっているため、しつこく処理を繰り返してやらないとグループ化された図形が残ってしまいます。
- Newer:表の列を選択するWordマクロ
- Older:マクロ学習の入り口として整理された道筋
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » グループ化された図形・オートシェイプをグループ解除するパワポマクロ