【VBAリファレンス】VBA100本ノック82本目攻略:Excelブックの隠れた情報を引き出すドキュメントプロパティの完全習得術

スポンサーリンク

概要:ブックのメタデータが持つ可能性

Excelブックは単なるデータの集合体ではありません。作成者、作成日時、更新者、あるいは特定のキーワードやカテゴリなど、ファイルそのものに付随する「ドキュメントプロパティ」というメタデータが存在します。これらはGUI上の「ファイル」>「情報」から確認できるものですが、VBAを活用することで、これらの情報を一括抽出したり、特定の条件でフィルタリングしたりすることが可能になります。本稿では、VBA100本ノックの82本目にあたる「ブックのドキュメントプロパティの取得」というテーマを掘り下げ、実務におけるファイル管理の自動化技術を徹底解説します。

詳細解説:BuiltinDocumentPropertiesとCustomDocumentProperties

Excelのドキュメントプロパティには、大きく分けて「組み込みプロパティ(BuiltinDocumentProperties)」と「ユーザー設定プロパティ(CustomDocumentProperties)」の2種類が存在します。

組み込みプロパティとは、Excelがあらかじめ用意している「タイトル」「作成者」「最終更新者」「作成日時」などの定型的な情報です。これらはWorkbookオブジェクトのBuiltinDocumentPropertiesプロパティを通じてアクセスします。一方、ユーザー設定プロパティは、ユーザーが独自に定義した項目であり、CustomDocumentPropertiesプロパティを通じて操作します。

ここで注意すべき点は、組み込みプロパティにアクセスする際のインデックス指定です。名前で指定することも可能ですが、インデックス番号での指定はExcelのバージョンや言語設定によって挙動が不安定になることがあるため、可能な限り「プロパティ名(文字列)」をキーにしてアクセスすることを推奨します。また、プロパティが存在しない場合にエラーを発生させないためのエラーハンドリングも、実務レベルのコードには不可欠です。

サンプルコード:プロパティを一括抽出する堅牢な実装

以下のコードは、指定したフォルダ内のExcelブックを開き、主要な組み込みプロパティをワークシート上に一覧出力する実務的なサンプルです。


Sub GetDocumentProperties()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim strPath As String
    Dim strFile As String
    Dim i As Long
    
    ' 出力用シートの設定
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear
    ws.Range("A1:E1").Value = Array("ファイル名", "作成者", "作成日", "最終更新者", "最終保存日")
    
    ' フォルダパスの指定(適宜変更してください)
    strPath = "C:\TestFolder\"
    strFile = Dir(strPath & "*.xls*")
    
    i = 2
    Application.ScreenUpdating = False
    
    Do While strFile <> ""
        Set wb = Workbooks.Open(Filename:=strPath & strFile, ReadOnly:=True)
        
        With wb
            On Error Resume Next ' プロパティが存在しない場合に備える
            ws.Cells(i, 1).Value = .Name
            ws.Cells(i, 2).Value = .BuiltinDocumentProperties("Author")
            ws.Cells(i, 3).Value = .BuiltinDocumentProperties("Creation Date")
            ws.Cells(i, 4).Value = .BuiltinDocumentProperties("Last Author")
            ws.Cells(i, 5).Value = .BuiltinDocumentProperties("Last Save Time")
            On Error GoTo 0
            
            .Close SaveChanges:=False
        End With
        
        i = i + 1
        strFile = Dir()
    Loop
    
    Application.ScreenUpdating = True
    MsgBox "プロパティの抽出が完了しました。", vbInformation
End Sub

実務アドバイス:なぜメタデータ活用が重要なのか

実務においてドキュメントプロパティの取得が重要になる場面は、主に大規模なファイル管理と監査です。例えば、「誰が作成したファイルか」「いつ最後に更新されたのか」といった情報を整理することで、古い資料の棚卸しや、権限管理の不備を洗い出すことができます。

また、高度な活用事例として「カスタムプロパティ」の利用が挙げられます。プロジェクト管理表などで「進捗状況」や「承認ステータス」をブックのプロパティに埋め込んでおくことで、ファイルを開かずにExcel VBAからそれらのステータスを読み取り、ダッシュボードを作成することも可能です。これは、ファイル自体をデータベースのように扱う手法であり、非常に強力です。

ただし、注意点もあります。ドキュメントプロパティは「作成者」を偽装したり、意図的に空欄にしたりすることが容易です。セキュリティ要件が厳しい環境下では、これらのプロパティのみを信頼するのではなく、OSレベルのファイルシステム情報(FileSystemObjectを用いた作成日時や更新日時の取得)と併用することが、プロフェッショナルな設計というものです。

まとめ:VBAで「ファイルの中身」を可視化する

ドキュメントプロパティの取得は、一見すると地味な作業に思えるかもしれません。しかし、数百、数千というファイルを扱う実務現場において、この技術は強力な武器となります。Excelは単なる計算ツールではなく、情報管理のプラットフォームでもあります。

本稿で学んだBuiltinDocumentPropertiesとCustomDocumentPropertiesを使いこなすことで、皆さんの業務効率は確実に一段上のレベルへと引き上げられるはずです。特に今回紹介したようなループ処理と組み合わせて、フォルダ内のメタデータを抽出するコードは、そのままファイル整理の自動化ツールとして転用可能です。

プログラミングの本質は、繰り返し作業からの解放と、データの可視化にあります。ドキュメントプロパティという「隠れた情報」を制御することで、皆さんのExcelライフがよりスマートで、より強固なものになることを期待しています。ぜひ、自身の環境でコードを走らせ、眠っているメタデータを活用してみてください。

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