PowerPoint VBAの「隠し武器」を使いこなせ:`Tags` オブジェクトでメタデータを操る極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアです。
皆さんは、PowerPointで資料を作っている時、こんなことを思ったことはありませんか?
「このスライド、特定の部署向けだから後で抽出したいな」とか、「このプレゼン、どのシステムから出力されたものか情報を埋め込んでおきたいな」と。
普通なら、スライドの外にテキストボックスを作ったり、別ファイルで管理したりしますよね。でも、それは「二重管理」という自動化の最大の敵を生むだけです。
今回は、PowerPoint VBAの隠し玉、`Tags` オブジェクトを使って、スライドやプレゼンそのものに「目に見えないラベル」を貼る魔法のような手法を伝授します。これを使えば、あなたの資料はただの図形ではなく、立派な「データソース」へと進化します。
—
1. `Tags` とは何か?:スライドの「裏側」にある付箋
PowerPointの `Tags` とは、簡単に言えば「キーと値のペア」をオブジェクトの裏側に保存できる機能です。
- キー (Name): 付箋の「タイトル」
- 値 (Value): 付箋に書かれた「内容」
これらは画面上には一切表示されません。しかし、VBAを使えばいつでも読み書きが可能です。削除されることも、レイアウトが崩れて消えることもありません。まさに、システム開発における「メタデータ」そのものです。
—
2. 基本の実装:タグを書いて、読み取る
まずは、現在表示しているスライドに「ステータス」というタグを埋め込んでみましょう。
Sub AddTagToSlide()
‘ 現在選択しているスライドを取得
Dim sld As Slide
Set sld = ActiveWindow.View.Slide
‘ Tags.Add(名前, 値) でタグを埋め込む
‘ ここでは「公開状態」を「非公開」に設定する例
sld.Tags.Add “Status”, “Private”
MsgBox “タグを保存しました!”
End Sub
次に、このタグを読み取ってみます。
Sub ReadTagFromSlide()
Dim sld As Slide
Set sld = ActiveWindow.View.Slide
‘ Tags(“名前”) で値を取得
Dim status As String
status = sld.Tags(“Status”)
If status = “” Then
MsgBox “このスライドにはタグがありません。”
Else
MsgBox “このスライドのStatusは:” & status
End If
End Sub
—
3. 【実践】タグを使って「特定の資料だけ」を抽出・削除する
ここからが本番です。プレゼンテーション内のすべてのスライドをチェックし、「削除」というタグがついているスライドだけを全滅させる(削除する)自動化コードです。
Sub DeleteTaggedSlides()
Dim i As Long
Dim sld As Slide
‘ スライドの削除は、必ず「後ろから」ループするのがVBAの鉄則!
‘ 前からループすると、削除した瞬間にインデックスがずれてエラーになります。
For i = ActivePresentation.Slides.Count To 1 Step -1
Set sld = ActivePresentation.Slides(i)
‘ “Action” というタグの値が “Delete” なら削除する
If sld.Tags(“Action”) = “Delete” Then
sld.Delete
End If
Next i
MsgBox “タグ付きスライドの整理が完了しました。”
End Sub
ここがプロの視点:なぜ「後ろから」ループするのか?
初学者が最もハマるのが「インデックスのズレ」です。1枚目を削除すると、2枚目が1枚目に繰り上がりますよね? `For i = 1 To Count` で回すと、必ずどこかで「スライドが見つかりません」というエラー(Runtime Error)が発生します。
「コレクションの削除は逆順から」。これは、エンジニアとして体に叩き込んでおくべき鉄則です。
—
4. 陥りやすい罠と解決策
Q1. タグを消すにはどうすればいいの?
`Tags.Delete` メソッドを使います。
‘ 特定のタグを削除
sld.Tags.Delete “Action”
Q2. 存在しないタグを読み取るとどうなる?
エラーにはならず、空の文字列(`””`)が返ってきます。これは非常に親切な設計ですが、逆に言えば「タグが本当に空なのか、存在しないのか」の区別がつかない場合があります。必要であれば `If sld.Tags.Name(index) = “ターゲット名”` などで判定しましょう。
—
最後に:あなただけの「スマート資料」へ
`Presentation.Tags` を使えば、そのファイル自体に「作成者ID」や「最終更新日」を刻み込むことも可能です。
この技術をマスターすれば、もう手作業で資料を分割したり、名前を付け直したりする必要はありません。コードを走らせるだけで、必要な情報が抽出され、整理される。そんな「自動化されたオフィスライフ」が、あなたのすぐそばまで来ています。
次は、どの属性を「タグ」で管理してみますか?
あなたのアイデア次第で、PowerPointは単なるプレゼンソフトから、「意思を持つドキュメント」へと進化します。応援していますよ!
