【入門編】【初心者】開いている複数のプレゼンテーションから、指定した「作成者プロパティ」に一致するファイルだけを抽出し別名で一括保存する仕分けマクロ – PowerPoint VBA解析バイブル

スポンサーリンク
スポンサーリンク

【脱・マクロ記録】プロパティを読み解き、ファイルを自動仕分けする: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)」「オブジェクトのプロパティ(属性)」という、プログラミングの三大要素がすべて詰まっています。

この仕組みが理解できれば、次は「作成日」で仕分けしたり、「ファイルサイズ」で仕分けたりと、応用範囲は無限に広がります。

マクロの記録から卒業し、自分でロジックを組み立てる楽しさを知ってください。コードを書くことは、コンピュータに自分の意志を伝えること。一歩ずつ、着実に進んでいきましょう。

応援していますよ。

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