パワポマクロで、写真をスライドにし、ファイル名をタイトルにする方法

パワポのスライドをつくるときにもマクロを使うと便利です。
写真をスライドにすることも、自動で、ボタン1つで、できます。

L1006363

※自宅にて by Leica M10

 

パワポにもマクロ(VBA)はある

マクロとは、プログラミングして自動的に処理をするしくみ・機能をいいます。
(VBAとはプログラミング言語のことです)。

 

通常はExcelで使うことが多いマクロ。

Excel以外で、Wordやパワポ(PowerPoint)にもマクロはあります。

今回使うのはパワポのマクロです。

パワポのマクロを勉強するのであれば、この本が唯一かつ、おすすめであり、今回の記事を書く際にも参考にさせていただきました。

今回の事例は、写真をパワポのスライドにするマクロです。
写真を1つずつ手で入れていけば、できないこともないのですが手間がかかります。
マクロなら、しくみをつくって、ボタンひとつで自動的に処理できるのです。

 

写真をスライドにするパワポマクロの下準備

そもそも、私はセミナーでこういったスライドを使うことがあります。

image
写真を全面に入れて、タイトルだけを入れるものです。

元々、スライドには文字を極力入れないようにしています。
文字が多すぎると、参加者の方の意識がそこに集中してしまうからです。

写真とタイトルさえあれば、それについて話せます。
元々セミナーをやるときには、カンニングペーパーや原稿を準備しない主義です。
参加者の方を見ながら話すにはその方がよく、原稿がなければ、頭が真っ白になったという状態がなくなります。

 

あがって声が震えて頭が真っ白になっていた私が、人前で話すときに緊張しなくなった3つの秘訣 | EX-IT

写真をメインにしたスライドをつくるときに、通常は写真ファイルを1つずつ入れて、タイトルを入れて……ということを繰り返さなければいけません。
今回は8枚のスライドではあるのですが(今朝やったメルマガ税理士進化論読者向けオンラインセミナーで使ったもの)、数が増えるとそれなりに時間がかかってしまうでしょう。

こういったときにマクロが便利です。

フォルダの中にある写真を、一瞬でスライドにすることができます。
image

 

写真ファイルの準備

写真ファイルを特定のフォルダに入れ、名前をつけておきましょう。
今回は数字を入れました。
数字の順番通りに読み込まれます(正確にはファイル名)。

image

マクロでは、このフォルダを指定して、ファイルを読み取るというしくみです。

 

スライドマスターの設定

下準備として、スライドマスターを使って文字のデザインを決めておきましょう。
マクロを使わないとしてもこのスライドマスターの機能は便利です。
特定のレイアウトのスライドを同じデザインにして、一括編集できます。

私の場合、写真を全面に表示するので、文字は白で赤い縁取りをし、場合によっては背景をちょっとだけ暗くします。
image

パワポのスライドはそれぞれレイアウトというものを設定できます。
スライドを右クリックして、[レイアウト]を選ぶと、レイアウトの候補が出てくるので、[タイトルのみ]にしておきましょう。
image

 

さらにリボンから[表示]→[スライドマスター]を選びます。
ショートカットキーは、Alt→W→M(Ail、W、Mと1つずつ押す)です。

image

スライドマスターを変更すると、[タイトルのみ]のレイアウトにすれば、そのデザインにすべて変わります。
毎回設定しなくてもよく、一括して変更もできるのです。

スライドマスターで加えた変更は次のようなものです。

・タイトルの位置、幅を調整
image
・フォントを「源ノ角ゴシック JP Heavy」(通常は入っていないフォントです)にし、大きさを整え、Bold(太字)にし、色を白に。
image
・[図形の書式]で、[文字の輪郭]を赤、2.25ptに。

image

・[塗りつぶし]→[塗りつぶしの色]で、黒を選び、[透過性]を70%程度に。

image

 

こんな感じになります。

image

設定し終わったらスライドマスターを閉じておきましょう。

 

文字の輪郭に色を付けたり、背景をちょっと暗くすると文字が目立ちます。
(Adobeのようにはできませんが)

この辺の設定をマクロでやってもいいのでしょうが、マクロで書くことが増えてしまいますので、私はこの設定をしたファイルにマクロが入ったものをテンプレート(ひな形)にして、繰り返し使っています。

 

プログラミングするには、レイアウトやスライドマスターのように、その対象のソフトのしくみを理解しなければいけません。
というよりも、プログラミングすると、そのソフトを理解できるのです。
だからこそ、プログラミングをおすすめしています。

マクロでやるのは、
・特定のフォルダに入ったファイルのうち 写真ファイルを読み取る
・写真をパワポに追加して、タイトルに写真のファイル名を入れる
というところです。

ではマクロを書いていきましょう。

 

写真をスライドにするパワポマクロ

 

VBEを起動

マクロを書くにはExcelと同様、パワポでAlt+ F 11を押し、VBE(Visual Basic Editor。マクロを書くソフト)を開きます。

さらに、[ツール]→[オプション]で、次のように設定をしておきましょう。

