人力検索はてなで、
「パワーポイントで同じ色のオートシェイプを形状に関係なく選択する方法(マクロのソースコードなど)をお教えください...」
という質問と回答があるのに気づきました。
図形が大量に配置されているプレゼンテーション資料を編集する場合、図形の色を変更しようと思うと結構面倒です。
少しでも楽をしようとする場合、まず一つの図形の色を変更して、その後は[F4]キーで色の変更作業を繰り返すのでしょうか。
あるいは同じ色の図形を全部選択しておいてから、色をまとめて変更しようと考える方もいらっしゃるでしょう。この場合、うっかり別の色の図形を選択してしまうと、その解除作業にイライラさせられることになります。
そのため、同じ色の図形を全部選択するマクロが欲しいという要望が出るのは、とても納得できることです。
この質問に対する回答として人力検索はてなでは、図形の名前を配列変数に格納して、最後に一気に選択するというコードが紹介されています。
しかし、配列はプログラミング初心者の方にとって難易度は決して低くありません。
そこでここでは配列を使わず、アクティブなスライド上で、選択されている図形と同じ色の図形をすべて選択するマクロをご紹介しておきます。
Dim shp As Shape
Dim rgb_num As Long
With ActiveWindow.Selection
If .Type = ppSelectionNone _
Or .Type = ppSelectionSlides Then Exit Sub
If .Type = ppSelectionText Then .ShapeRange.Select
rgb_num = .ShapeRange.Fill.ForeColor.RGB
For Each shp In .SlideRange.Shapes
If shp.Fill.ForeColor.RGB = rgb_num Then
shp.Select Replace:=msoFalse
End If
Next shp
End With
End Subメインの処理は、選択されている図形の塗りつぶし色を変数に格納する部分からです。
rgb_num = .ShapeRange.Fill.ForeColor.RGB
アクティブスライド上の全図形に対してループを回して、
For Each shp In .SlideRange.Shapes
塗りつぶし色が、選択されている図形と同じなら
If shp.Fill.ForeColor.RGB = rgb_num Then
その図形を選択しています。
shp.Select Replace:=msoFalse
ShapeオブジェクトのSelectメソッドは、引数ReplaceにmsoFalseを指定することで、既に選択されているShapeの選択を解除せずに、追加する形で選択することができます。
この引数を使えば、人力検索はてなの回答者さんのように配列を使わなくても、選択することが可能になります。
メインの処理に入る前に、
選択されているものがない場合、スライドが選択されている場合はSubプロシージャ自体を終了しています。
If .Type = ppSelectionNone _
Or .Type = ppSelectionSlides Then Exit Sub
図形の中にカーソルがあるテキスト編集モードになっていると、バージョンによって上手く動作しないことがあるので、テキスト編集モードの場合は事前にその図形を選択しています。
If .Type = ppSelectionText Then .ShapeRange.Select
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Shapesコレクション・Shapeオブジェクト » 同じ色の図形・オートシェイプを選択するPowerPointマクロ