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 Sub13 行のシンプルなマクロです。黄・赤・青・緑など、すべての色の蛍光ペンが一括でクリアされます。テキスト自体は削除されません。
この記事のポイント:よく紹介される ActiveDocument.Content.HighlightColorIndex = wdNoHighlight は本文しかクリアしません。ヘッダー・フッター・テキストボックスの蛍光ペンが残ります。上のマクロは StoryRanges で全領域をループするため、消え残りが発生しません。
マクロの実行手順
Word で VBA マクロを実行する手順は次のとおりです。
- 蛍光ペンをクリアしたい Word ファイルを開く
- Alt + F11 キーを押して VBE(Visual Basic Editor)を開く
- メニューの「挿入」→「標準モジュール」をクリック
- 表示されたコードウィンドウに、上のコードを貼り付ける
- F5 キーを押す、またはメニューの「実行」→「Sub/ユーザーフォームの実行」をクリック

左側のプロジェクトツリーで Module1 が選択されていることを確認してから実行してください。
実行前後の比較
実行前:本文とヘッダーに蛍光ペンが適用されています。


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


マクロ実行前に、ファイルのバックアップを取っておいてください。Ctrl + Z(元に戻す)で復元できる場合もありますが、VBA マクロによる変更は Undo の挙動が安定しないため、確実には戻せません。
コードの解説
なぜ StoryRanges でループするのか
このマクロの最大のポイントは、StoryRanges(1) から StoryRanges(11) まですべてのストーリーをループしている点です。
Word 文書は、表面上は 1 つの文書に見えますが、内部的には「ストーリー」という単位に分かれています。本文、ヘッダー、フッター、テキストボックス、脚注、文末脚注はそれぞれ別のストーリーです。
ActiveDocument.Content は本文ストーリーしか返しません。そのため、単純に ActiveDocument.Content.HighlightColorIndex = wdNoHighlight と書くと、本文と表の蛍光ペンは消えますが、ヘッダー・フッター・テキストボックスの蛍光ペンは残ります。
実機で検証した結果をまとめると、次のとおりです。
| 方法 | 本文 | 表内 | ヘッダー | フッター | テキストボックス | 脚注 |
|---|---|---|---|---|---|---|
ActiveDocument.Content でクリア | OK | OK | 残る | 残る | 残る | 残る |
Selection.WholeStory + クリア | OK | OK | 残る | 残る | 残る | 残る |
| GUI(Ctrl+A → クリア) | OK | OK | 残る | 残る | 残る | 残る |
| StoryRanges ループ(この記事のマクロ) | OK | OK | OK | OK | OK | OK |
すべての領域をクリアできるのは StoryRanges ループだけです。社外送付前の文書クリーンアップなど、消し残しが許されない場面ではこのマクロが最も確実です。
StoryRanges のストーリータイプ
StoryRanges のインデックス 1〜11 は、Word の各領域に対応しています。
| インデックス | 定数名 | 領域 |
|---|---|---|
| 1 | wdMainTextStory | 本文(表を含む) |
| 2 | wdFootnotesStory | 脚注 |
| 3 | wdEndnotesStory | 文末脚注 |
| 4 | wdCommentsStory | コメント |
| 5 | wdTextFrameStory | テキストボックス |
| 6 | wdEvenPagesHeaderStory | 偶数ページヘッダー |
| 7 | wdPrimaryHeaderStory | 奇数ページヘッダー |
| 8 | wdEvenPagesFooterStory | 偶数ページフッター |
| 9 | wdPrimaryFooterStory | 奇数ページフッター |
| 10 | wdFirstPageHeaderStory | 先頭ページヘッダー |
| 11 | wdFirstPageFooterStory | 先頭ページフッター |
文書によっては脚注やテキストボックスが存在しないこともあるため、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 SubwdYellow を他の色定数(wdBrightGreen、wdTurquoise、wdPink など)に変えれば、任意の色だけをクリアできます。書式だけで検索する場合は .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 SubfolderPath を処理したいフォルダのパスに書き換えてください。末尾の \ を忘れないように注意してください。
注意点が 2 つあります。
- 上書き保存されます:元のファイルが書き換わるため、事前にフォルダごとバックアップしてください
- .docx のみ対象:
.docm(マクロ有効文書)や.doc(旧形式)も処理したい場合は、Dirのワイルドカードを"*.doc*"に変更してください
VBA を使わない方法(GUI)
VBA に抵抗がある場合は、GUI 操作でも本文の蛍光ペンをクリアできます。
- Ctrl + A で本文を全選択する
- 「ホーム」タブの「蛍光ペンの色」ボタンの右の
▼をクリック - 「色なし」を選択する

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

