
mintsでワードの文書ファイルを提出する場合がありますが、変更履歴やコメントの削除はできていますか?

もちろんです。ただし、その操作を行うためのメニューが深いところにあって、いちいち確認を求められるのが面倒ですね。

法律事務所では、何よりもセキュリティが大事ですから、簡単にすべての情報を削除できるツールを作りましょう。

ありがとうございます。ついでに「蛍光ペン」も削除してもらえると便利です。

分かりました。エクセル用も作っておきましょう。いずれも、ごく簡単なコードで実現できそうです。
サンプルのダウンロード
インストール方法
操作マニュアル
仕様(エクセル用)
1. プロジェクト概要
Excelブックに含まれる「個人の特定につながる情報(プロパティ)」や「コメント」などを一括で削除(サニタイズ)するVBAツール。
最大の特徴は、Windows版Excelの標準機能であるドキュメント検査機能に加え、同機能がサポートされていないMac版Excelに対しても独自の削除ロジックで互換性を持たせている点である。
2. ファイル構成
プロジェクトは以下のモジュールで構成すること。
| モジュール名 | 種類 | 役割 |
| basSanitize | 標準モジュール | サニタイズ(情報削除)実行のメインロジックおよびOS判定 |
| ThisWorkbook | ThisWorkbook | 更新履歴の保持およびブックのエントリポイント |
| Sheet1 | ドキュメント | 標準のワークシート(特段のコードなし) |
3. モジュール詳細仕様
(1) basSanitize(標準モジュール)
本ツールの核となる処理。OS(Windows/Mac)による条件付きコンパイルを用いて処理を分岐させる。
プロシージャ: SanitizeWorkbookCompletely
- 機能: ブック内のメタデータ、コメント、個人情報を削除する。
- 処理フロー:
- 確認メッセージ表示:
- 実行前に
MsgBoxでユーザーに確認を行う(「この操作は元に戻せません」等の警告)。 - Macの場合: 「標準の検査機能がサポートされていないため、簡易削除を実行する」旨を伝える。
- Windowsの場合: 「すべてのコメント、プロパティなどが完全に削除される」旨を伝える。
- 実行前に
- 実行ガード: ユーザーが「いいえ」を選択した場合は処理を中止する。
- エラーハンドリング:
On Error Resume Nextを使用し、一部のシートが保護されている場合でも処理全体が止まらないようにする。 - サニタイズ実行(OS分岐):
- Windows環境 (
#If Mac Then ... #Elseの Else側):ActiveWorkbook.RemoveDocumentInformationメソッドを使用する。- 引数には
99(定数xlRDIAll相当) を指定し、全ての情報を削除対象とする。
- Mac環境 (
#If Mac Then側):RemoveDocumentInformationが使用できないため、以下の代替処理をコードで記述する。- 全シートのコメント削除:
For Eachで全ワークシートを巡回し、ws.Cells.ClearCommentsを実行。 - プロパティ削除:
ActiveWorkbook.BuiltinDocumentPropertiesの以下の項目を空文字""で上書きする。- “Author” (作成者)
- “Last Author” (更新者)
- “Company” (会社名)
- Windows環境 (
- 完了メッセージ: 処理終了後、完了した旨を
MsgBox(vbInformation) で通知する。 - エラー処理復帰:
On Error GoTo 0でハンドリングを戻す。
- 確認メッセージ表示:
プロシージャ: SanitizeWorkbookFromRibbon(Optional control As IRibbonControl)
- 機能: リボンUIのボタンから呼び出すためのコールバック用ラッパー。
- 引数:
IRibbonControl型(遅延バインディングまたは参照設定不要な形が望ましいが、型宣言ありでも可)を Optional で受け取る。 - 動作: 内部で
SanitizeWorkbookCompletelyを呼び出すのみとする。
(2) ThisWorkbook
- コメントとして以下の情報を含める。
- ツール名:「VAセキュリティ」
- 参照URL:
https://vba-assets.net/sanitize-document-completely/ - 著作権表記:2020-2025 VBA アセット
- 更新履歴:
- 2026/01/03: 初版(Word版からの改修)
- 2026/01/23: リボン対応
- 2026/02/07: Mac互換性対応(簡易サニタイズ機能追加)
4. 機能要件詳細
- クロスプラットフォーム対応(条件付きコンパイル):
- VBAのプリプロセッサ
#If Mac Thenを使用し、コンパイルエラーを防ぎつつOSに適したコードを実行すること。 - Windowsでは標準機能をフル活用し、MacではVBAで可能な範囲のクリーニングを行うこと。
- VBAのプリプロセッサ
- 安全性(Undo不可の警告):
- ドキュメント検査機能やプロパティ削除は「元に戻す(Undo)」が効かない操作であるため、必ず実行前に
vbYesNo + vbExclamationアイコン付きのメッセージボックスでユーザーの意思確認を行うこと。
- ドキュメント検査機能やプロパティ削除は「元に戻す(Undo)」が効かない操作であるため、必ず実行前に
- 堅牢性:
- ブック内に保護されたシートが存在する場合、コメント削除などでエラーが発生する可能性がある。これによって全体の処理が中断しないよう、エラーを無視(Resume Next)して可能な限り処理を続行する設計とすること。
5. UIデザイン
- メッセージボックス:
- 確認時:注意喚起アイコン(Exclamation)。
- 完了時:情報アイコン(Information)。
- リボン連携:
- リボンから呼び出されることを想定し、コールバック関数を用意しておくこと。

コメント
コードの記述を適正化しました。(Ver101)
「制限事項」を追記しました。
プロジェクト名を追加しました。(Ver102)
リボンから起動するように変更しました。(Ver110)