【PowerPoint自動化】「特定のキーワード」を含むスライドだけを抽出して別ファイルにする魔法のレシピ
こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの長さに絶望した経験はありませんか?実は、PowerPoint VBAは少しのコツさえ掴めば、驚くほど軽快に動く「相棒」になります。
今回は、現場で最も需要の高い「大量の資料から、必要なスライドだけを抜き出して別ファイルにする」というタスクを、一瞬で終わらせるための極意を伝授します。
—
なぜ「手作業」でやってはいけないのか?
数百枚の資料から「〇〇プロジェクト」というキーワードを探し、手作業でコピー&ペーストして別ファイルを作る……。これは、時間の浪費であるだけでなく、ヒューマンエラー(見落とし)の温床です。
VBAを使えば、「スライドの中身を全探索し、一致するものだけを新しいプレゼンテーションに『コピー』する」という処理が、わずか数秒で完結します。
—
今回作成するコードの全貌
まずは、以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。これが、あなたの自動化の第一歩です。
Sub ExtractSlidesWithKeyword()
Dim sourcePres As Presentation
Dim newPres As Presentation
Dim slideObj As Slide
Dim shapeObj As Shape
Dim targetKeyword As String
Dim isFound As Boolean
‘ 抽出したいキーワードを設定
targetKeyword = “重要”
Set sourcePres = ActivePresentation
Set newPres = Presentations.Add ‘ 新しいプレゼンテーションを作成
‘ 元のプレゼンテーションの全スライドを走査
For Each slideObj In sourcePres.Slides
isFound = False
‘ スライド内の全シェイプ(テキストボックス等)をチェック
For Each shapeObj In slideObj.Shapes
If shapeObj.HasTextFrame Then
If InStr(shapeObj.TextFrame.TextRange.Text, targetKeyword) > 0 Then
isFound = True
Exit For ‘ キーワードが見つかったら探索終了
End If
End If
Next shapeObj
‘ キーワードが見つかった場合、新しいファイルにコピー
If isFound Then
slideObj.Copy
newPres.Slides.Paste
End If
Next slideObj
MsgBox “抽出が完了しました!”, vbInformation
End Sub
—
コードを深く理解するための「3つの視点」
コードをただ写すだけでなく、その「構造」を理解することがプロへの近道です。
1. オブジェクトの階層構造を意識する
PowerPoint VBAは「Application > Presentation > Slide > Shape」という階層でできています。
- `For Each slideObj In sourcePres.Slides`:箱(プレゼン)の中からスライドを一つずつ取り出す。
- `For Each shapeObj In slideObj.Shapes`:そのスライドの中から、さらに図形を一つずつ取り出す。
この「入れ子構造」さえ理解できれば、応用は無限大です。
2. `InStr` 関数という「検知器」
`InStr(探したい対象, キーワード)` は、キーワードが何文字目にあるかを返す関数です。0より大きければ「含まれている」という判定になります。これが検索エンジンの核となります。
3. `HasTextFrame` でエラーを防ぐ
初心者が陥る罠が、「テキストを持たないオブジェクト(画像や線など)に対してテキストを探そうとしてエラーになる」ことです。`HasTextFrame` を使うことで、安全にテキストが含まれている図形だけを対象にすることができます。
—
初心者がハマりやすい「落とし穴」と対策
- 「マクロが止まる」原因は?
- 多くの場合、非表示のスライドやレイアウト設定が影響します。まずは「標準表示」で実行することをお勧めします。
- ファイル保存はどうする?
- 上のコードでは新しいファイルを作成した段階までですので、最後に `newPres.SaveAs “C:\path\to\your\file.pptx”` を追加すれば保存まで自動化できます。
- どこまで検索する?
- このコードは「テキストボックス」を対象にしています。図形の中に文字が入っている場合も拾えますが、グループ化された図形の中などは少し工夫が必要になります。まずはここから始めてみてください。
—
最後に:自動化は「楽しむもの」
「面倒な作業をコードに置き換える」ことは、単なる効率化ではありません。「自分自身のクリエイティブな時間を確保する」ための投資です。
今日学んだ `For Each` をマスターすれば、あなたはもう「マクロの記録」に頼るだけのユーザーではありません。次は、保存先をフォルダから自動取得させたり、PDFへ一括変換する機能を追加したりと、自分なりにカスタマイズしてみてください。
もし分からないことがあれば、いつでもまた聞きに来てください。あなたのエンジニアリングライフを全力でサポートします。
