【上級】パワーポイントのマクロを活用し業務効率化!②

「マクロ」と聞くとExcel VBAのイメージが強いですが、パワーポイントにもマクロの機能があります。今回は、パワーポイントにある程度慣れてきたビジネスマンに向けて、業務効率をアップするパワーポイントのマクロ機能をご紹介します。
今回は、【上級】パワーポイントのマクロを活用し業務効率化!②のご紹介です。
1.パワーポイントの「マクロ」とは
前回の【上級】パワーポイントのマクロを活用し業務効率化!①では、マクロとはどういうものか?どのように使うのか?ということをかなり嚙み砕いて解説しました。
Excelマクロは書籍なども多数出版されており、使いこなしている人を多く見かけます。それに対してPowerPointマクロは需要がないため、書籍の出版がなされておらず、「学びたい!」と思っても手軽に学べるものではありません。
また、Excelマクロには備わっている「マクロの記録」という機能もPowerPointマクロにはありません。
※マクロの記録とは・・・コードを自分で書かなくても、繰り返したい手順を実際に行うだけで手順が記録され、コード化できる機能
本日は、「PowerPointマクロを使いこなしたい」「コードを自分で書けるようになりたい」と思っている方向けに、前回のサンプルコードを1行ずつ解説していきたいと思います。
2.コードの意味
まずは前回のサンプルコードのおさらいです。
内容は、「ファイル内のすべてのフォントをメイリオに設定する」というコードを紹介しました。コードはこちらです。
Sub フォントをメイリオに変更()
Dim sld As Slide, shp As Shape
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.TextFrame2.HasText Then
With shp.TextFrame2.TextRange.font
.NameFarEast = “メイリオ” ‘※要入力 日本語用フォントの設定
End With
End If
Next shp
Next sld
End Sub
初めて見る人にとっては暗号のように見えますよね。
1行ずつ、コードの意味を解説していきます。
1行目 Sub フォントをメイリオに変更()
これは、この手順をひとかたまりの命令として保存するコードで、いわば「これからフォントをメイリオに変更するマクロを作ります」という宣言です。(プログラミングの世界では「サブルーチン」や「プロシージャ」などといいます)
Subはサブルーチンの略ですね。
最後の行のEnd Subとセットになっていて、
Sub ひとかたまりの命令の名前()
具体的な指示内容
End Sub
という文法で使われます。
2行目 Dim sld As Slide, shp As Shape
DimはDemandの略で「宣言する」という意味です。今後何度も使うものをここで宣言しておくと、のちの行でVisual Basic側が「あ、さっき言ってた単語だな」と認識することができます。
文法は
Dim 名付けたいオブジェクトの名前 As オブジェクトのカテゴリ名
となります。
複数のオブジェクトを名付けたい場合
Dim 名付けたいオブジェクトの名前① As オブジェクトのカテゴリ名①, 名付けたいオブジェクトの名前② As オブジェクトのカテゴリ名②
のように2回目のDimを省略してカンマでつなげることも可能です。
SlideというのはPowerPointのスライドのこと、Shapeはテキストボックスを含むPowerPointの図形のことです。
PowerPointに入っているスライドをまとめて、「Slideオブジェクト」と呼んだり、図形をまとめて「Shapeオブジェクト」と呼んだりするので覚えていてください。
ここでは、「以降のコードでsldという名前のSlideオブジェクトを利用する」「以降すべてshpという名前のShapeオブジェクトを利用する」という宣言になっています。
要するに単語が長いので省略したいとか、自分にとってわかりやすい名前で呼びたいということですね。
3行目 For Each sld In ActivePresentation.Slides
長くなってきました。
文法は
For Each ○○ In ××
で、「××内にあるすべての○○に対し以下の命令を実行する」のような意味です。
Next sldとセットになっていて、
For Each ○○ In ××
すべての○○に対し繰り返したい命令
Next ○○
のように使います。
例えば、sldは先ほど名付けたSlideオブジェクトですね。ActivePresentation.Slidesは、「アクティブなプレゼンテーションファイルのスライド群」という意味合いです。
つまり、「アクティブなプレゼンテーションのスライド群にあるすべてのスライドに対し以下の命令を実行する」というような意味です。
フォント変更を全てのスライドに対し実行したいので、このような書き方になります。
ActivePresentation.Slidesの「.」ってどういう意味?と思っている方がいるかもしれませんが、ここでいう「.」は日本語でいうと「の」「の中の」というような意味で、
オブジェクトの階層が一つ下がるときなどに使います。
プレゼンテーション>スライド>図形>テキスト>フォント
のように、PowerPointのオブジェクトには階層構造がありますよね。
その階層構造の一つ下のオブジェクトを指す場合に「.」を用います。
4行目 For Each shp In sld.Shapes
3行目と同様ですね。「スライド内の図形すべての図形に対し以下の命令を実行する」です。
Next shpとセットになっています。
sld.Shapesは、最初に名付けたsld(=スライド)の一つ下の階層のShapes(=図形)という意味です。
ここまでで、「すべてのスライドのすべての図形に対して以下を実行する」というコードになっています。
5行目 If shp.TextFrame2.HasText Then
プログラミングっぽくなってきました。
If ○○ Thenは有名ですよね。「もし○○だったら以下の命令を実行する」です。
End Ifとセットになっています。
shp.TextFrame2.HasTextは、「図形のテキストフレーム内にテキストがあったら」という意味です。TextFrame2の2がついている方が機能が多いので2をつけているのですが、ここでは本筋から外れてしまうので一旦割愛します。
HasTextは、テキストがあるかどうかをTrue(正しい)かFalse(誤り)で返すものです。
「もし○○だったら・・・」のところにHasTextが入っているので、「もし”図形のテキストフレーム内にテキストがある”がTrue(正しい)なら・・・」という意味になります。
6~7行目
With shp.TextFrame2.TextRange.font.NameFarEast = “メイリオ”
With ○○で「○○に対し以下の命令を実行する」です。
End Withとセットになっています。
今回は、「図形のテキストフレームのテキスト範囲のフォントの日本語用フォント名をメイリオに設定する」という意味ですね。
少し階層が深いのですが、
Shp(図形)>TextFrame2(テキストフレーム)>TextRange(テキスト範囲)>font(フォント)>NameFarEast(日本語用フォント名)
という階層になっています。
FarEastというのが気になりますが、日本語で「極東」という意味で、「アジア言語のフォント名」くらいに理解していればいいと思います。
また、プログラミングの世界では文字列にはダブルクォーテーション””をつけなければいけないので、メイリオは”メイリオ”としています。
= は「代入する」という意味合いです。
(厳密には異なりますが理解のために簡易的な表現にしています)
つまり、「図形のテキストフレームのテキスト範囲のフォントの日本語用フォント名に”メイリオ”という文字列を代入する」という意味になります。