【入門編】【中級者向け】段落の「背景色(網掛け)」を条件付きで適用するヒートマップ作成マクロ – Word VBA解析バイブル

スポンサーリンク

こんにちは! Word VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだかよく分からないけれど自動で動いた!」という感動を味わった次は、「自分の思い通りに文書をコントロールしたい」というステップに進む時期ですね。

今回は、業務効率化の現場で一歩先を行くエンジニアたちがこっそり使っている、段落の「背景色(網掛け)」を条件付きで動的にコントロールするヒートマップ作成マクロを解説します。

「文字の色を変えるだけなら知っているけれど、段落全体を彩る網掛けってどうやるの?」
「条件分岐を使って、重要度ごとに色を自動で塗り分けたい!」

そんな疑問をクリアすれば、あなたのWord VBAのスキルは間違いなく中級者の域に達します。さあ、一緒に本質を学んでいきましょう!

1. なぜ「網掛け」なのか?文書の可読性を極限まで高めるアプローチ

ビジネス文書やマニュアル、仕様書をレビューしているとき、「どこが重要で、どこが修正対象なのか」を一目で把握したいと思ったことはありませんか?

文字の色(Font.Color)を変えるアプローチは一般的ですが、行単位・段落単位で視線を誘導するには「網掛け(Shading)」を使うのが最も効果的です。Excelの条件付き書式のように、Wordの段落に対しても重要度(フラグやキーワード)に応じた背景色を自動で適用できたら……。それを叶えるのが今回のテーマです。

Word VBAにおける「網掛け」の正体

Excel VBAであれば `Interior.Color` で一発ですが、Word VBAのオブジェクトモデルは少し独特です。
段落(Paragraph)の背景色を設定するには、段落そのものではなく、その内包する `Shading` オブジェクト にアクセスする必要があります。

ここを知っているだけでも、「おっ、Word VBAを分かっているな」と周囲から一目置かれるポイントになりますよ。

2. 現場で使える!条件付きヒートマップ生成マクロの実装

それでは早速、実際のコードを見てみましょう。
今回は、段落内に含まれるキーワード(例: 「【重要】」「【注意】」「【参考】」)を自動検出し、その重要度に応じて背景色をグラデーションのように変化させるスクリプトを作成しました。

以下のコードを、WordのVBAエディタ(Alt + F11)の標準モジュールに貼り付けてみてください。

Option Explicit

‘ ==============================================================================
‘ 処理名: 段落条件付き網掛けマクロ(ヒートマップジェネレーター)
‘ 概要 : 文書内の各段落を走査し、キーワードに応じて背景色(網掛け)を動的に変更する
‘ ==============================================================================
Sub CreateParagraphHeatmap()
Dim targetDoc As Document
Set targetDoc = ActiveDocument

Dim targetPara As Paragraph
Dim paraText As String
Dim processedCount As Long
processedCount = 0

‘ 画面描画を停止して処理速度を極限まで高める(プロの必須テクニック)
With Application
.ScreenUpdating = False
.Calculation = wdCalculationManual
End With

On Error GoTo ErrorHandler

‘ 文書内の全段落をループ処理
For Each targetPara In targetDoc.Paragraphs
‘ 段落の文字列を取得(文末の改行コード等を除去するため Trim を併用)
paraText = targetPara.Range.Text

‘ — 条件分岐による網掛け(Shading)の適用 —
Select Case True
Case InStr(paraText, “【重要】”) > 0
‘ 最重要:濃いレッド(RGB: 255, 220, 220 / 薄い赤の背景)
Call ApplyParagraphShading(targetPara, 255, 220, 220)
processedCount = processedCount + 1

Case InStr(paraText, “【注意】”) > 0
‘ 中重要:オレンジ(RGB: 255, 240, 200 / 薄い黄の背景)
Call ApplyParagraphShading(targetPara, 255, 240, 200)
processedCount = processedCount + 1

Case InStr(paraText, “【参考】”) > 0
‘ 低重要:ブルー(RGB: 220, 240, 255 / 薄い青の背景)
Call ApplyParagraphShading(targetPara, 220, 240, 255)
processedCount = processedCount + 1

