Article

【Word VBA】文書内の蛍光ペン(ハイライト)を一括でクリアするマクロ

この記事で分かること

Word文書の蛍光ペンを一括クリアするVBAマクロを紹介します。本文だけでなくヘッダー・フッター・テキストボックスを含む全領域を確実にクリアする方法を、実機検証の結果とともに解説します。

Word 文書のレビューが終わったあと、蛍光ペン(ハイライト)を 1 つずつ手作業で消していませんか。VBA マクロを使えば、本文・ヘッダー・フッター・テキストボックスを含むすべての蛍光ペンをワンクリックで一括クリアできます。

この記事では、コピペで使える完成マクロと、「なぜ本文だけクリアしても消え残りが出るのか」の理由、色を指定した部分削除やフォルダ一括処理の応用マクロまで、実機検証の結果をもとに解説します。

この記事で使う蛍光ペン付きのテスト用文書をダウンロードできます。記事のコードを貼り付けてマクロの動作を確認できます。

マクロの完成コード

以下のコードをコピーして、次のセクションの手順で実行してください。本文・表・ヘッダー・フッター・テキストボックス・脚注を含む、文書内のすべての蛍光ペンを一括でクリアします。

Sub ClearAllHighlights()
    Dim sr As Range
    Dim st As Long

    For st = 1 To 11
        On Error Resume Next
        Set sr = ActiveDocument.StoryRanges(st)
        Do While Not sr Is Nothing
            sr.HighlightColorIndex = wdNoHighlight
            Set sr = sr.NextStoryRange
        Loop
        On Error GoTo 0
    Next st
End Sub

13 行のシンプルなマクロです。黄・赤・青・緑など、すべての色の蛍光ペンが一括でクリアされます。テキスト自体は削除されません。

この記事のポイント:よく紹介される ActiveDocument.Content.HighlightColorIndex = wdNoHighlight本文しかクリアしません。ヘッダー・フッター・テキストボックスの蛍光ペンが残ります。上のマクロは StoryRanges で全領域をループするため、消え残りが発生しません。

マクロの実行手順

Word で VBA マクロを実行する手順は次のとおりです。

  1. 蛍光ペンをクリアしたい Word ファイルを開く
  2. Alt + F11 キーを押して VBE(Visual Basic Editor)を開く
  3. メニューの「挿入」→「標準モジュール」をクリック
  4. 表示されたコードウィンドウに、上のコードを貼り付ける
  5. F5 キーを押す、またはメニューの「実行」→「Sub/ユーザーフォームの実行」をクリック
VBEでClearAllHighlightsマクロを貼り付けた画面

左側のプロジェクトツリーで Module1 が選択されていることを確認してから実行してください。

実行前後の比較

実行前:本文とヘッダーに蛍光ペンが適用されています。

マクロ実行前:本文にさまざまな色の蛍光ペンが適用されている文書
ヘッダー領域に赤い蛍光ペンが適用されている

実行後:本文もヘッダーも、すべての蛍光ペンがクリアされました。

マクロ実行後:すべての蛍光ペンがクリアされた文書
ヘッダー領域の蛍光ペンもクリアされた状態

マクロ実行前に、ファイルのバックアップを取っておいてください。Ctrl + Z(元に戻す)で復元できる場合もありますが、VBA マクロによる変更は Undo の挙動が安定しないため、確実には戻せません。

コードの解説

なぜ StoryRanges でループするのか

このマクロの最大のポイントは、StoryRanges(1) から StoryRanges(11) まですべてのストーリーをループしている点です。

Word 文書は、表面上は 1 つの文書に見えますが、内部的には「ストーリー」という単位に分かれています。本文、ヘッダー、フッター、テキストボックス、脚注、文末脚注はそれぞれ別のストーリーです。

ActiveDocument.Content は本文ストーリーしか返しません。そのため、単純に ActiveDocument.Content.HighlightColorIndex = wdNoHighlight と書くと、本文と表の蛍光ペンは消えますが、ヘッダー・フッター・テキストボックスの蛍光ペンは残ります。

実機で検証した結果をまとめると、次のとおりです。

