PowerPoint VBAを掌握せよ:ノートを「メタデータ」に変えるスライド選別術
こんにちは。業務自動化の世界へようこそ。
日々、手作業でプレゼン資料を修正して「配布用」「本番用」とファイルを分けているあなたへ。その作業、今日で終わりにしましょう。
PowerPointの「ノート」欄。ここをただのメモ書きだと思っていませんか?
実はここ、スライドの属性を制御する最強のメタデータ領域になり得るのです。
今回は、ノートに特定のコマンド(例:`[Exclude]`)が含まれるスライドを自動検出し、それらを除外した「本番用プレゼン」を爆速で生成するアーキテクチャを伝授します。
—
1. なぜ「ノート」を活用するのか?
多くの人がやりがちなのが、「手動でスライドを複製して、不要なものを削除する」という非効率なアプローチです。これではミスが発生し、修正も二度手間になります。
私たちが目指すのは「マスターデータ(元のファイル)」は1つだけという運用です。
ノートにフラグを立てることで、コードが「これは配布していいか?」「これは非公開か?」を判断する。これこそが、メンテナンス性の高い自動化の第一歩です。
—
2. 実装の設計思想:スライドの「クローン」と「選別」
今回のマクロでは、以下の手順で処理を行います。
1. 現在のプレゼンを開く(ソース)
2. 新しい空のプレゼンを作成する(デスティネーション)
3. ソースのスライドを1枚ずつループし、ノートを確認する
4. コマンドが含まれていなければ、新しいプレゼンに「コピー」する
5. 保存して完了
陥りやすい罠:オブジェクトの参照
`Slides.Add` や `Copy` を扱う際、最も注意すべきは「どのプレゼンテーションを操作しているか」というカレント(対象)の明確化です。`ActivePresentation` に頼りすぎると、コードが途端に暴走します。必ず変数に格納して管理するのがプロの作法です。
—
3. 実践コード:Slide Excluder(スライド除外器)
このコードを標準モジュールに貼り付けてください。
Option Explicit
‘ — フィルタリングしてプレゼンを新規作成するメインルーチン —
Sub CreateCleanPresentation()
Dim sourcePres As Presentation
Dim targetPres As Presentation
Dim slideObj As Slide
Dim targetSlide As Slide
Dim excludeTag As String
‘ 除外コマンドの設定
excludeTag = “[Exclude]”
Set sourcePres = ActivePresentation
‘ 新規プレゼンテーションを作成
Set targetPres = Presentations.Add
‘ 全スライドを順次チェック
For Each slideObj In sourcePres.Slides
‘ ノート欄にコマンドが含まれていないかチェック
If InStr(slideObj.NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text, excludeTag) = 0 Then
‘ コマンドがない場合のみ、スライドをコピーして追加
slideObj.Copy
targetPres.Slides.Paste
End If
Next slideObj
‘ 完了の合図
MsgBox “配布用プレゼンの生成が完了しました!”, vbInformation
End Sub
—
4. コードの深掘り:ここを理解すればマスター級
① `InStr` 関数の役割
`InStr(対象文字列, 検索文字列)` は、文字列の中に特定の文字が含まれているかを判定します。`0` が返れば「含まれていない」、それ以外なら「含まれている」という単純かつ強力な判定ロジックです。
② `NotesPage.Shapes.Placeholders(2)` とは?
ここが少しだけマニアックなポイントです。PowerPointにおいてノート欄のテキストは「スライド」ではなく「ノートページ」という別のオブジェクトの中に存在します。
`Placeholders(2)` はノートの本文領域を指します。ここを叩くことで、ノートの中身を自由自在に読み取れるようになります。
—
5. 運用上のヒント:次のステップへ
このマクロを使いこなせれば、あなたはもう手動でスライドを削除する必要はありません。さらに応用するなら、以下の機能を追加してみると面白いでしょう。
- PDF書き出しの自動化: `targetPres.ExportAsFixedFormat` を使えば、作成したスライドを自動でPDF化できます。
- タグの複数対応: `[Exclude]` だけでなく `[Internal]` や `[Draft]` など、複数のフラグを配列で管理する設計にすると、より複雑なドキュメント管理が可能になります。
先輩エンジニアからのアドバイス
最初はエラーが出るかもしれません。特に「ノートが空っぽの時に `Placeholders(2)` にアクセスしてエラーになる」といったケースはよくあります。その時は、`On Error Resume Next` で逃げるのではなく、`If slideObj.NotesPage.Shapes.Count > 1 Then` のように、「オブジェクトが存在するか」を確認する癖をつけてください。これが防衛的なプログラミング(Defensive Programming)の極意です。
さあ、あなたのプレゼン資料を、コードでスマートにコントロールしましょう。
ここまで理解できたあなたなら、PowerPoint VBAはもう怖くありませんよ。
