PowerPoint VBAで選択した部分を判別してそのフォントを変更するマクロ


selection

photo credit: Hatoriz Idea selection via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

PowerPoint VBAで選択している部分のフォントを変更するマクロの作り方についてお伝えしています。

前回の記事はコチラ。

PowerPoint VBAで選択しているテキスト範囲のフォントを変更するマクロの作り方
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

これはけっこうシンプルですよね。

解説はこちらの記事を参考してください。

PowerPoint VBAで選択しているテキスト範囲のフォントを変更するマクロの作り方
PowerPoint VBAで選択した部分のフォントを変更するマクロの作り方をお伝えしています。今回は、選択しているテキスト範囲の取得方法、およびフォントを変更するマクロの作り方について紹介していきます。

選択しているシェイプのフォントを変更するマクロ

続いて、選択しているシェイプのフォントを変更するマクロです。

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の要素分をループする必要がありますので、前述の「選択しているテキスト」よりも少し複雑です。

PowerPoint VBAで選択しているシェイプのフォントを変更するマクロの作り方
PowerPoint VBAで選択している部分を操作するマクロの作り方をお伝えしています。今回は、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コレクションについてのループとの入れ子のループになりますので、これが最も複雑な感じですね。

PowerPoint VBAで選択しているスライドのフォントを変更するマクロの作り方
PowerPoint VBAで選択している部分を操作するマクロの作り方について解説をしています。今回は、選択しているスライドの全てのシェイプについてフォントを変更するマクロの作り方をお伝えします。

選択箇所を判別してそのフォントを変更するマクロ

以上のマクロを組み合わせて、選択箇所を判別してフォントを変更するマクロを作成しました。

コチラです。

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ステートメントを使ったほうが読みやすくなります。

書式はコチラです。

Select Case
 Case 式のリスト1
  ’式が式のリスト1のいずれかとマッチした場合の処理
 Case 式のリスト2
  ’式が式のリスト2のいずれかとマッチした場合の処理
 …
 Case Else
  ’どのCase句ともマッチしなかった場合の処理
End Select

それぞれのCase句の「式のリスト」にはカンマ区切りで複数の式を設定することができます。

ToキーワードやIsキーワードを使って、範囲で指定をすることができます。

前述のコードでは、Typeプロパティのずばりの値ごとに条件分岐をするように作っています。

PowerPoint VBAのSelectionオブジェクトの4つのタイプについて理解しよう!
PowerPoint VBAで選択しているシェイプのフォントを変更するマクロの作り方をお伝えしています。今回は、選択する部分を表すSelectionオブジェクトの4つのタイプについて理解を深めていきます。

シェイプのコレクションについてループをする処理

シェイプが選択されている場合は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で選択しているテキストのフォントを変更する

次がいくつかのシェイプを選択している場合です。

PowerPoint VBAで選択しているシェイプのフォントを変更する

そして、スライドを選択している状態での結果がこちらです。

PowerPoint VBAで選択しているスライドのフォントを変更する

ということで、選択している状態に応じて、フォントの変更をすることができていますね。

まとめ

以上、PowerPoint VBAで選択している部分を判別してそのフォントを変更するマクロの作り方について解説しました。

これまで作ってきたマクロをガッシャンコしたわけですが、Select CaseステートメントやSubプロシージャによる部品化でスッキリさせるのが重要ですね。

次回は、このマクロを実行しやすくしていきます。

どうぞお楽しみに!

連載目次:初心者向けPowerPoint VBAで選択箇所を操作する

PowerPointでプレゼンテーションを作っている際に、「選択している部分のフォントを好きに変えたい!」ということありますよね。そのニーズに応えるマクロの作り方をシリーズでお伝えしていきます。
  1. PowerPoint VBAでアクティブなウィンドウを取得する方法
  2. PowerPoint VBAで選択した部分を表すSelectionオブジェクトとその取得
  3. PowerPoint VBAのSelectionオブジェクトの4つのタイプについて理解しよう!
  4. PowerPoint VBAで選択しているスライドを操作するSlideRangeオブジェクト
  5. PowerPoint VBAで選択しているスライドのフォントを変更するマクロの作り方
  6. PowerPoint VBAで選択しているシェイプを操作するShapeRangeオブジェクト
  7. PowerPoint VBAで選択しているシェイプのフォントを変更するマクロの作り方
  8. PowerPoint VBAで選択しているテキスト範囲のフォントを変更するマクロの作り方
  9. PowerPoint VBAで選択した部分を判別してそのフォントを変更するマクロ
  10. PowerPoint VBAでフォームボタンからマクロを実行する方法

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました