プレゼン地獄から脱出せよ!複数ファイルから「必要なスライド」だけを抽出するVBA自動化術
こんにちは。現場の最前線で「いかに手を動かさずに成果を出すか」を追求し続けているエンジニアです。
皆さんは、こんな経験はありませんか?
「過去の資料を5つも6つも開き、特定のキーワードが含まれるスライドだけを目視で探して、新しい資料にコピペする…」
もし、そんな時間を週に何度も費やしているなら、あなたは自分の「脳のCPU」をドブに捨てているようなものです。VBAを使えば、それはわずか数秒の作業になります。
今回は、マクロの記録ボタンを卒業し、「PowerPointの裏側」を操作して、賢く資料を抽出する極意を伝授します。
—
1. なぜ「手作業」から脱却すべきなのか?
PowerPoint VBAを操るということは、単に「コピペを自動化する」ことではありません。「オブジェクトモデル」という、PowerPointの設計図を直接操作するということです。
手作業で行うと、以下のようなリスクが必ず伴います。
- ヒューマンエラー: 抽出漏れが発生する。
- 非効率: ファイルを開閉するだけでメモリを浪費する。
- 消耗: 単純作業で脳が疲弊し、本来のクリエイティブな仕事ができなくなる。
これから紹介するコードは、単なる自動化ツールではありません。あなたの時間を守るための「守護神」です。
—
2. 【実践】キーワード抽出・自動生成マクロ
このコードは、現在開いているすべてのプレゼンテーションを巡回し、指定したキーワードが含まれるスライドを、新しい「まとめファイル」にコピーして保存します。
Sub ExtractSlidesByKeyword()
‘ — 設定エリア —
Const KEYWORD As String = “重要” ‘ 検索したいキーワード
Dim targetPres As Presentation
Dim newPres As Presentation
Dim sld As Slide
Dim shp As Shape
Dim found As Boolean
‘ 新しいプレゼンを作成(クリーンな状態からスタート)
Set newPres = Presentations.Add
‘ 開いているすべてのプレゼンをループ処理
For Each targetPres In Presentations
‘ 自分自身(新しく作ったまとめファイル)は対象外にする
If targetPres.Name <> newPres.Name Then
‘ 各プレゼンのスライドをチェック
For Each sld In targetPres.Slides
found = False
‘ スライド内のテキストボックス等を探索
For Each shp In sld.Shapes
If shp.HasTextFrame Then
If InStr(shp.TextFrame.TextRange.Text, KEYWORD) > 0 Then
found = True
Exit For ‘ キーワードが見つかったら探索終了
End If
End If
Next shp
‘ キーワードが見つかった場合、新しいファイルにコピー
If found Then
sld.Copy
newPres.Slides.Paste
End If
Next sld
End If
Next targetPres
MsgBox “抽出完了!新しい資料を確認してください。”, vbInformation
End Sub
—
3. コードの「心臓部」を理解する
初心者の方がコードを読むとき、ただ眺めるのではなく、以下の「3つの視点」で見てください。
1. 階層構造(オブジェクトモデル):
`Presentations` (すべての開いているファイル) → `Presentation` (個別のファイル) → `Slides` (スライドの集まり) → `Slide` (個別のスライド) という「入れ子構造」を意識してください。VBAは、この階層を辿ることで目的の場所に辿り着きます。
2. `InStr` 関数の役割:
これは「文字列の中に特定の文字が含まれているか?」を判定する関数です。`> 0` というのは、「見つかった(文字の位置が0より大きい)」という合図です。
3. `If`文による安全装置:
`If targetPres.Name <> newPres.Name Then` という記述。これは、「自分が今作っているファイルまで検索対象にして無限ループに陥る」のを防ぐための重要なガードレールです。
—
4. 陥りやすいエラーと対策
初心者が最初に出会う壁は、大抵決まっています。
- 「オブジェクトがありません」エラー:
これは、スライドが1枚もないファイルを開いている時や、図形の中にテキストが含まれていない(画像だけのスライド)場合に起こります。`shp.HasTextFrame` で「テキストボックスがあるか?」を確認してから中身を読むという防御的なコーディングが必須です。
- 保存忘れ:
上のコードはメモリ上で新しいファイルを作ります。実行後、必ず `newPres.SaveAs` を使って保存する癖をつけてください。
—
最後に:エンジニアへの第一歩
「マクロなんて自分には無理」そう思っていたかもしれませんが、今日あなたは、PowerPointの内部構造に直接命令を下すコードを書きました。
このコードをベースに、「保存先フォルダを自動選択させる」「PDFで出力する」といった機能を付け足していけば、それはもう立派なあなたの「最強の武器」になります。
何か分からないことがあれば、またいつでも聞いてください。焦らず、一歩ずつ。その積み重ねが、あなたを「作業する人」から「仕組みを作る人」へと変えてくれますよ。応援しています!
