【脱・マクロ記録】プロパティを読み解き、ファイルを自動仕分けする:PowerPoint VBAの第一歩
こんにちは。現場のコードを支えるアーキテクトです。
「マクロの記録」ボタンを押して、自分の操作を記録することからVBAの世界に足を踏み入れたあなた。まずはその一歩を称えたいと思います。記録されたコードを見て、「あ、これはこういう動きをしているんだな」と理解しようとする姿勢こそが、エンジニアへの登竜門です。
しかし、マクロの記録には決定的な弱点があります。それは、「その時、画面に見えているもの」しか操作できないということです。
例えば、「開いているたくさんのファイルの中から、特定の作成者が作ったものだけを抜き出して、別フォルダに保存したい」……。そんな、「目に見えないデータ(メタデータ)」を判定基準にする高度な判断は、マクロの記録では絶対に不可能です。
今日は、そんな「記録」の壁を突破し、プログラムに「思考」をさせるための第一歩――プロパティ(属性情報)を活用した自動仕分けマクロを伝授します。ここをクリアすれば、あなたのPowerPoint VBAのレベルは、一気に「初心者」から「実務者」へと昇華しますよ。
1. 核心:ファイルには「目に見えないDNA」がある
私たちがスライドを眺めているとき、目にしているのは「図形」や「テキスト」です。しかし、コンピュータにとってのプレゼンテーションファイルは、それら以外にも膨大な情報を持っています。
作成者の名前、作成日時、最終更新者……。これらは「プロパティ(属性情報)」と呼ばれます。
今回のミッションは、スライドの中身を読み取ることではありません。ファイル自体が持っている「作成者(Author)」というDNAをスキャンして、条件に合うものだけを抽出することです。
2. 実装:作成者による一括仕分けマクロ
それでは、実際に動くコードを見てみましょう。
このコードは、「今、PowerPointで開いているすべてのプレゼンテーション」を順番に調べ、指定した名前の作成者が作ったファイルだけを、指定したフォルダへ別名で保存します。
Sub SortPresentationsByAuthor()
' ============================================================
' テーマ:作成者プロパティによるプレゼンテーションの自動仕分け
' 概要:開いているファイルの中から特定の作成者を判定し、別名保存する
' ============================================================
Dim targetAuthor As String
Dim savePath As String
Dim pres As Presentation
Dim currentAuthor As String
Dim newFileName As String
' --- 【設定エリア】ここを書き換えてください ---
targetAuthor = "田中 太郎" ' 抽出したい作成者名
savePath = "C:\Users\Public\Documents\SortedFiles\" ' 保存先フォルダ(最後は \ で終わること)
' ----------------------------------------------
' 1. 保存先フォルダが存在するかチェック(簡易的なエラー防止)
' ※本来はFileSystemObjectを使うのがプロの流儀ですが、今回はシンプルに。
If Right(savePath, 1) <> "\" Then savePath = savePath & "\"
On Error Resume Next ' エラーが発生しても止まらずに次へ進む(重要!)
' 2. 開いているすべてのプレゼンテーションをループ処理
' Presentations コレクションは、現在開いている全ファイルへの入り口です
For Each pres In Presentations
' 3. ファイルの「作成者」プロパティを取得
' BuiltInDocumentProperties は、ファイルが持つ標準的な属性へのアクセス手段です
currentAuthor = pres.BuiltInDocumentProperties("Author")
' 4. 作成者が一致するか判定
If currentAuthor = targetAuthor Then
' 一致した場合、新しい保存ファイル名を生成
' 元のファイル名に「_sorted」を付与して、上書きを防ぎます
newFileName = savePath & pres.Name & "_sorted.pptx"
' 5. 別名で保存(SaveAs)
' ここで、条件に合致したファイルだけが指定フォルダへ飛びます
pres.SaveAs Filename:=newFileName
' 実行ログをイミディエイトウィンドウに出力(デバッグ用)
Debug.Print "保存成功: " & pres.Name & " (作成者: " & currentAuthor & ")"
Else
' 一致しない場合は何もしない
Debug.Print "スキップ: " & pres.Name & " (作成者: " & currentAuthor & ")"
End If
Next pres
On Error GoTo 0 ' エラーハンドリングを元に戻す
MsgBox "仕分け作業が完了しました!", vbInformation, "完了報告"
End Sub
3. アーキテクトの視点:コードの「重み」を理解する
コードをコピペして動かすだけでは、あなたはまだ「ユーザー」です。このコードの裏側にある「設計思想」を理解して初めて、あなたは「エンジニア」になれます。
① `Presentations` コレクションという概念
マクロの記録では `ActivePresentation`(今、一番手前にあるファイル)しか扱えません。しかし、プロのコードは `Presentations`(開いているすべてのファイルの集合体)を対象にします。
`For Each pres In Presentations` という一文は、「開いているすべてのファイルに対して、一つずつ順番に命令を出す」という、自動化の基本中の基本となる思考回路です。
② `BuiltInDocumentProperties`:データの深層へ
スライド上のテキストボックスを探しに行くのは、非常にコスト(処理時間と手間)がかかります。しかし、`BuiltInDocumentProperties(“Author”)` は、ファイルヘッダーにある情報を直接読み取るため、非常に高速かつ確実です。
「どこに情報があるか」を正しく見極めること。これがパフォーマンスを左右します。
③ エラーハンドリングの重要性
コードの中に `On Error Resume Next` という記述があります。
もし、一つだけ「読み取り専用」のファイルが混ざっていたら? プログラムはそこでエラーを起こして止まってしまいます。
「エラーが起きたら、それを無視して次のファイルに進め」と指示しておくことで、大量のファイルを処理するプロセスを完遂させる。これが、実務で使えるマクロの「粘り強さ」です。
4. 陥りやすい罠(ハマりポイント)
このマクロを使う際、初心者が必ずと言っていいほど躓くポイントが2つあります。
1. 保存先フォルダのパスの末尾
`savePath = “C:\Test”` と書くと、コンピュータは `C:\Testファイル名.pptx` という、`Test`という名前のファイルを作ろうとしてしまいます。必ず末尾に `\` を入れるか、コード内の対策(`Right(savePath, 1) <> “\”…`)を理解しておきましょう。
2. 作成者名の完全一致
`targetAuthor = “田中”` と指定しても、プロパティが `”田中 太郎”` であれば一致しません。VBAの文字列比較は非常に厳格です。スペースの有無、全角・半角の違いに注意してください。
最後に:君へのメッセージ
今回のコードは、決して複雑なものではありません。しかし、「ループ(繰り返し)」「条件分岐(If)」「オブジェクトのプロパティ(属性)」という、プログラミングの三大要素がすべて詰まっています。
この仕組みが理解できれば、次は「作成日」で仕分けしたり、「ファイルサイズ」で仕分けたりと、応用範囲は無限に広がります。
マクロの記録から卒業し、自分でロジックを組み立てる楽しさを知ってください。コードを書くことは、コンピュータに自分の意志を伝えること。一歩ずつ、着実に進んでいきましょう。
応援していますよ。
