【上級者向け】パワーポイントマクロで効率化②

今回は、【上級者向け】パワーポイントマクロで効率化②のご紹介です。

前回の【上級者向け】パワーポイントマクロで効率化①では、マクロとはどういうものか?どのように使うのか?ということをかなり嚙み砕いて解説しました。
Excelマクロは書籍なども多数出版されており、使いこなしている人を多く見かけます。それに対してPowerPointマクロは需要がないため、書籍の出版がなされておらず、「学びたい!」と思っても手軽に学べるものではありません。
また、Excelマクロには備わっている「マクロの記録」という機能もPowerPointマクロにはありません。

※マクロの記録とは・・・コードを自分で書かなくても、繰り返したい手順を実際に行うだけで手順が記録され、コード化できる機能

本日は、「PowerPointマクロを使いこなしたい」「コードを自分で書けるようになりたい」と思っている方向けに、前回のサンプルコードを1行ずつ解説していきたいと思います。

まずは前回のサンプルコードのおさらいです。
内容は、「ファイル内のすべてのフォントをメイリオに設定する」というコードを紹介しました。コードはこちらです。

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というのが気になりますが、日本語で「極東」という意味で、「アジア言語のフォント名」くらいに理解していればいいと思います。
また、プログラミングの世界では文字列にはダブルクォーテーション””をつけなければいけないので、メイリオは”メイリオ”としています。

= は「代入する」という意味合いです。
(厳密には異なりますが理解のために簡易的な表現にしています)
つまり、「図形のテキストフレームのテキスト範囲のフォントの日本語用フォント名に”メイリオ”という文字列を代入する」という意味になります。

Share:

  • facebook
  • twitter
  • line

パワーポイント資料の作成にお悩みの方はプロに相談してみませんか?

パワーポイントの資料を作成する際に、時間がかかりすぎてしまう、どうしてもわかりやすい資料が作れないといった悩みはありませんか?

そのような場合は、パワーポイント資料作成のプロに相談してみるのも一つの方法です。

バーチャルプランナーはあらゆるビジネス資料の作成を、企画構成からデザインまでワンストップで代行するサービスです。

お客様の準備が不十分であっても、訪問や電話によるヒアリングを通して情報の整理を主導していきます。

創業4年で450社以上の資料を作成した実績豊富なプロに、相談してみてはいかがでしょうか?

バーチャルプランナーの詳細はこちら>>