「選択されていないオートシェイプを削除」
という検索キーワードをもとにして、アクティブなワークシートで選択されていない図形(オートシェイプ)だけを選択しなおすExcelマクロをご紹介しました。
PowerPoint版も作ってみました。
選択されていない図形だけを選択するサンプルマクロ
PowerPointで、いくつかの図形を選択した状態で以下のマクロを実行すると、選択されていなかった図形だけが選択された状態になります。
Dim shp As Shape
Dim shp_ids As New Collection
Dim shp_id As Variant
Dim is_select As Boolean
With ActiveWindow.Selection
If .Type = ppSelectionNone _
Or .Type = ppSelectionSlides Then Exit Sub
For Each shp In .ShapeRange
shp_ids.Add shp.Id
Next shp
.Unselect
For Each shp In .SlideRange.Shapes
is_select = False
For Each shp_id In shp_ids
If shp_id = shp.Id Then
is_select = True
Exit For
End If
Next shp_id
If Not is_select Then shp.Select Replace:=msoFalse
Next shp
End With
End Subサンプルマクロの解説
Shapeが選択されていない場合はマクロを終了することで、Shapeが選択されているときだけ処理を開始します。
With ActiveWindow.Selection
If .Type = ppSelectionNone _
Or .Type = ppSelectionSlides Then Exit Sub
まず、選択されているShapeのIDをコレクションに格納しておきます。
For Each shp In .ShapeRange
shp_ids.Add shp.Id
Next shp
選択されていなかったShapeだけを選択するために、一旦、選択状態を解除します。
.Unselect
アクティブなスライド上の全Shapeに対してFor Each~Nextループを開始して、元々選択されていたShapeかどうかを、先にコレクションに格納しておいたShape.IDを使ってチェックして、
For Each shp In .SlideRange.Shapes
is_select = False
For Each shp_id In shp_ids
If shp_id = shp.Id Then
is_select = True
Exit For
選択されていたShapeではなかったときに、選択を行っています。
If Not is_select Then shp.Select Replace:=msoFalse
選択されていない図形だけを選択する際にプレースホルダーは処理対象外とする
上記のマクロを、プレースホルダーの存在しているスライド上で実行したときは、プレースホルダーも選択対象となります。
ですが、実務での利用シーンを想像すると、プレースホルダーは選択対象としたくないというケースのほうが多いのではないでしょうか。
プレースホルダーを選択対象から除外するのなら、後半の、全Shapeへのループを以下のように変更してください。
For Each shp In .SlideRange.Shapes
If Not (shp.Type = msoPlaceholder) Then
is_select = False
For Each shp_id In shp_ids
If shp_id = shp.Id Then
is_select = True
Exit For
End If
Next shp_id
If Not is_select Then shp.Select Replace:=msoFalse
End If
Next shp
ShapeのTypeが、プレースホルダーでなかったときだけ、選択の対象としているわけです。
For Each shp In .SlideRange.Shapes
If Not (shp.Type = msoPlaceholder) Then
選択されていなかった図形だけを削除したい場合
この記事のもととなった検索キーワード
「選択されていないオートシェイプを削除」
どおり、選択されていない図形だけを削除したい場合、上記のマクロの最後のほうで選択を行っている、
If Not is_select Then shp.Select Replace:=msoFalse
の部分を、
If Not is_select Then shp.Delete
としてください。
最終更新日時:2019-06-19 12:57
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » 選択されていない図形・オートシェイプを選択するPowerPointマクロ