みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
PowerPoint VBAで選択している部分のフォントを変更するマクロの作り方についてお伝えしています。
前回の記事はコチラ。
選択しているテキスト範囲のフォントを変更するマクロを作りました。
さて、スライドの選択、シェイプの選択、テキストの選択…と3種類作りましたが、SelectionオブジェクトのTypeプロパティを見て、勝手に振り分けてくれたら便利ですよね。
ということで、今回これまでのマクロをギュッとまとめて、どんな状態でも動くようにしてみます。
PowerPoint VBAで選択した部分を判別してそのフォントを変更するマクロを紹介します。
では、行ってみましょう!
参考にするこれまで作ったマクロ
これまで作ったマクロをいい感じに組み合わせれば目的のものができそうなので、紹介しておきましょう。
選択しているテキストのフォントを変更するマクロ
まず、選択しているテキストのフォントを変更するマクロ。
Sub 選択したテキスト範囲のフォントを変更()
With ActiveWindow.Selection
If .Type >= ppSelectionText Then
With .TextRange.Font
.Name = "Meiryo UI"
.NameFarEast = "Meiryo UI"
.Color = RGB(89, 89, 89)
End With
End If
End With
End Sub
これはけっこうシンプルですよね。
解説はこちらの記事を参考してください。
選択しているシェイプのフォントを変更するマクロ
続いて、選択しているシェイプのフォントを変更するマクロです。
Sub 選択したシェイプのフォントを変更2()
With ActiveWindow.Selection
If .Type >= ppSelectionShapes Then
Dim shp As Shape
For Each shp In .ShapeRange
With shp.TextFrame.TextRange.Font
.Name = "Meiryo UI"
.NameFarEast = "Meiryo UI"
.Color = RGB(89, 89, 89)
End With
Next shp
End If
End With
End Sub
ShapeRangeの要素分をループする必要がありますので、前述の「選択しているテキスト」よりも少し複雑です。
選択しているスライドのフォントを変更するマクロ
最後に、選択しているスライドのフォントを変更するマクロです。
Sub 選択したスライドのフォントを設定2()
With ActiveWindow.Selection
If .Type >= ppSelectionSlides Then
Dim sld As Slide
For Each sld In .SlideRange
Dim shp As Shape
For Each shp In sld.Shapes
With shp.TextFrame.TextRange.Font
.Name = "Meiryo UI"
.NameFarEast = "Meiryo UI"
.Color = RGB(89, 89, 89)
End With
Next shp
Next sld
End If
End With
End Sub
SlideRangeについてのループと、各スライドのShapesコレクションについてのループとの入れ子のループになりますので、これが最も複雑な感じですね。
選択箇所を判別してそのフォントを変更するマクロ
以上のマクロを組み合わせて、選択箇所を判別してフォントを変更するマクロを作成しました。
コチラです。
Sub 選択箇所のフォントを変更()
With ActiveWindow.Selection
Select Case .Type
Case ppSelectionText
Call フォントの変更(.TextRange.Font)
Case ppSelectionShapes
Call シェイプのフォントの変更(.ShapeRange)
Case ppSelectionSlides
Dim sld As Slide
For Each sld In .SlideRange
Call シェイプのフォントの変更(sld.Shapes)
Next sld
End Select
End With
End Sub
共通部分はSubプロシージャにより部品化していますが、けっこうシンプルですね。
Select Caseステートメントによる多岐分岐
SelectionオブジェクトのTypeプロパティで、
- テキストが選択されている
- シェイプが選択されている
- スライドが選択されている
のいずれかの状態かを判別できます。
If~ElseIfステートメントでも実現できるのですが、並列の3つ以上の分岐であれば、Select Caseステートメントを使ったほうが読みやすくなります。
書式はコチラです。
Case 式のリスト1
’式が式のリスト1のいずれかとマッチした場合の処理
Case 式のリスト2
’式が式のリスト2のいずれかとマッチした場合の処理
…
Case Else
’どのCase句ともマッチしなかった場合の処理
End Select
それぞれのCase句の「式のリスト」にはカンマ区切りで複数の式を設定することができます。
ToキーワードやIsキーワードを使って、範囲で指定をすることができます。
前述のコードでは、Typeプロパティのずばりの値ごとに条件分岐をするように作っています。
シェイプのコレクションについてループをする処理
シェイプが選択されている場合はShapeRangeについてのループ、スライドが選択されている場合はスライド上のShapeコレクションについてのループになります。
その2つはSubプロシージャとして部品化することができますので、以下のように作りました。
Sub シェイプのフォントの変更(objShapes As Object)
Dim shp As Shape
For Each shp In objShapes
Call フォントの変更(shp.TextFrame.TextRange.Font)
Next shp
End Sub
フォントを変更する処理
いずれにしても、フォントを変更する対象はFontオブジェクトになります。
ですから、フォントの変更部分はFontオブジェクトを受け取って、そのフォント種類とフォントの色を変更するSubプロシージャに部品化をすることができます。
ここを部品化しておけば、「やっぱりフォントの設定をこうしたい」という事後の変更にも一箇所の変更で対応できるようになります。
Sub フォントの変更(objFont As Font)
With objFont
.Name = "Meiryo UI"
.NameFarEast = "Meiryo UI"
.Color = RGB(89, 89, 89)
End With
End Sub
実行結果
これらのプロシージャを作成して、「Sub 選択箇所のフォントを変更」を実行します。
実行したときの、選択状態によって実行結果が変わります。
まず、テキストを選択しているときがコチラ。
次がいくつかのシェイプを選択している場合です。
そして、スライドを選択している状態での結果がこちらです。
ということで、選択している状態に応じて、フォントの変更をすることができていますね。
まとめ
以上、PowerPoint VBAで選択している部分を判別してそのフォントを変更するマクロの作り方について解説しました。
これまで作ってきたマクロをガッシャンコしたわけですが、Select CaseステートメントやSubプロシージャによる部品化でスッキリさせるのが重要ですね。
次回は、このマクロを実行しやすくしていきます。
どうぞお楽しみに!
連載目次:初心者向けPowerPoint VBAで選択箇所を操作する
PowerPointでプレゼンテーションを作っている際に、「選択している部分のフォントを好きに変えたい!」ということありますよね。そのニーズに応えるマクロの作り方をシリーズでお伝えしていきます。- PowerPoint VBAでアクティブなウィンドウを取得する方法
- PowerPoint VBAで選択した部分を表すSelectionオブジェクトとその取得
- PowerPoint VBAのSelectionオブジェクトの4つのタイプについて理解しよう!
- PowerPoint VBAで選択しているスライドを操作するSlideRangeオブジェクト
- PowerPoint VBAで選択しているスライドのフォントを変更するマクロの作り方
- PowerPoint VBAで選択しているシェイプを操作するShapeRangeオブジェクト
- PowerPoint VBAで選択しているシェイプのフォントを変更するマクロの作り方
- PowerPoint VBAで選択しているテキスト範囲のフォントを変更するマクロの作り方
- PowerPoint VBAで選択した部分を判別してそのフォントを変更するマクロ
- PowerPoint VBAでフォームボタンからマクロを実行する方法