Case Else
‘ 条件に合致しない場合は網掛けをクリア(白に戻す)
targetPara.Range.Shading.BackgroundPatternColor = wdColorAutomatic
End Select
Next targetPara

‘ 処理終了の通知
MsgBox “ヒートマップの生成が完了しました!” & vbCrLf & _
“処理した段落数: ” & processedCount & “件”, vbInformation, “完了”

CleanUp:
‘ 画面描画と計算設定を元に戻す
With Application
.ScreenUpdating = True
.Calculation = wdCalculationAutomatic
End With
Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
Resume CleanUp
End Sub

‘ ==============================================================================
‘ 補助プロシージャ: 段落の網掛け色を一括設定するラッパー関数
‘ ==============================================================================
Private Sub ApplyParagraphShading(ByRef para As Paragraph, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
With para.Range.Shading
‘ 背景色をRGB値から生成して設定
.BackgroundPatternColor = RGB(r, g, b)
End With
End Sub

3. コードのキモを解説!ここを抑えれば怖くない

初学者の方に向けて、このコードの重要なポイントを3つに絞って解説します。ここをクリアすれば、Word VBAの基本はバッチリです!

① `For Each` による段落コレクションの走査

For Each targetPara In targetDoc.Paragraphs

Word文書は、段落(Paragraphs)、単語(Words)、文字(Characters)といった「コレクション(集合体)」の階層構造で成り立っています。`For Each … In …` 構文を使うことで、文書の先頭から最後尾まで漏れなく、直感的に段落を一つずつ取り出すことができます。

② `InStr` 関数によるキーワードの有無判定

Case InStr(paraText, “【重要】”) > 0

`InStr`(In String)は、「ある文字列の中に、特定のキーワードが何文字目に入っているか」を調べる関数です。キーワードが含まれていれば「1以上」の数字が返るため、「`>0`(見つかった場合)」という条件を作ることで、柔軟なテキスト判定が可能になります。

③ プロの技:画面描画の停止 (`ScreenUpdating = False`)

コードの最初と最後に、以下の記述を入れています。

Application.ScreenUpdating = False
‘ … 処理 …
Application.ScreenUpdating = True

これを入れることで、マクロ実行中にWordが画面を一枚一枚描き直すのを防ぎ、処理速度を劇的に向上させることができます。数十ページある重い文書を扱うときは、この配慮がエンジニアとしての腕の見せ所です。

4. 陥りやすい罠とエラー回避の知恵

実際にこのコードを動かす際、初心者がハマりがちなポイントを先回りして解説しておきます。

  • 罠1:表(テーブル)の中の段落でエラーになる?

Wordの文書内に表が含まれている場合、表の中の段落も `Paragraphs` コレクションの対象になります。基本的にはそのまま動作しますが、セルの結合や特殊なレイアウトがある文書では、予期せぬ動作をすることがあります。実務で使う場合は、必要に応じて `If targetPara.Range.Information(wdWithInTable) = False` などの条件を挟んで、本文の段落だけに絞る工夫も有効です。

  • 罠2:色をリセットし忘れて継承されてしまう

一度網掛けを設定した段落のキーワードを削除しても、マクロで「条件以外(Case Else)」の処理を通さないと、古い色が残り続けてしまいます。上記のコードでは `Case Else` の部分で `wdColorAutomatic`(初期状態の色)に戻す処理を入れているため、何度実行してもクリーンな状態が保たれます。

まとめ:自動化の扉を開こう

今回は、段落の「背景色(網掛け)」を条件付きで制御するヒートマップ作成マクロを通じて、Word VBAの本質的な操作手法を解説しました。

  • 段落を操作するには `Paragraphs` コレクションと `For Each` を使う。
  • 背景色は `.Range.Shading.BackgroundPatternColor` で自在にコントロールできる。
  • `ScreenUpdating` を制す者が、パフォーマンスを制す。

これらの知識があれば、単なる「お絵描きマクロ」ではなく、実務の現場でドキュメント品質を担保する「本格的な管理ツール」を自分の手で作り上げることができます。

ぜひ、お手元のWord文書で試してみてください。あなたのデスクワークが、さらにスマートになることを応援しています!

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