image

次に標準モジュールという、マクロを書く場所を準備します。
操作は、Alt→I→M(Alt、I、Mと順番に押す)です。

image

 

これで準備完了です。

image

 

パワポに戻って、ファイルをいったん保存しましょう。
通常のパワポファイルは、〇〇.pptxという種類で、マクロ入りのパワポファイルは、〇〇.pptmです。

image

 

 

フォルダのファイル名を読み取る

1つのプログラムは、Subに始まって、End Subで終わるので、プログラム名(任意)とともに入れます。
sub photo_slideを入力し、Enterキーを押してみましょう。

 

こうなります。
このSubとEnd Subの間にプログラムを書いていくわけです。
image

まずは、フォルダにある写真のファイル名を読み取りましょう。
photoという変数に、フォルダから JPEG ファイルを探して入れるように設定します。

Dir は VBA の関数でフォルダを指定してファイル名を取得するもの。

たとえばと”C:\Users\info0\Dropbox\オンラインZZZ\1 優先順位.jpg”というファイルがあれば、1 優先順位.jpg   というファイル名を読み取ります。

試しにメッセージボックス、MsgBox(photo)を追加して、F5キーで実行してみましょう。

(試した後はMsgboxの1文を消しておきしょう)
image

こんな感じで、メッセージボックスが出て、ファイル名を読み取っていれば大丈夫です。

image

これは Excel マクロにもあるもので、こういった事例にも使っていました。
フォルダ内のExcel・CSVを1つにまとめるマクロ | EX-IT

 

スライドを追加

次にスライドを追加していきます。

最終的には、フォルダ内のすべての写真をスライドにするわけですが、まずは、1つ目の「1 優先順位」のみをスライドにするマクロをつくり、うまくいってから、繰り返し処理する部分をつくっていきましょう。

 

スライドを追加するときには、どのレイアウトのスライドにするかを決めなければいけません。
下準備したとおり、[タイトルのみ]というレイアウトのスライドを入れていきます。

image

ActivePresentation(今のプレゼンテーション、つまりパワポ)にSlides.Addで、スライドを追加でき、その追加したスライドには、sldという名前をつけます。

Dimが名前を定義し、Setがその名前をつける過程と考えていただければ。

Addには、次のものを指定する必要があります。
・Index(追加する場所)→1枚目に追加したいので、1
・Layout(レイアウト)→タイトルのみ(ppLayoutTitleOnly)

 

VBEで、F5キーを押して実行してみましょう。

image

こんな感じで、スライドが1枚追加できればOKです。

スライドへ写真を追加

スライドへ写真を追加していきます。

image

なお、この部分は、長くなるので、半角スペースと_(アンダーバー)で改行しました。
これがなく単に改行すると、エラーができます。

パワポ上の図形や写真などは、シェイプ(Shape)というもので取り扱います。
追加したスライド(sld)に、Shapes.AddPictureで、写真を追加し、その追加した写真には、shpという名前を付けるのです。

さらには、次のような設定をしなければいけません。
・FileName(写真のファイル名)→”C:\Users\info0\Dropbox\オンラインZZZ\” & photo
→Cからすべて入れる必要があり、photoには、「1 優先順位.jpg」が入っているので、こういった入れ方になります。
(ここの表現方法はいろいろあるでしょうが、私は直接入れたほうがわかりやすいかなと思うので)。

・ linktofile:=msoFalse(写真をリンクするか埋め込むか)→通常埋め込むのでmsofalse

・savewithdocument:=msoTrue(写真にリンクする場合に埋め込むか、リンクだけにするか)→詰め込むならmsotrue

・Left:=0, Top:=0(写真の位置)→左端なら0、0

 

これで実行してみましょう。
ひとまず写真は入っていますが、大きさが合っていません。

image

写真の幅の調整

写真の幅(shp.Width)をスライドの幅(ActivePresentation.PageSetup.SlideWidth)と同じにします。

image

これは私が横長の写真だけを準備しているとわかっているからやるわけですので、もし縦長の写真があると別途調整しなければいけません。

これで実行してみましょう。
うまく写真が入りました。

image

 

 

タイトルを入れる

スライドのタイトルに写真を入れていきます 。

image

sld.Shapes.Title.TextFrame.TextRange.Textで、テキストを入れる部分を指定し、photo(写真のファイル名)を入れるというプログラムです。

実行してみましょう。

なんだかうまくいっているようですが文字が出てきていません。

image
写真をずらして見てみるとタイトルが下に隠れています。

image

パワポ(パワポに限ることでありませんが)、図形やテキストのどちらが上かという順番があるのです。
今回の場合写真を先に入れたので、写真が一番上になっています。
タイトルを先に入れるという方法もありますが、写真を先に入れたほうがプログラムの流れはわかりやすいので、この順番にしました。

この場合、写真を最背面に置いておけばいいので
image

その1文を入れています。

image

これで実行してみましょう。

タイトルが写真の上にきました。
ただ、なんだか変です。

image

.jpgまでが入ってしまっています。