方法本文表内ヘッダーフッターテキストボックス脚注
ActiveDocument.Content でクリアOKOK残る残る残る残る
Selection.WholeStory + クリアOKOK残る残る残る残る
GUI(Ctrl+A → クリア)OKOK残る残る残る残る
StoryRanges ループ(この記事のマクロ)OKOKOKOKOKOK

すべての領域をクリアできるのは StoryRanges ループだけです。社外送付前の文書クリーンアップなど、消し残しが許されない場面ではこのマクロが最も確実です。

StoryRanges のストーリータイプ

StoryRanges のインデックス 1〜11 は、Word の各領域に対応しています。

インデックス定数名領域
1wdMainTextStory本文(表を含む)
2wdFootnotesStory脚注
3wdEndnotesStory文末脚注
4wdCommentsStoryコメント
5wdTextFrameStoryテキストボックス
6wdEvenPagesHeaderStory偶数ページヘッダー
7wdPrimaryHeaderStory奇数ページヘッダー
8wdEvenPagesFooterStory偶数ページフッター
9wdPrimaryFooterStory奇数ページフッター
10wdFirstPageHeaderStory先頭ページヘッダー
11wdFirstPageFooterStory先頭ページフッター

文書によっては脚注やテキストボックスが存在しないこともあるため、On Error Resume Next で存在しないストーリーをスキップしています。

NextStoryRange の役割

セクション区切りが入った文書では、ヘッダー・フッターがセクションごとに存在します。StoryRanges(7) はセクション 1 のヘッダーだけを返すため、NextStoryRange で後続セクションのヘッダーをたどる必要があります。

内側の Do While Not sr Is Nothing ループが NextStoryRange をたどり、すべてのセクションの同種ストーリーを漏れなく処理します。

主要なコードの意味

コード意味
For st = 1 To 11全 11 種類のストーリータイプをループする
On Error Resume Next存在しないストーリー(脚注なしの文書など)をスキップする
Set sr = ActiveDocument.StoryRanges(st)該当ストーリータイプの最初のセクションを取得する
sr.HighlightColorIndex = wdNoHighlight範囲内のすべての蛍光ペンをクリアする
Set sr = sr.NextStoryRange次のセクションの同種ストーリーへ移動する
On Error GoTo 0エラー処理を通常モードに戻す

応用マクロ

本文だけをクリアする(シンプル版)

ヘッダーやフッターに蛍光ペンがないことが分かっている場合は、1 行で本文の蛍光ペンをクリアできます。

Sub ClearBodyHighlights()
    ActiveDocument.Content.HighlightColorIndex = wdNoHighlight
End Sub

注意:本文と表の蛍光ペンのみが対象です。ヘッダー・フッター・テキストボックスの蛍光ペンは残ります。確実に全箇所をクリアしたい場合は、完成コードの StoryRanges ループ版を使ってください。

特定の色だけをクリアする

複数色の蛍光ペンが混在していて、特定の色だけ消したい場合は、書式検索で対象色のハイライト箇所を見つけてからクリアします。

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

    With rng.Find
        .ClearFormatting
        .Text = ""
        .Highlight = True
        .Format = True
        .Forward = True
        .Wrap = wdFindStop
        Do While .Execute
            If rng.HighlightColorIndex = wdYellow Then
                rng.HighlightColorIndex = wdNoHighlight
            End If
            rng.Collapse wdCollapseEnd
        Loop
    End With
End Sub

wdYellow を他の色定数(wdBrightGreenwdTurquoisewdPink など)に変えれば、任意の色だけをクリアできます。書式だけで検索する場合は .Text = "".Format = True の 2 つが必要です。

補足:このマクロは本文のみが対象です。ヘッダー・フッターを含めたい場合は、完成コードの StoryRanges ループ内に同じ Find ロジックを組み込んでください。

フォルダ内の全文書を一括処理する

複数の Word ファイルをまとめてクリアしたい場合は、Dir 関数でフォルダ内のファイルを順に開いて処理します。

Sub ClearHighlightsInFolder()
    Dim folderPath As String
    Dim fileName As String
    Dim doc As Document
    Dim sr As Range
    Dim st As Long

    folderPath = "C:\Users\YourName\Documents\Reports\"    '← フォルダパスを書き換える
    fileName = Dir(folderPath & "*.docx")

    Do While fileName <> ""
        Set doc = Documents.Open(folderPath & fileName)

        For st = 1 To 11
            On Error Resume Next
            Set sr = doc.StoryRanges(st)
            Do While Not sr Is Nothing
                sr.HighlightColorIndex = wdNoHighlight
                Set sr = sr.NextStoryRange
            Loop
            On Error GoTo 0
        Next st

        doc.Save
        doc.Close
        fileName = Dir()
    Loop
