【入門編】Word VBAで『隠し文字』を操作する:非表示テキストの抽出と一括削除の自動化 – Word VBA解析バイブル

スポンサーリンク

Word VBAの真髄を掴む:隠し文字を操り、文書の「裏側」を完全制御する

こんにちは。自動化の世界へようこそ。
普段、何気なくWordを使っていると「見えているもの」だけがすべてだと思いがちですが、Wordの深淵には「隠し文字(Hidden属性)」という影の住人が潜んでいます。

機密情報の断片、編集用の備忘録、あるいは配布用文書に紛れ込んだ修正履歴…。これらは画面上では消えていても、データとしては確かにそこに存在し、あなたの意図しないタイミングで露見するリスクを孕んでいます。

今日は、マクロの記録を卒業したあなたが、Wordのオブジェクトモデルを自在に操り、この「隠し文字」を掌握するための極意を伝授します。

1. Wordオブジェクトモデルの「階層」を理解する

コードを書く前に、Wordの頭の中を覗いてみましょう。Word VBAは以下の階層構造で成り立っています。

  • Application: Wordそのもの。
  • Document: 開いている文書。
  • Range: 文書内の「場所」や「範囲」。文字の塊そのもの。

隠し文字を操作する際、最も重要なのがこのRangeオブジェクトです。Rangeは単なる場所指定ではありません。その範囲が持つ「フォント属性」を書き換えることで、文字の表示・非表示を制御できるのです。

2. 隠し文字を操作するための「心臓部」

隠し文字を制御するのは、`Font`オブジェクトの`Hidden`プロパティです。

  • `Range.Font.Hidden = True` : 隠す
  • `Range.Font.Hidden = False` : 表示する

シンプルですね。では、これを使って「隠し文字をすべて探し出し、削除する」ツールを作ってみましょう。

3. 実践:文書クリーニングツールのコード

以下のコードは、文書全体を走査し、隠し文字を特定して削除する実用的なスクリプトです。

Sub RemoveHiddenText()
Dim rng As Range
Set rng = ActiveDocument.Content

‘ 検索エンジン(Findオブジェクト)を操作して隠し文字を探索
With rng.Find
.ClearFormatting ‘ 検索条件の初期化(重要!)
.Font.Hidden = True ‘ 「隠し文字」を探すという設定
.Text = “” ‘ 文字列指定なし(属性だけで検索)
.Forward = True ‘ 文書の先頭から末尾へ
.Wrap = wdFindContinue ‘ 文書全体を対象にする

‘ 隠し文字が見つかる限り繰り返す
Do While .Execute
‘ 見つかった範囲(rng)を削除
rng.Delete
‘ 削除するとrngが縮小するため、Findの整合性を保つ工夫
Loop
End With

MsgBox “隠し文字のクリーニングが完了しました。”, vbInformation
End Sub

【ここがプロのポイント】

  • `.ClearFormatting`の重要性: これを怠ると、前回の検索条件が引き継がれ、意図せぬ動作を引き起こします。自動化において「状態をリセットする」ことは、バグを未然に防ぐ鉄則です。
  • `Do While .Execute`: Findオブジェクトは実行のたびに範囲を「見つかった場所」へ更新します。この一連の流れが、Word VBAにおける「検索と置換」の標準的なイディオムです。

4. 陥りやすい罠:なぜ「表示」と「削除」を分けるべきか

初心者がやりがちなミスは、「表示させてから削除しよう」として画面をチラつかせることです。

VBAの処理において、画面描画を伴う操作は極めて低速です。今回のように`rng.Delete`で直接削除すれば、画面更新を待たずに一瞬で処理が終わります。

また、隠し文字を「確認」したい場合は、以下のコードを試してください。

‘ 隠し文字をすべて表示状態にする(デバッグ用)
Sub ShowAllHiddenText()
ActiveDocument.Content.Font.Hidden = False
End Sub

5. 次のステップへ

ここをクリアしたあなたなら、もう「マクロの記録」に頼る必要はありません。

1. 特定のスタイルに隠し文字が含まれているかチェックする
2. PDF出力前に隠し文字が残っていないか自動チェックする

このような業務要件も、今回学んだ`Range`と`Find`の組み合わせで簡単に実装できます。

Word VBAは「文書という構造体をどう料理するか」というゲームです。隠し文字という「裏側のデータ」を制御できるようになったあなたは、既に脱・初心者への大きな一歩を踏み出しました。

何か疑問があれば、いつでも聞いてくださいね。あなたの自動化ライフを、心から応援しています。

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