上の画像は、Ctrl + A → 蛍光ペン「色なし」の操作後の状態です。本文の蛍光ペンは消えていますが、ヘッダーの赤い蛍光ペンがそのまま残っています。
ヘッダー・フッターを含めて完全にクリアしたい場合は、この記事の完成コード(StoryRanges ループ版マクロ)を使ってください。
うまく動かないときの確認ポイント
| 症状 | 原因 | 対処法 |
|---|---|---|
| マクロ実行後もヘッダー・フッターに蛍光ペンが残る | ActiveDocument.Content だけで処理している | この記事の完成コード(StoryRanges ループ版)を使う |
| 実行時エラー(アクセスが拒否されました) | 文書が保護されている | 「校閲」タブ →「保護の中止」で保護を解除してから実行する |
Font.Reset や ClearFormatting で消えない | 蛍光ペンは Range のプロパティであり、Font のプロパティではない | HighlightColorIndex = wdNoHighlight を使う |
| 変更履歴に蛍光ペン削除が記録される | 変更履歴の記録がオンになっている | 「校閲」タブ →「変更履歴の記録」をオフにしてから実行する |
| テキストボックス内の蛍光ペンが残る | ActiveDocument.Content はテキストボックスを含まない | StoryRanges ループ版を使う(インデックス 5 がテキストボックス) |
蛍光ペンと文字色の違い
よくある間違いとして、蛍光ペンを「フォントの背景色」と混同するケースがあります。
| 項目 | 蛍光ペン(Highlight) | 文字の網かけ(Shading) |
|---|---|---|
| VBA プロパティ | Range.HighlightColorIndex | Range.Font.Shading.BackgroundPatternColor |
| クリア方法 | wdNoHighlight | wdColorAutomatic |
| UI の場所 | ホーム → 蛍光ペンの色 | ホーム → 文字の網かけ |
| 印刷時の表示 | 常に表示 | 常に表示 |
このマクロでクリアしても色付きの背景が残る場合は、「蛍光ペン」ではなく「文字の網かけ」が適用されている可能性があります。その場合は Range.Font.Shading.BackgroundPatternColor = wdColorAutomatic で別途クリアしてください。
まとめ
- 文書内のすべての蛍光ペンを一括クリアするには、
StoryRangesループのマクロが最も確実 ActiveDocument.Contentは本文と表のみが対象。ヘッダー・フッター・テキストボックス・脚注の蛍光ペンは残る- GUI 操作(Ctrl + A →「色なし」)も本文のみが対象で、同じ制限がある
- 特定の色だけをクリアしたい場合は
Find+HighlightColorIndexで絞り込む - 蛍光ペンは Range のプロパティなので、
Font.ResetやClearFormattingでは消えない - 保護された文書では実行時エラーになるため、先に保護を解除する
- 実行前にバックアップを取っておくと安心(Ctrl+Z で戻せない場合がある)
Word VBA の関連記事:
- 特定キーワードを蛍光ペンで一括ハイライトするマクロ — 蛍光ペンを「付ける」方向のマクロはこちら
- 文書内のハイパーリンクを一括で削除するマクロ — StoryRanges + NextStoryRange の応用例
- 変更履歴とコメントを確実に削除する方法 — 社外送付前のもうひとつの定番処理
コメント