【入門編】【中級者】特定の「タグ」が設定されたスライドだけを抽出し、新しいプレゼンテーションとして再構成して保存するカスタムショー作成マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押して「動いたはいいけれど、中身が全然読めない……」と頭を抱えていませんか?

今回は、一歩進んだ中級者を目指すあなたに向けて、PowerPointの隠れた超強力機能「スライドのタグ(Tags)」を使った、実用性抜群の自動化テクニックを伝授します。

「特定のタグ(例: 『重要』や『役員報告用』)が設定されているスライドだけを自動でかき集め、新しいプレゼンテーションとしてサクッと保存する」という、現場で即戦力になるカスタムショー作成マクロを一緒に作っていきましょう。

ここをクリアすれば、PowerPoint VBAの本質である「オブジェクトの操作」と「メタデータの活用」がグッと身につきますよ。それでは、熱いエンジニア魂を込めて解説していきます!

—

なぜ「スライドのタグ(Tags)」を使うのか?

PowerPointでスライドを分類する際、こんな泥臭いやり方をしていませんか?

  • スライドの背景色を変える
  • 特定の文字をタイトルに含める
  • ファイル名を分けて管理する

これらは人的ミス(ヒューマンエラー)の温床です。プレゼンの構成が変わるたびにリンクが切れたり、不要なスライドが混ざったりして大惨事になります。

そこで登場するのが、`Slide.Tags`(タグ)プロパティです。
タグとは、「スライドの裏側に貼り付けられる、目に見えない付箋(キーと値のペア)」のようなもの。画面の見た目を一切汚さずに、「このスライドは『役員報告用』フラグが立っている」といったメタデータをプログラムに記憶させることができます。

これを利用すれば、プレゼンの見た目に依存しない、極めて堅牢なスライド抽出システムが構築できるのです。

—

全体像:今回作成するマクロのフロー

今回のマクロの動きは以下の通りです。とてもシンプルですが、プログラミングの醍醐味がつまっています。

1. アクティブなプレゼンテーションの全スライドを先頭から順にスキャンする。
2. 各スライドが指定した「タグ(例: `Target = “役員報告用”`)」を持っているかチェックする。
3. タグを持っているスライドだけを、新しく作成した空のプレゼンテーションにコピーしていく。
4. 抽出したスライド群を指定したフォルダに名前を付けて自動保存する。

—

実装コード:現場で使える最強のタグ抽出マクロ

以下のコードを、PowerPointのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてください。

Option Explicit

‘ =====================================================================
‘ 概要: 指定したタグを持つスライドだけを抽出し、新プレゼンとして保存する
‘ 著者: シニアアーキテクト
‘ =====================================================================
Sub CreateCustomPresentationByTag()
‘ — 定数定義 —
Const TARGET_TAG_NAME As String = “Category” ‘ 検索するタグのキー名
Const TARGET_TAG_VALUE As String = “役員報告用” ‘ 検索するタグの値

Dim srcPres As Presentation
Dim newPres As Presentation
Dim sld As Slide
Dim targetSld As Slide
Dim extractedCount As Long
Dim savePath As String

‘ 1. 操作元のプレゼンテーションを定義
Set srcPres = ActivePresentation
extractedCount = 0

‘ エラーハンドリングの基本:最低限の安全装置
On Error GoTo ErrorHandler

‘ 2. 新しいプレゼンテーションを空っぽの状態で作成
‘ (元のプレゼンのサイズ・デザインを引き継がせたい場合はテンプレート指定も可能ですが、今回は新規作成)
Set newPres = Presentations.Add(msoTrue)

‘ 3. 元のプレゼンの全スライドをループ処理
For Each sld In srcPres.Slides
‘ スライドに特定のタグが設定されているかチェック
If sld.Tags(TARGET_TAG_NAME) = TARGET_TAG_VALUE Then

‘ 該当スライドを新規プレゼンの末尾にコピー
‘ Copy メソッドでクリップボード経由またはオブジェクトとして複製
sld.Copy

‘ 新規プレゼン側にペースト(スライドの書式を保持)
Dim pastedSlideIndex As Long
pastedSlideIndex = newPres.Slides.Count + 1
Set targetSld = newPres.Slides.Paste(pastedSlideIndex)

extractedCount = extractedCount + 1
End If
Next sld

‘ 4. 抽出結果の判定
If extractedCount = 0 Then
MsgBox “条件に一致するタグ(” & TARGET_TAG_NAME & ” = ” & TARGET_TAG_VALUE & “)を持つスライドが見つかりませんでした。”, vbExclamation, “処理中断”
newPres.Close
Exit Sub
End If

