概要:なぜ「作成者」プロパティの管理が重要なのか
企業のIT管理やドキュメント統制において、Excelファイルの「作成者」プロパティは非常に重要なメタデータです。しかし、共有サーバーやクラウドストレージで運用されている大量のExcelファイル群において、作成者が個人の名前になっていたり、退職者の名前が残っていたりすることは珍しくありません。また、テンプレートから作成されたファイルが、意図せず特定の部署名で固定されているケースも多々あります。
手作業で一つひとつ「ファイル」タブの「情報」からプロパティを修正するのは、ファイル数が数千、数万単位となれば現実的ではありません。そこで活用すべきなのがExcel VBAによる自動化です。本記事では、指定したフォルダ内のExcelブックの「作成者」を一括で変更する技術と、その際の注意点を網羅的に解説します。
詳細解説:BuiltinDocumentPropertiesの活用
Excel VBAには、ブックのメタデータ(ドキュメントプロパティ)にアクセスするための「BuiltinDocumentProperties」コレクションが用意されています。このコレクションを使うことで、作成者(Author)だけでなく、タイトル、サブタイトル、作成日時、更新者などの情報をプログラムから操作可能です。
作成者を変更する際のポイントは、VBAの「BuiltinDocumentProperties(1)」(または “Author”)というプロパティに対して値を代入することです。ただし、単に代入するだけではエラーになる場合や、読み取り専用になっているケースも考慮する必要があります。また、Office 365以降の仕様では、セキュリティ設定やファイルの保存形式(xlsx, xlsm, xlsb等)によってプロパティの挙動が異なるため、適切なエラーハンドリングが不可欠です。
サンプルコード:指定フォルダ内の一括置換ツール
以下は、特定のフォルダを指定し、その中にあるすべてのExcelブックの「作成者」を指定した文字列に一括置換するVBAプロシージャです。
Option Explicit
' 参照設定: Microsoft Scripting Runtime を追加推奨
Sub BatchUpdateAuthor()
Dim fso As Object
Dim folderPath As String
Dim targetFolder As Object
Dim file As Object
Dim wb As Workbook
Dim newAuthor As String
' 変更後の作成者名を指定
newAuthor = "株式会社〇〇 業務管理部"
' フォルダ選択ダイアログ
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "作成者を変更したいフォルダを選択してください"
If .Show = -1 Then
folderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set targetFolder = fso.GetFolder(folderPath)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' フォルダ内の全ファイルをループ
For Each file In targetFolder.Files
If LCase(fso.GetExtensionName(file.Path)) Like "xls*" Then
On Error Resume Next
Set wb = Workbooks.Open(file.Path)
If Not wb Is Nothing Then
' 作成者プロパティの更新
wb.BuiltinDocumentProperties("Author").Value = newAuthor
wb.Close SaveChanges:=True
Set wb = Nothing
End If
On Error GoTo 0
End If
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "作成者の一括変更が完了しました。", vbInformation
End Sub
詳細解説:コードのポイントと注意点
上記のコードには、ベテランエンジニアとして押さえておきたい「安全装置」がいくつか組み込まれています。
1. Application.DisplayAlerts = False:ファイルを開く際に発生する可能性のある、「リンクの更新」や「読み取り専用」の確認ダイアログを抑制し、無人実行を可能にします。
2. On Error Resume Next:特定のファイルが破損していたり、パスワード保護がかかっていたりする場合に、マクロ全体が停止するのを防ぎます。実務では、エラーが発生したファイル名をログとしてテキストファイルに出力する処理を追加することをお勧めします。
3. 拡張子のフィルタリング:LCase関数とLike演算子を使用して、.xls, .xlsx, .xlsm, .xlsbなど、Excelに関連するすべてのファイル形式を網羅的に処理対象としています。
実務アドバイス:プロフェッショナルの現場で求められること
実際にこのツールを実務で使用する際は、以下の3点に注意してください。
まず「バックアップ」です。プロパティの書き換えといえども、ファイルを一度開いて保存する以上、データ破損のリスクはゼロではありません。必ず対象フォルダのコピーを作成したうえで実行してください。
次に「更新者との混同」です。Excelには「作成者」と「最終更新者」という2つのプロパティがあります。本稿のコードは「作成者」を対象としていますが、監査などの目的であれば「最終更新者」も合わせて一括更新したいという要望が出るはずです。その場合は、プロパティ名を “Last Author” に変更して同様の処理を行うコードを追加してください。
最後に「Gitやバージョン管理との親和性」です。作成者情報をプログラムで書き換えると、Gitなどのバージョン管理システムでは「ファイルの内容が変更された」とみなされ、差分管理が困難になります。チーム開発環境で導入する場合は、あらかじめインフラ担当者やチームリーダーと相談し、メタデータの書き換えが管理ルールに抵触しないか確認することが、無用なトラブルを避ける秘訣です。
まとめ
Excelの「作成者」プロパティの一括変更は、VBAを使用すれば非常に効率的に行える業務改善項目の一つです。今回紹介したコードをベースに、ログ出力機能や、特定のユーザー名のみを置換する条件分岐などを追加していくことで、より堅牢なツールへと進化させることが可能です。
VBAによるドキュメント管理の自動化は、単なる作業の効率化にとどまらず、社内のドキュメントガバナンス(統制)を強化する強力な武器となります。「手作業から自動化へ」というシフトチェンジは、皆さんの業務時間を大幅に短縮し、よりクリエイティブな仕事に時間を割くための第一歩となるはずです。ぜひ、ご自身の環境でテストを行い、効率的なファイル運用を実現してください。