End Sub

folderPath を処理したいフォルダのパスに書き換えてください。末尾の \ を忘れないように注意してください。

注意点が 2 つあります。

  • 上書き保存されます:元のファイルが書き換わるため、事前にフォルダごとバックアップしてください
  • .docx のみ対象:.docm(マクロ有効文書)や .doc(旧形式)も処理したい場合は、Dir のワイルドカードを "*.doc*" に変更してください

VBA を使わない方法(GUI)

VBA に抵抗がある場合は、GUI 操作でも本文の蛍光ペンをクリアできます。

  1. Ctrl + A で本文を全選択する
  2. 「ホーム」タブの「蛍光ペンの色」ボタンの右の をクリック
  3. 「色なし」を選択する
Ctrl+Aで本文を全選択した状態。ヘッダー領域は選択されていない
Ctrl+A の選択範囲は本文のみ。ヘッダー(赤い蛍光ペン)は選択されていない

これで本文と表の蛍光ペンがクリアされます。

GUI の制限:この方法ではヘッダー・フッター・テキストボックスの蛍光ペンはクリアされません。全選択(Ctrl+A)は本文だけが対象です。

GUI操作後もヘッダーの赤い蛍光ペンが残っている

上の画像は、Ctrl + A → 蛍光ペン「色なし」の操作後の状態です。本文の蛍光ペンは消えていますが、ヘッダーの赤い蛍光ペンがそのまま残っています。

ヘッダー・フッターを含めて完全にクリアしたい場合は、この記事の完成コード(StoryRanges ループ版マクロ)を使ってください。

うまく動かないときの確認ポイント

症状原因対処法
マクロ実行後もヘッダー・フッターに蛍光ペンが残るActiveDocument.Content だけで処理しているこの記事の完成コード(StoryRanges ループ版)を使う
実行時エラー(アクセスが拒否されました)文書が保護されている「校閲」タブ →「保護の中止」で保護を解除してから実行する
Font.ResetClearFormatting で消えない蛍光ペンは Range のプロパティであり、Font のプロパティではないHighlightColorIndex = wdNoHighlight を使う
変更履歴に蛍光ペン削除が記録される変更履歴の記録がオンになっている「校閲」タブ →「変更履歴の記録」をオフにしてから実行する
テキストボックス内の蛍光ペンが残るActiveDocument.Content はテキストボックスを含まないStoryRanges ループ版を使う(インデックス 5 がテキストボックス)

蛍光ペンと文字色の違い

よくある間違いとして、蛍光ペンを「フォントの背景色」と混同するケースがあります。

項目蛍光ペン(Highlight)文字の網かけ(Shading)
VBA プロパティRange.HighlightColorIndexRange.Font.Shading.BackgroundPatternColor
クリア方法wdNoHighlightwdColorAutomatic
UI の場所ホーム → 蛍光ペンの色ホーム → 文字の網かけ
印刷時の表示常に表示常に表示

このマクロでクリアしても色付きの背景が残る場合は、「蛍光ペン」ではなく「文字の網かけ」が適用されている可能性があります。その場合は Range.Font.Shading.BackgroundPatternColor = wdColorAutomatic で別途クリアしてください。

まとめ

  • 文書内のすべての蛍光ペンを一括クリアするには、StoryRanges ループのマクロが最も確実
  • ActiveDocument.Content は本文と表のみが対象。ヘッダー・フッター・テキストボックス・脚注の蛍光ペンは残る
  • GUI 操作(Ctrl + A →「色なし」)も本文のみが対象で、同じ制限がある
  • 特定の色だけをクリアしたい場合は Find + HighlightColorIndex で絞り込む
  • 蛍光ペンは Range のプロパティなので、Font.ResetClearFormatting では消えない
  • 保護された文書では実行時エラーになるため、先に保護を解除する
  • 実行前にバックアップを取っておくと安心(Ctrl+Z で戻せない場合がある)

Word VBA の関連記事:

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント