みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでPowerPointを操作する方法についてお伝えしています。
前回の記事はコチラ。
エクセルVBAでPowerPointのテキストボックスに文字を入力する方法についてお伝えしました。
さて、ちょっと方向を変えましてスライドの操作をしていきたいと思います。
数ページのPowerPoint資料だったら良いのですが、例えば「都道府県別のスライドを作りたい」などといったとき、それだけのスライドを用意してスライドのタイトルを変更するだけでもちょっとダルいですよね…。
そんな時は、エクセルVBAに任せてスライドを複製&テキスト変更をしてしまえばOKです。
ということで、今回はエクセルVBAでPowerPointスライドをスライドタイトルを変更しながら生成する方法についてお伝えします。
PowerPointのスライドを複製する
今回はこちらのPowerPointをひな形として利用していきます。
何の変哲もないスライドが一枚…「タイトル」と書かれたテキストボックスがスライドタイトルです。
スライドを複製するのはとっても簡単です。
スライドオブジェクトに対して、Duplicateメソッドを使います。
例えば、こんなプログラムですね。
Sub PowerPointのスライドを複製する()
Dim ppApp As New PowerPoint.Application
ppApp.Visible = True
Dim ppPrs As PowerPoint.Presentation
Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\ひな形.pptx")
ppPrs.Slides(1).Duplicate '1ページ目を複製
ppPrs.Slides(1).Duplicate '1ページ目を複製
'ppApp.Quit
'Set ppApp = Nothing
End Sub
こちらを実行しますと
このように2枚の複製ができます。Duplicateメソッドを二回やっているからっすね。簡単です。
スライドタイトルを指定しながら複数スライドを生成する
では、これをさらに発展させていきましょう。
スライドタイトルのテキストを指定しながら大量のスライドを複製していきます。
例えば、こんなエクセルシートを用意します。
各都道府県名がリストされているだけですね。
この都道府県名が各スライドのスライドタイトルになるように複製していきます。
先ほどのプログラムの9,10行目を以下のプログラムに差し替えてみましょう。
Dim countSld As Long 'スライド数
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim i As Long
i = 3
Do While ws.Cells(i, 1).Value <> ""
countSld = ppPrs.Slides.count '現在のスライド数をカウント
ppPrs.Slides(countSld).Duplicate '最終ページを複製
ppPrs.Slides(countSld + 1).Shapes(3).TextFrame.TextRange.Text = ws.Cells(i, 2).Value '最終ページのスライドタイトルに都道府県名
i = i + 1
Loop
なお、テキストを入力したいシェイプのインデックス番号に関しては「3」です。こちらの方法で目的のインデックス番号を知ることができます。
さて、プログラムについて以下で解説をしていきますね。
プレゼンテーションのスライド数を取得する
Do Whileループでエクセルシートの3行目から末尾まで繰り返しをしています。
その中で11行目で、現在のスライド数を変数に格納しています。
PowerPointプレゼンテ―ションのスライド数を取得する場合は、countプロパティを使って
とすれば取得できます。スライドコレクションは
で指定できます。
最終ページと複製されたページの指定
{countSld}ページ目のスライドということは、最終ページのスライドということです。
12行目で最終ページのスライドに対してDuplicateメソッドを使用しています。
Duplicateメソッドのルールとして、複製されたスライドは元のスライドの次に追加されることになっています。
元のページが1ならば複製は2ページ目に挿入される、元のページが2ならば複製は3ページ目に複製される…という仕組みです。
このDuplicateメソッドの動きはけっこう重要ですので、覚えておくと重宝します。
次に{countSld+1}ページですが、これは新しく複製されたページになりますよね。
そのページの対象とするテキストボックスに現在の都道府県名を入力しています。
このように、countプロパティを上手に使うことで、プレゼンテーションの末尾にスライドを追加しつつ、その生成したスライドに操作をしていくことができます。
実行結果
上記プログラムを実行してみますと
このように48ページ目までのスライドが、スライドタイトルのテキストが変更された状態で生成されます。
スルスルっと生成されていく様子が見えまして、けっこう気持ちがいいですよ。
まとめ
エクセルVBAでPowerPointスライドをスライドタイトルを変更しながら複製する方法についてお伝えしました。
エクセルでPowerPointの各ページに記載する内容をリスト化しておけば、自動でスライドの生成やテキスト内容の変更ができるようになります。
次回以降、スライドタイトルだけでなく、都道府県別のグラフの貼り付けなどもできたらいいですよね…
まずは少しPowerPointから離れまして、グラフを取り扱うための基礎についてお伝えします。
どうぞお楽しみに!
連載目次:エクセルVBAでグラフとPowerPointを操作する
エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!- エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
- エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
- エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
- エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
- エクセルVBAでPowerPointのテキストボックスに文字を入力する
- エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
- 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
- エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
- 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
- エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
- エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
- エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法