【入門編】【中級者】プレゼンテーション内のすべての非表示スライドを除外して、公開用PDFを新規作成・保存するフィルタリングマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの極意:非表示スライドを排除し「真の公開用PDF」を生成する自動化術

こんにちは。現場で「いかに楽をして、いかにミスを減らすか」を追求し続けているエンジニアです。

皆さんは、プレゼン資料をPDF化する際、手作業で「非表示スライドの削除」や「PDF保存」を行っていませんか?もし、スライドの枚数が100枚を超え、その都度PDFの再作成に追われているなら、今日でその作業とはおさらばしましょう。

今回は、「非表示スライドを自動で判別し、公開用スライドだけを抽出してPDF化する」という、実務で最も要望の多い自動化コードを伝授します。

—

1. なぜ「コピー&ペースト」の自動化なのか?

PowerPointには「非表示スライドを印刷しない」という設定はありますが、PDF変換時に意図せず情報漏洩(非表示にしたはずのデータが残っている)が起きるリスクがゼロではありません。

また、「表示スライドだけを集めた別ファイルを作る」ことは、配布用資料の軽量化や、先方に渡してはいけない機密情報の物理的な遮断という観点から、最も安全な手法です。

この処理の本質は以下の3ステップです。
1. 現在のプレゼンテーションを解析する
2. 新規プレゼンテーションを作成し、必要なスライドだけを「複製」して追加する
3. 完成したクリーンなファイルをPDFとして書き出す

—

2. 実装コード:究極のフィルタリング・エンジンの全容

以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてください。標準モジュールに配置するのが鉄則です。

Option Explicit

Sub ExportCleanPDF()
Dim srcPres As Presentation
Dim destPres As Presentation
Dim sld As Slide
Dim pdfPath As String

‘ 現在アクティブなプレゼンテーションを指定
Set srcPres = ActivePresentation

‘ 保存先のパスを設定(同じフォルダに「_Public.pdf」として保存)
pdfPath = Left(srcPres.FullName, InStrRev(srcPres.FullName, “.”)) & “Public.pdf”

‘ 新規プレゼンテーションの作成(非表示のまま作成して高速化)
Set destPres = Presentations.Add(msoFalse)

‘ スライドをループして判定
For Each sld In srcPres.Slides
‘ ShowInSlideShow プロパティが msoTrue のものだけを抽出
If sld.Hidden = msoFalse Then
‘ スライドを新規ファイルへコピー(末尾に追加)
sld.Copy
destPres.Slides.Paste destPres.Slides.Count + 1
End If
Next sld

‘ PDFとして保存
If destPres.Slides.Count > 0 Then
destPres.ExportAsFixedFormat pdfPath, ppFixedFormatTypePDF
MsgBox “公開用PDFを作成しました:” & vbCrLf & pdfPath, vbInformation
Else
MsgBox “対象となる表示スライドが見つかりませんでした。”, vbExclamation
End If

‘ 新規ファイルを閉じる(保存はしない)
destPres.Close
End Sub

—

3. コードの「ここが肝」:プロの視点

① `msoFalse` でバックグラウンド生成

`Presentations.Add(msoFalse)` の引数に注目してください。これを `msoTrue` にすると、処理のたびに画面がパカパカと切り替わり、処理速度が低下します。`msoFalse` でバックグラウンド生成させるのが、自動化エンジニアの嗜みです。

② `Hidden` プロパティの判定

`sld.Hidden` は、スライドが非表示かどうかを保持する真偽値(Boolean)です。ここを `If sld.Hidden = msoFalse Then` とすることで、「表示されているスライドだけ」を確実に抽出します。

③ `Paste` メソッドの最適化

`destPres.Slides.Paste` の引数に `destPres.Slides.Count + 1` を指定することで、常に新しいスライドを末尾に追加しています。これにより、スライドの順番が入れ替わる事故を完璧に防ぎます。

—

4. 陥りやすいエラーと回避策

  • エラー:参照エラーが出る
  • 必ずプレゼンテーションを一度保存してから実行してください。`ActivePresentation.FullName` は未保存ファイルではエラーになります。
  • エラー:PDFが空っぽになる
  • `If destPres.Slides.Count > 0` というガード文を入れています。スライドが1枚も抽出されなかった場合にPDF化するとエラーになるため、事前にチェックするのは基本中の基本です。

—

さあ、一歩先の自動化へ

このコードをリボンメニューの「クイックアクセスツールバー」に登録しておけば、ボタンを1回押すだけで、配布用PDFが即座に生成されるようになります。

VBAは、単に「書ける」ことよりも、「いかにシステム的な安定性を担保するか」が重要です。今回紹介したエラーハンドリングとバックグラウンド処理の考え方は、他のどの自動化にも通ずる「伝説のアーキテクト」としての基盤です。

ここをクリアしたあなたは、もう初心者ではありません。次なる自動化のステージへ、自信を持って進んでください!質問があれば、いつでもどうぞ。

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