【入門編】【実務中級】Presentation.SlideShowSettingsのStartingSlide/EndingSlideをハック:特定のセクションや範囲だけを切り出してスライドショーを動的実行する制御マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから抜け出し、「自分の手でプレゼンテーションを自在にコントロールしたい」と願うあなたへ。

今回は、実務で猛烈に役立つテクニック「特定のセクションや範囲だけを切り出してスライドショーを動的実行する制御マクロ」を授けましょう。

「100枚あるスライドのうち、今日のクライアントには中盤の15枚だけを見せたい」
「持ち時間が急に5分に縮まったので、特定のセクションだけを即座にスライドショーとして立ち上げたい」

そんな現場の修羅場を、たった数行の美しいVBAコードで鮮やかに解決する方法を、シニアエンジニアの視点から優しく、そして深く解説していきます。ここをクリアすれば、あなたのPowerPoint VBAのスキルは確実に中級者の領域に到達しますよ。

1. PowerPoint VBAの心臓部:オブジェクトモデルの基本

まず、PowerPoint VBAの全体像を軽く整理しておきましょう。
Excel VBAが「セル(Cell)」の集合体であるように、PowerPoint VBAは「スライド(Slide)」の階層構造で成り立っています。

Application (PowerPoint アプリケーション)
└─ Presentations (開いているプレゼンテーションたち)
└─ Presentation (対象のファイル)
├─ Slides (スライドのコレクション)
└─ SlideShowSettings (スライドショーの設定オブジェクト) ★今回キモになる主役

今回のテーマである`SlideShowSettings`は、まさに「どうやってスライドショーを再生するか」のルールブックです。ここに「何枚目から何枚目まで再生するか」をVBAからダイレクトに書き込むことで、動的なスライドショー制御が可能になります。

2. なぜ「手動設定」ではなく「VBAハック」なのか?

通常、PowerPointでスライドの再生範囲を変えたいときは、リボンの「スライドショー」タブから「スライドショーの設定」を開き、開始スライドと終了スライドをポチポチと手動で変更する必要がありますよね。

しかし、これを商談のたびに手動でやっていたのでは、ミスも起きるし何よりスマートではありません。
VBAを使って「瞬時に範囲を書き換え、即座にその設定で全画面ショーを起動する」プログラムを組んでおけば、ボタン一つで望み通りのプレゼン環境が整います。

3. 実装コード:特定範囲のスライドショーを動的実行する

それでは、開発の現場でそのままコピペして使える実用的なコードをお見せします。
標準モジュールに以下のコードを貼り付けてみてください。

Option Explicit

Sub RunCustomSlideShow()
‘ =====================================================================
‘ 目的: アクティブなプレゼンテーションの特定範囲だけをスライドショー実行する
‘ 対象: 実務中級者向け(SlideShowSettingsのハック)
‘ =====================================================================

Dim targetPres As Presentation
Set targetPres = ActivePresentation

‘ エラーハンドリングの準備
On Error GoTo ErrorHandler

‘ — 【設定エリア】ここに再生したい開始・終了スライド番号を指定 —
Dim startSlideNum As Long
Dim endSlideNum As Long

startSlideNum = 5 ‘ 例:5枚目から
endSlideNum = 12 ‘ 例:12枚目まで
——————————————————————

‘ 念のため、指定した番号がスライド総数を超えていないかバリデーション
If startSlideNum < 1 Or endSlideNum > targetPres.Slides.Count Then
MsgBox “指定されたスライド番号が、プレゼンテーションの範囲外です。”, vbCritical, “範囲エラー”
Exit Sub
End If

If startSlideNum > endSlideNum Then
MsgBox “開始スライド番号が終了スライド番号よりも大きくなっています。”, vbCritical, “設定エラー”
Exit Sub
End If

‘ 【ここが本質】SlideShowSettingsオブジェクトの設定を書き換える
With targetPres.SlideShowSettings
.RangeType = ppShowRange ‘ 範囲指定モードを有効化
.StartIndex = startSlideNum ‘ 開始スライドを指定
.EndIndex = endSlideNum ‘ 終了スライドを指定

‘ スライドショーを実行
Dim ssWindow As SlideShowWindow
Set ssWindow = .Run
End With

Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “実行時エラー”
End Sub

4. コードの深掘り解説:プロが教える3つのポイント

このコードの重要なポイントを、エンジニアの知見を交えて3つに絞って解説します。

① `ppShowRange` という定数の魔力

`SlideShowSettings` の `RangeType` プロパティには、いくつかの定数を代入できます。

  • `ppShowAll` (すべてのスライド)
  • `ppShowNamedShow` (カスタムショー)
  • `ppShowRange` (ユーザー定義の範囲)

今回使っている `ppShowRange` を指定することで、次に `.Run` を実行したときに「全スライド」ではなく、私たちが裏で指定したインデックスの範囲だけを強制的に再生させることができます。

② `.Run` メソッドの戻り値を受け取る

`.Run` メソッドを実行すると、スライドショーのウィンドウ(`SlideShowWindow` オブジェクト)が返されます。今回は単純に実行するだけなので変数受け取りだけでも機能しますが、将来的に「スライドショー実行中のウィンドウサイズを制御したい」といった拡張を行う場合にも、この書き方を知っておくと非常に有利です。

③ 鉄壁のバリデーション(入力値チェック)

プログラミング初学者がやりがちなミスが、「存在しないスライド番号(例えば全10枚なのに15枚目を指定するなど)」を指定してエラー落ちすることです。
コード内の `targetPres.Slides.Count` を使って、「実在する範囲内か?」を事前にチェックする防衛的コード(Defensive Code)を入れるのが、プロの現場の作法です。

5. 陥りやすい罠とトラブルシューティング

最後に、PowerPoint VBAでこの手の制御を実装する際につまずきやすいポイントを共有しておきます。

  • 罠1: モノクロ印刷や他の設定と競合する?
  • `SlideShowSettings` はファイル保存時にその設定が保持される場合があります。マクロで一時的に範囲を変更したあと、手動で普通に全スライドショーをやろうとしたときに「あれ、範囲が狭まったまま?」と焦ることがあります。必要であれば、マクロの終了時や別マクロで `.RangeType = ppShowAll` に戻すお掃除処理を入れておくと完璧です。
  • 罠2: プレゼンテーションが保存されていない(新規作成直後)
  • `ActivePresentation` は、一度も保存されていないファイルや、ウィンドウがアクティブでない状態だと正しく動作しないことがあります。必ず対象のファイルをアクティブにした状態で実行してください。

まとめ

今回は、`Presentation.SlideShowSettings` をハックして、特定範囲のスライドショーを動的にコントロールする手法を解説しました。

ここをクリアしたあなたは、単なる「マクロの記録が使える人」から、「PowerPointのオブジェクトモデルを理解し、プレゼンの体験をプログラムでデザインできるエンジニア」へとステップアップしています。

ぜひ実務のプレゼン資料で試してみてください。手動ポチポチ作業からの解放と、コードでシステムを操る爽快感を味わえるはずです。
それでは、次の知見でお会いしましょう!

タイトルとURLをコピーしました