【PowerPoint VBA】カスタムスライドショーを「コードで自在に操る」極意:動的プレゼン生成術
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアの視点から、今日はPowerPoint VBAの「真髄」とも言える領域に踏み込みます。
多くのユーザーは「スライドを手動で選んで、コピー&ペーストして別のファイルを作る」という不毛な作業に時間を溶かしています。しかし、PowerPointには「カスタムスライドショー」という強力な武器があります。これを使えば、元のファイルを汚さず、プレゼンの「見せ方」だけをプログラムで瞬時に切り替えることが可能です。
今回は、この機能をVBAで完全に掌握するためのステップを伝授しましょう。
—
1. なぜ「カスタムスライドショー」なのか?
実務の現場では、「A社向けにはこの3枚」「B社向けにはこの5枚」といった、情報の取捨選択が頻発します。
これを別々のファイルとして保存すると、後でスライドを修正したときに「全ファイルを直さなきゃいけない」という地獄が待っています。
カスタムスライドショーを活用すれば、データソースは常に1つ。
VBAは「どのスライドを見せるか」というリストだけを動的に生成します。これが、プロの自動化です。
—
2. アーキテクチャを理解する:オブジェクトの階層
まず、頭の中にこの階層図を叩き込んでください。
- Application: PowerPointそのもの
- Presentation: 開いているファイル
- SlideShowSettings: プレゼンの設定(再生範囲や方法など)
- NamedSlideShows: カスタムショーの「コレクション(一覧)」
この `NamedSlideShows` オブジェクトを操作することで、スライドの「プレイリスト」を自由に編集できるのです。
—
3. 実践:カスタムスライドショー自動構築コード
以下のコードは、現在開いているプレゼンテーションから、指定したスライド番号だけを抽出して「DynamicShow」という名前のカスタムショーを作成し、そのまま実行する実践的なスクリプトです。
Sub CreateAndRunDynamicShow()
Dim pptPres As Presentation
Dim customShows As NamedSlideShows
Dim slideIndices As Variant
Dim i As Long
Set pptPres = ActivePresentation
Set customShows = pptPres.SlideShowSettings.NamedSlideShows
‘ 1. 既存の同名ショーがあれば削除(エラー回避のため必須)
On Error Resume Next
customShows(“DynamicShow”).Delete
On Error GoTo 0
‘ 2. 抽出したいスライド番号を指定(ここでは1, 3, 5枚目を選択)
slideIndices = Array(1, 3, 5)
‘ 3. カスタムスライドショーの作成
‘ 第1引数: 名前、第2引数: スライド番号の配列
customShows.Add “DynamicShow”, slideIndices
‘ 4. スライドショーの設定を「カスタムショーの特定のもの」に変更
With pptPres.SlideShowSettings
.RangeType = ppShowNamedSlideShow
.SlideShowName = “DynamicShow”
‘ 5. 再生実行
.Run
End With
End Sub
コードの重要ポイント
- `On Error Resume Next` の使い所: `Delete` メソッドは存在しない名前を指定するとエラーになります。あえてエラーを無視し、存在する場合のみ削除させるという「防御的プログラミング」です。
- `RangeType = ppShowNamedSlideShow`: ここが肝です。デフォルトでは「全スライド再生」になっていますが、これをカスタムショー指定に切り替えることで初めて機能が有効化されます。
—
4. 陥りやすい罠と解決策
初学者が必ず突き当たる壁がいくつかあります。
1. 「スライド番号」はインデックス(位置)である:
スライドIDと勘違いしないでください。`slideIndices` に入れるのは、左側のスライド一覧における「上からの順番」です。
2. 配列の渡し方:
`Array()` 関数を使うのが最もスマートです。もし手動で構築したい場合は、Variant型の配列をあらかじめ作成して渡してください。
3. 実行後の戻し方:
このコードを実行すると、設定がカスタムショー固定になります。通常再生に戻したい場合は、`.RangeType = ppShowAll` に戻す処理が必要です。
—
5. 次のステップ:プロフェッショナルへの道
この自動化をマスターすれば、次は「Excelのリストから顧客名とスライド番号を読み込んで、自動的にカスタムショーを生成してPDF出力する」といった、「ハイパー・オートメーション」の世界が見えてきます。
PowerPoint VBAは、オブジェクトのライフサイクルを意識し、「何を操作しているのか」を明確にすれば、驚くほど安定して動きます。まずはこのコードをコピーし、自分の手元で動かしてみてください。
「動いた!」という感動が、あなたのエンジニアとしての第一歩です。何か詰まったら、いつでもまた聞きに来てくださいね。応援しています。