‘ 5. 保存先のパスを生成(元のファイルと同じ場所にタイムスタンプ付きで保存)
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)

If srcPres.Path = “” Then
‘ まだ一度も保存されていないファイルの場合
savePath = Environ(“USERPROFILE”) & “\Desktop\CustomPresentation_” & Format(Now, “yyyymmdd_hhnnss”) & “.pptx”
Else
savePath = srcPres.Path & “\Custom_” & Format(Now, “yyyymmdd_hhnnss”) & “_” & srcPres.Name
End If

‘ 6. プレゼンテーションの保存
newPres.SaveAs savePath

MsgBox “抽出完了!” & vbCrLf & _
extractedCount & “枚のスライドを抽出しました。” & vbCrLf & _
“保存先: ” & savePath, vbInformation, “成功”

Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “エラー”

If Not newPres Is Nothing Then
‘ エラー時に中途半端なファイルを閉じ忘れないための配慮
On Error Resume Next
newPres.Close
End If
End Sub

—

コードの深掘り解説:ここがエンジニアのこだわりポイント

ただ動くだけのコードなら誰でも書けます。ここでは、実務で絶対に知っておくべき「プロの作法」を3つ解説します。

1. `Option Explicit` による変数の明示的宣言

コードの最上部に書かれているこの一行。これが抜けているコードは、プロのエンジニアから見ると「未完成の危険なコード」です。
変数名のタイポ(打ち間違い)によるバグをコンパイル段階で完全に防いでくれるため、VBAを書くときは必ずおまじないのように書いてください。

2. コピー&ペーストの作法(`Copy` と `Paste`)

PowerPoint VBAでは、スライドを複製する際に `sld.Copy` を使ってクリップボードを経由するのが最も安全で、元のスライドが持つレイアウトやグラフのリンク切れを防ぐ確実な手段です。
さらに、ペーストした直後のスライドオブジェクトを変数(`targetSld`)にしっかりキャッチしている点に注目してください。オブジェクトの参照を保持しておくことで、後から加工が必要になったときにもすぐに対応できます。

3. 未保存ファイル(パスが空)への配慮

実務でマクロを動かすとき、ユーザーが「新規作成したまま一度も保存していないパワポ」で実行するケースが必ずと言っていいほど発生します。
コード内の `If srcPres.Path = “” Then` 部分がそれにあたります。パスが取得できない場合は自動的にデスクトップを保存先にフォールバック(代替え)させることで、「エラーで止まるストレス」を完全に排除しています。

—

現場でありがち!陥りやすいエラーと対策

Q. 「タグが設定されているはずなのに抽出されない!」

  • 原因のほとんどは「大文字小文字の区別」や「前後のスペース(空白)」です。

VBAの文字列比較は非常に厳密です。`”役員報告用”` と `” 役員報告用”`(半角スペースがある)は別物として扱われます。

  • 解決策: タグを設定・確認するための小さなマクロ(下部に記載)を事前に実行し、正確に値が入っているかをイミディエイトウインドウでデバッグしましょう。

おまけ:スライドに手軽にタグをセットするマクロ

以下のコードを実行すると、現在選択しているスライドに一発でタグを付与できます。

Sub SetTagToCurrentSlide()
Dim sld As Slide
If ActiveWindow.Selection.Type = ppSelectionSlides Then
Set sld = ActiveWindow.Selection.SlideRange(1)
‘ タグを追加
sld.Tags.Add “Category”, “役員報告用”
MsgBox “現在のスライドにタグを設定しました!”, vbInformation
Else
MsgBox “スライドを選択した状態で実行してください。”, vbExclamation
End If
End Sub

—

まとめ

今回は、PowerPoint VBAの「タグ(Tags)」という強力な武器を使って、指定スライドを抽出・再構成するカスタムショー作成マクロを解説しました。

  • Tagsプロパティを使えば、見た目を汚さずにスマートなメタデータ管理ができる。
  • `Presentations.Add` と `Copy` / `Paste` を組み合わせることで、自由自在に新しいプレゼンを構築できる。
  • エラーハンドリングや未保存ファイルへの配慮を入れることで、実務に耐えうる「頑健なマクロ」になる。

ここをクリアしたあなたなら、もうマクロの記録の卒業生ではありません立派なPowerPoint自動化エンジニアです。ぜひ現場の業務効率化に応用してみてくださいね。

それでは、次回の極限の知見でお会いしましょう!バッチリ使いこなしてください!

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