Excelファイルの「プロパティ」には、作成者、タイトル、件名、作成日時といった、ファイルに関する付帯情報(メタデータ)が保存されています。これらの情報は、ファイル
> 情報
の画面で確認できますが、VBAを使えばプログラムで自動的に読み取ったり、書き換えたりすることが可能です。
この記事では、VBAでブックの組み込みドキュメントプロパティを操作する方法を、「読み取り」と「書き込み」に分けて解説します。
ブックのプロパティを読み取る
まずは、ブックに保存されている既存のプロパティ情報を取得する方法です。作成日時や最終更新者などをログとして記録したい場合に便利です。
完成したVBAコード
Sub ReadDocumentProperties()
' 変数を宣言します
Dim targetBook As Workbook
Dim message As String
' このマクロが書かれているブックを操作対象とする
Set targetBook = ThisWorkbook
' WithブロックでBuiltinDocumentPropertiesをまとめて扱います
With targetBook.BuiltinDocumentProperties
' 各プロパティの値を読み取ります
message = "【ブックのプロパティ情報】" & vbCrLf & vbCrLf & _
"タイトル: " & .Item("Title").Value & vbCrLf & _
"件名: " & .Item("Subject").Value & vbCrLf & _
"作成者: " & .Item("Author").Value & vbCrLf & _
"作成日時: " & .Item("Creation Date").Value & vbCrLf & _
"最終保存日時: " & .Item("Last Save Time").Value
End With
MsgBox message, vbInformation, "プロパティの読み取り"
End Sub
コードのポイント解説
ブックのプロパティは、Workbook
オブジェクトのBuiltinDocumentProperties
コレクションに格納されています。
.Item("プロパティ名").Value
という構文で、特定のプロパティの値を取得できます。ここで最も重要なのは、日本語版のExcelを使っていても、プロパティ名は英語で指定する必要があるという点です。(例:「作成者」→"Author"
)
▼ 主な読み取り可能なプロパティ名
Title
(タイトル)Subject
(件名)Author
(作成者)Keywords
(キーワード)Comments
(コメント)Creation Date
(作成日時)Last Author
(最終更新者)Last Save Time
(最終保存日時)
ブックのプロパティを設定(書き込み)する
次に、VBAからブックのプロパティに情報を書き込む方法です。マクロで生成したレポートの作成者を自動で設定する、といった用途に利用できます。
完成したVBAコード
Sub WriteDocumentProperties()
' 変数を宣言します
Dim targetBook As Workbook
Set targetBook = ThisWorkbook
' WithブロックでBuiltinDocumentPropertiesをまとめて扱います
With targetBook.BuiltinDocumentProperties
' 書き込み可能なプロパティに値を設定
.Item("Title").Value = "月次売上レポート"
.Item("Subject").Value = "VBAによる自動生成"
.Item("Author").Value = "営業部 自動化マクロ"
.Item("Comments").Value = "このファイルは " & Now() & " にマクロで自動生成されました。"
End With
' プロパティの変更を反映させるには、ブックの保存が必要です
If targetBook.Saved = False Then
' targetBook.Save '必要に応じて保存
End If
MsgBox "ブックのプロパティを設定しました。「ファイル」>「情報」で確認してください。", vbInformation
End Sub
コードのポイント解説
プロパティの値を設定(書き込み)する場合も、読み取りと同じ構文を使います。 .Item("プロパティ名").Value = "設定したい値"
✓ 注意点
- 「作成日時」(
Creation Date
)や「最終保存日時」(Last Save Time
)のように、一部のプロパティは読み取り専用であり、値を書き込もうとするとエラーになります。 - VBAでプロパティ値を変更した後、ブックを保存するまで、その変更はファイルに反映されません。
まとめ
ブックのプロパティ操作は、BuiltinDocumentProperties
コレクションを介して行います。
- プロパティの読み取り:
myValue = myBook.BuiltinDocumentProperties.Item("PropertyName").Value
- プロパティの書き込み:
myBook.BuiltinDocumentProperties.Item("PropertyName").Value = "NewValue"
重要なのは、プロパティ名は必ず英語で指定するというルールです。
ファイルのプロパティをVBAで管理することで、ファイルの検索性が向上したり、マクロで生成したレポートの出自を明確にしたりと、ドキュメント管理の質を高めることができます。