VAセキュリティ:変更履歴やコメントを削除(ワード/エクセルVBA)

サンプル

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

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

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

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

分かりました。エクセル用も作っておきましょう。いずれも、ごく簡単なコードで実現できそうです。

サンプルのダウンロード

インストール方法

Word版VBAアドインのインストール方法

Excel版VBAアドインのインストール方法

操作マニュアル

VA公用文シリーズ(統合版) 操作マニュアル

VAサーチシリーズ(統合版) 操作マニュアル

仕様(エクセル用)

1. プロジェクト概要

Excelブックに含まれる「個人の特定につながる情報(プロパティ)」や「コメント」などを一括で削除(サニタイズ)するVBAツール。

最大の特徴は、Windows版Excelの標準機能であるドキュメント検査機能に加え、同機能がサポートされていないMac版Excelに対しても独自の削除ロジックで互換性を持たせている点である。

2. ファイル構成

プロジェクトは以下のモジュールで構成すること。

モジュール名種類役割
basSanitize標準モジュールサニタイズ(情報削除)実行のメインロジックおよびOS判定
ThisWorkbookThisWorkbook更新履歴の保持およびブックのエントリポイント
Sheet1ドキュメント標準のワークシート(特段のコードなし)

3. モジュール詳細仕様

(1) basSanitize(標準モジュール)

本ツールの核となる処理。OS(Windows/Mac)による条件付きコンパイルを用いて処理を分岐させる。

プロシージャ: SanitizeWorkbookCompletely

  • 機能: ブック内のメタデータ、コメント、個人情報を削除する。
  • 処理フロー:
    1. 確認メッセージ表示:
      • 実行前に MsgBox でユーザーに確認を行う(「この操作は元に戻せません」等の警告)。
      • Macの場合: 「標準の検査機能がサポートされていないため、簡易削除を実行する」旨を伝える。
      • Windowsの場合: 「すべてのコメント、プロパティなどが完全に削除される」旨を伝える。
    2. 実行ガード: ユーザーが「いいえ」を選択した場合は処理を中止する。
    3. エラーハンドリング: On Error Resume Next を使用し、一部のシートが保護されている場合でも処理全体が止まらないようにする。
    4. サニタイズ実行(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” (会社名)
    5. 完了メッセージ: 処理終了後、完了した旨を MsgBox (vbInformation) で通知する。
    6. エラー処理復帰: 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. 機能要件詳細

  1. クロスプラットフォーム対応(条件付きコンパイル):
    • VBAのプリプロセッサ #If Mac Then を使用し、コンパイルエラーを防ぎつつOSに適したコードを実行すること。
    • Windowsでは標準機能をフル活用し、MacではVBAで可能な範囲のクリーニングを行うこと。
  2. 安全性(Undo不可の警告):
    • ドキュメント検査機能やプロパティ削除は「元に戻す(Undo)」が効かない操作であるため、必ず実行前に vbYesNo + vbExclamation アイコン付きのメッセージボックスでユーザーの意思確認を行うこと。
  3. 堅牢性:
    • ブック内に保護されたシートが存在する場合、コメント削除などでエラーが発生する可能性がある。これによって全体の処理が中断しないよう、エラーを無視(Resume Next)して可能な限り処理を続行する設計とすること。

5. UIデザイン

  • メッセージボックス:
    • 確認時:注意喚起アイコン(Exclamation)。
    • 完了時:情報アイコン(Information)。
  • リボン連携:
    • リボンから呼び出されることを想定し、コールバック関数を用意しておくこと。

コメント

  1. 管理人 より:

    コードの記述を適正化しました。(Ver101)

  2. 管理人 より:

    「制限事項」を追記しました。

  3. 管理人 より:

    プロジェクト名を追加しました。(Ver102)

  4. 管理人 より:

    リボンから起動するように変更しました。(Ver110)

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