これをどうするか。
1つの方法として、私は Split関数というものを使いました。

たとえば「1 優先順位.jpg」を.(ピリオド)で区切ると、
1 優先順位

jpg
となり、このうち、
1 優先順位
だけを使いたいわけです。

image

 

こう入れると、「1 優先順位」 だけを使えます。

Splitで区切られたものは、0、1、2、3……と数えるので、0と指定すれば、「1 優先順位」だけを使えるのです。

実行してみましょう。

これでうまくいきました。

image

 

繰り返しの部分をつくる

今回の事例では、フォルダのファイルすべてで繰り返したいので 、Do untilと LOOP というものを使います。
繰り返しの中で、次のファイルを指定するには、

photo = Dir()

も入れておきましょう。

Do Until photo = “” で、photoが””じゃなくなるまで繰り返すという意味で、つまりは、すべてのファイルで繰り返すということになります。

image

 

実行してみましょう。
image

うまくいってるようですがなんだかうまくいってません。

ファイルの順番が逆です。
スライドがすべて1枚目に入っているので、

image

1のスライド

2のスライド
1のスライド

3のスライド
2のスライド
1のスライド

となってしまいます。

こういったときにプログラムをF5ではなく、F8で1つずつ実行するとよくわかるのでやってみましょう。

毎回1枚目にスライドを入れるのではなく、
スライドが1枚ある→2枚目に入れる
スライドが2枚ある→3枚目に入れる
スライドが3枚ある→4枚目に入れる

となってほしいわけです。

そのときのスライドを数えておけばそういった指示ができます。

スライドを数える

 

そのときのスライドを数えて、その数に+1をすれば、追加したスライドの次に追加できます。

まずはスライドを数えるプログラムを入れましょう。
image

 

cntという名前に、ActivePresentation.Slides.Countで、スライドの数を入れていきます。

これをスライドの追加部分に入れて、繰り返しのたびに、Indexが増えるようにするわけです。
image

これで実行するとうまくいきました。
image

プログラムの全文はこちらです。

Sub photo_slide()


'1 フォルダの写真(JPEG)のファイル名を取得

    Dim photo As String
    
    photo = Dir("C:\Users\info0\Dropbox\オンラインZZZ\" & "*.jpg")
    
    
    
'2 フォルダの写真(JPEG)をパワポへ

    Do Until photo = ""
    
        'スライドを数える
        Dim cnt As Long
        cnt = ActivePresentation.Slides.Count


        'スライドを追加
        Dim sld As slide
        Set sld = ActivePresentation.Slides.Add(Index:=cnt + 1, Layout:=ppLayoutTitleOnly)
         
        'スライドに写真を追加
        Dim shp As Shape
        Set shp = sld.Shapes.AddPicture( _
        FileName:="C:\Users\info0\Dropbox\オンラインZZZ\" & photo, _
        linktofile:=msoFalse, _
        savewithdocument:=msoTrue, _
        Left:=0, Top:=0)
        
        '写真の幅をスライドの幅にする
         shp.Width = ActivePresentation.PageSetup.SlideWidth
        
         
        'スライドのタイトルに、写真のファイル名を入れる
         sld.Shapes.Title.TextFrame.TextRange.Text = Split(photo, ".")(0)
         
        '写真を最背面へ
         shp.ZOrder msoSendToBack
    
        photo = Dir()
    Loop
    
End Sub

ファイル名は変える必要があります。

ぜひ一度書いてみていただければ。

 



■編集後記

朝は、ブログ超入門セミナーを開催。
平日の夕方、3/11の16時にも開催します。
3/11 ブログ超入門セミナー【オンライン】 | EX-IT

PSVR(プレイステーション VR)熱が再度きました。
改良版を買っていたのですが、それほどやってなく、今回やってみたいゲームがあり、モーションコントローラーも手に入れて(昔のは壊れていたので)。
Beat Saverという、剣のようにコントローラーを振りながらやる音ゲー?がおもしろいです。

ヘッドセットをかぶっている姿は、娘にとって不思議のようで、「なにやってるの?みえないでしょ?」と話しかけてきます。
VRは、12歳以下禁止なので、あと9年、娘は体験できませんが。
その頃はもっとすごいものが出てるでしょう。

 

 

■昨日の1日1新
※詳細は→「1日1新」

娘とかるた
オンラインでブログ超入門セミナー

 

■昨日の娘日記

保育園で、かるたが楽しかったらしく、うちでも買ってみました。
ディズニーのを欲しがるかと思えば、リカちゃんのが欲しいと。
リカちゃん、どこで知ったのか……。
結局、アンパンマンを選びました。
最初は、「アンパンマンじゃない」と言ってましたが。
かるたは、絵柄で選びつつも、ひらがながわかっているような部分もあり、上手にとります。
読む側もやりたいというので、交代すると、ふだをもって、絵柄を読んでいました。
ただ、フランケンロボというキャラの絵柄で、「はやくぱぱにあいたいなフランケンロボ」と「は」の札を読んだりも。
読めているのか、記憶しているのか、びっくりでした。