Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » 選択されていない図形・オートシェイプを選択するPowerPointマクロ

選択されていない図形・オートシェイプを選択するPowerPointマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

「選択されていないオートシェイプを削除」
という検索キーワードをもとにして、アクティブなワークシートで選択されていない図形(オートシェイプ)だけを選択しなおすExcelマクロをご紹介しました。

PowerPoint版も作ってみました。

[スポンサードリンク]

選択されていない図形だけを選択するサンプルマクロ

PowerPointで、いくつかの図形を選択した状態で以下のマクロを実行すると、選択されていなかった図形だけが選択された状態になります。

Sub 選択されていない図形だけを選択する()

 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マクロ

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

検索


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

.