Excelブックの個人情報は勝手に保存される
エクスプローラでExcelブックのプロパティを見ると、プロパティダイアログの詳細タブでブック自体の情報を見ることが可能です。
ここで保存されている内容は、勝手に書き込まれるものと自分で更新しない限り変わらないものの2通りがあります。
自分しか使わないブックであれば気にする必要はありませんが、他者、特に別会社などに資料として送付する場合にはブックのプロパティから個人情報や機密情報が漏えいする恐れがあります。
ファイル保存時にプロパティの個人情報を削除する設定
そもそも個人情報を書き込まなければいいので、そのような設定にしておくのは重要です。
ファイルタブ→Excelのオプション、でExcelのオプションダイアログを表示し、セキュリティセンターボタン→セキュリティセンターの設定→プライバシーオプション→「ファイルを保存するときにファイルのプロパティから個人情報を削除する」にチェックを付けると、ファイル保存時に個人情報は削除されます。
ただ、このような設定をしていても、それ以前に作成したブックや過去資料を流用している場合などで個人情報が残っている場合があります。
そこで、ブックに保存されている個人情報などの文書プロパティを全て削除するコードを紹介します。
構文
Workbook.RemoveDocumentInformation(RemoveDocInfoType As XlRemoveDocInfoType)
ワークブックの個人情報の削除はWorkbookオブジェクトのRemoveDocumentInformationメソッドで行います。戻り値はありません。
引数には以下のXlRemoveDocInfoType列挙型を指定します。削除で使う定数はほとんどの場合xlRDIDocumentPropertiesでOKです。
定数 | 値 | 内容 |
---|---|---|
xlRDIAll | 99 (&H63) | 全て |
xlRDIComments | 1 | コメント |
xlRDIContentType | 16 (&H10) | コンテンツタイプ |
xlRDIDefinedNameComments | 18 (&H12) | 定義済みの名前のコメント |
xlRDIDocumentManagementPolicy | 15 | 文書管理ポリシー |
xlRDIDocumentProperties | 8 | 文書プロパティ |
xlRDIDocumentServerProperties | 14 | サーバプロパティ |
xlRDIDocumentWorkspace | 10 | ワークスペース |
xlRDIEmailHeader | 5 | メールヘッダ |
xlRDIInactiveDataConnections | 19 (&H13) | 無効なデータ接続 |
xlRDIInkAnnotations | 11 | インク注釈 |
xlRDIPrinterPath | 20 (&H14) | プリンタパス |
xlRDIPublishInfo | 13 | 発行情報データ |
xlRDIRemovePersonalInformation | 4 | 個人情報削除 |
xlRDIRoutingSlip | 6 | 回覧先 |
xlRDIScenarioComments | 12 | シナリオコメント |
xlRDISendForReview | 7 | 校閲者送信情報 |
ブックの個人情報を削除するマクロ
以下の関数は引数で指定されたフルパスのExcelブックから個人情報などの文書プロパティを削除します。削除後に保存をしないと反映されないためSaveメソッドで保存しています。
ブックが存在しない場合などでエラーが発生することも考えられるため、エラー処理を入れています。また、確認ダイアログが出る場合があるため確認ダイアログの表示を抑制しています。
なお、ブックの共有が設定されている場合は「エラー1004 このドキュメントは署名されている、保護されている、共有されている、または読み取り専用に設定されているため、PII を削除できません。」というエラーが発生し、個人情報の削除は出来ません。
VBAでブックの共有が設定されているかどうかを判定して解除することは可能ですが、本当に解除してよいかどうかはブックの利用状況によって異なるためここでは実装していません。
処理の内容はコードのコメントの通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Sub DelDocumentProperties(a_sBookPath As String) On Error GoTo ERR_LABEL Dim wb As Workbook '// Excelブック '// ブックを開く Set wb = Workbooks.Open(a_sBookPath) '// ダイアログを非表示 Application.DisplayAlerts = False '// 個人情報の削除を許可する wb.RemovePersonalInformation = True '// 個人情報を削除 Call wb.RemoveDocumentInformation(xlRDIDocumentProperties) '// 保存 Call wb.Save '// ブックを閉じる Call wb.Close '// ダイアログを表示(しなくてもいいけど) Application.DisplayAlerts = True Exit Sub ERR_LABEL: If (Err.Number <> 0) Then Debug.Print Err.Number & " " & Err.Description End If '// ブックを閉じる Call wb.Close End Sub |
以下は上のDelPersonalInfo関数の使用例です。引数に対象ブックのパスを渡します。
実行後、対象ブックの個人情報などの文書プロパティが削除されます。
1 2 3 |
Sub DelDocumentPropertiesTest() Call DelDocumentProperties("V:\test\a.xlsx") End Sub |