パワポで使えるマクロのコードを解説|フォントをメイリオに変換する方法
「マクロ」と聞くとExcel VBAのイメージが強いですが、パワーポイントにもマクロの機能があります。今回の記事ではパワーポイントで使えるマクロのコードについて、1行ずつ分解して解説していきます。
マクロの組み方
Excelなどで使われることが多いマクロですが、パワーポイントでも設定・実行することが可能です。
パワーポイントでマクロをどのように設定していくのか、下記の記事で操作方法を紹介していますので、是非ご覧ください。
▶ パワーポイントのマクロで業務効率化|フォントをメイリオに変換する方法
マクロのサンプルコード|フォントをメイリオに変換する
上記の記事の中で、スライドのフォントを全てメイリオに変換するというコードを紹介しました。
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~
With shp.TextFrame2.TextRange.font
.NameFarEast = “メイリオ” ‘※要入力 日本語用フォントの設定
End With
With ○○で「○○に対し以下の命令を実行する」です。
End Withとセットになっています。
今回は、「図形のテキストフレームの、テキスト範囲のフォントの日本語用フォント名を、メイリオに設定する」という意味です。
少し階層が深いのですが、
Shp(図形)>TextFrame2(テキストフレーム)>TextRange(テキスト範囲)>font(フォント)>NameFarEast(日本語用フォント名)
という階層になっています。
FarEastというのが気になりますが、日本語で「極東」という意味で、「アジア言語のフォント名」くらいに理解していればいいと思います。
また、プログラミングの世界では文字列にはダブルクォーテーション””をつけなければいけないので、メイリオは”メイリオ”としています。
= は「代入する」という意味合いです。
(厳密には異なりますが理解のために簡易的な表現にしています)
つまり、「図形のテキストフレームのテキスト範囲のフォントの日本語用フォント名に”メイリオ”という文字列を代入する」という意味になります。