【入門編】【中級者向け】段落の「段落枠」を、特定のキーワードが含まれる場合にのみ自動描画する – Word VBA解析バイブル

スポンサーリンク

こんにちは!Word VBAの世界へようこそ。
マクロの記録ボタンを押して、生成された呪文のようなコードを眺めてみたものの、「なんだこれ?」と途方に暮れてしまった経験はありませんか?

大丈夫、安心してください。今日ここでお話しする内容をクリアすれば、あなたも「マクロの記録から卒業した中級エンジニア」の仲間入りです。

今回は、業務文書作成でめちゃくちゃ役立つテクニック「特定のキーワードが含まれる段落を自動検出し、お洒落な『段落枠』で囲んで視覚的に強調する自動化マクロ」を一緒に作っていきます。

プロの現場で即戦力となるオブジェクトの扱い方や、誰もがハマる「落とし穴」の回避策まで、優しく徹底的に解説していきますね。

なぜ「段落枠」の自動化が必要なのか?

企画書やマニュアルを作るとき、「ここだけは絶対に読んでほしい!」という重要項目に枠線をつけたりすること、ありますよね。

これを手作業でやろうとするとどうでしょう?
1. キーワードを探してハイライトする
2. 段落を選択する
3. 「罫線と網掛け」メニューを開く
4. 枠線のスタイルや色を選んで適用する

……ページ数が100ページもある長大なドキュメントだったら、気が遠くなる作業です。しかも、後から修正が入ったらやり直し。

Word VBAにこれを任せれば、一瞬(0.1秒未満)で終わります。しかも、ヒューマンエラー(囲い忘れ)がゼロになります。

知っておくべきWord VBAの心臓部:Paragraphs と Borders

Wordの文書は、大きな構造から順に `Document` > `Paragraph` > `Range` / `Font` という階層構造(オブジェクトツリー)を持っています。

今回私たちが操作するのは、段落を司る `Paragraph` オブジェクト、そしてその周りを彩る `Borders`(境界線)コレクションです。

特に注意してほしいのは、Wordの段落枠は「文字(Font)」ではなく「段落(Paragraph)」そのものに設定するという点です。ここを勘違いすると、「文字だけ囲まれて変なことになった!」というエラーの沼にハマります。

実装コード:一撃で重要段落を囲む魔法のマクロ

それでは、開発の現場でそのままコピペして使える実用的なコードを公開します。
VBE(Visual Basic Editor)を開き、標準モジュールに貼り付けてみてください。

Sub HighlightImportantParagraphs()
‘ ==========================================
‘ 【テーマ】特定キーワードを含む段落の自動枠囲み
‘ ==========================================

Dim targetDoc As Document
Dim targetPara As Paragraph
Dim searchKeyword As String
Dim targetBorder As Border
Dim processedCount As Long

‘ 1. 対象ドキュメントの定義(現在アクティブな文書)
Set targetDoc = ActiveDocument

‘ 2. 検索するキーワードの指定(今回は「【重要】」とします)
searchKeyword = “【重要】”
processedCount = 0

‘ 画面描画を停止して処理速度を爆発的に上げる(プロの常識!)
Application.ScreenUpdating = False

‘ 3. 文書内のすべての段落を先頭から順にスキャン
For Each targetPara In targetDoc.Paragraphs

‘ 段落の中にキーワードが含まれているか判定
‘ InStr関数は、文字列が含まれていればその位置(1以上)、含まれていなければ0を返します
If InStr(targetPara.Range.Text, searchKeyword) > 0 Then

‘ 4. 段落枠(上下左右の罫線)を設定する
‘ Paragraph.Borders は段落の上下左右をまとめて管理するコレクションです
With targetPara
‘ 枠線を囲み線(Box)に設定
.Borders.Enable = True

‘ 各線のデザインをプロっぽく調整
For Each targetBorder In .Borders
targetBorder.LineStyle = wdLineStyleSingle ‘ 一本線
targetBorder.LineWidth = wdLineWidth075 : ‘ 線の太さ(0.75pt)
targetBorder.Color = wdColorDarkRed : ‘ 落ち着いたダークレッド
Next targetBorder

‘ 枠線と文字の間に少し余白(パディング)を入れると美しくなります
.Borders.DistanceFromTop = 4 ‘ 上の余白(pt)
.Borders.DistanceFromBottom = 4 ‘ 下の余白(pt)
.Borders.DistanceFromLeft = 6 ‘ 左の余白(pt)
.Borders.DistanceFromRight = 6 ‘ 右の余白(pt)

‘ 背景色を薄いグレーにしてさらに視認性を上げる場合
‘ .Shading.BackgroundPatternColor = wdColorGray10
End With

processedCount = processedCount + 1

End If
Next targetPara

‘ 画面描画を再開
Application.ScreenUpdating = True

‘ 5. 完了メッセージ
MsgBox “処理が完了しました!” & vbCrLf & _
“対象となった段落数: ” & processedCount & ” 箇所”, _
vbInformation, “自動化完了”

End Sub

コードのポイント・初心者への解説

ここからは、コードの裏側で何が起きているのか、エンジニアの視点で重要なポイントを解説します。

1. `Application.ScreenUpdating = False` の魔法

これ、めちゃくちゃ重要です。Wordマクロで一番時間がかかるのは「画面を書き換える処理」です。
何百個もある段落を一つずつ枠で囲むたびに画面を再描画していると、パソコンがフリーズしたかのように遅くなります。
処理の最初に `False` にし、最後に `True` に戻すことで、裏側で高速処理を完結させるのがプロの技術です。

2. `InStr` 関数のスマートな使い方

「特定の言葉が入っているか?」を調べるのに、わざわざカーソルを移動させる必要はありません。
`InStr(調べたい文字列, 探すキーワード)` を使うことで、一瞬で文字の存在有無を判定できます。コードがシンプルになり、バグも減ります。

3. コレクションを回す `For Each`

WordVBAでは `For i = 1 To 100` のようなインデックス番号によるループよりも、`For Each targetPara In targetDoc.Paragraphs` のように「実態のオブジェクトを直接取得してループする」方が安全かつ高速です。

陥りやすい罠(エラーと対策)

このコードを使う上で、初学者が絶対にハマるポイントを先回りして解説しておきます。

⚠️ その1:段落の末尾にある「見えない文字」の罠

Wordの段落のテキスト(`.Range.Text`)の末尾には、必ず段落記号(改行マーク:`vbCr`)が含まれています。
そのため、「キーワードが含まれているか」の判定には影響しませんが、テキストの比較や完全一致を行おうとすると、この改行コードのせいで一致判定が崩れることがあります。
「含まれている(部分一致)」を調べる `InStr` を使っている今回は安全ですが、厳密な文字列比較をする際は注意が必要です。

⚠️ その2:空の段落によるエラー

文書の途中に「改行だけが入った空の段落」がある場合、そこにキーワードがなくても変な挙動をすることがあります。
もし実務で「文字数が0の段落はスキップしたい」という場合は、ループの最初に以下のようなガード節(条件分岐)を入れると完璧です。

‘ 文字数が改行コード(1文字)より多い場合のみ処理を実行
If Len(targetPara.Range.Text) > 1 Then
‘ 処理をここに書く
End If

まとめ:ここをクリアすれば、Word VBAは怖くない!

お疲れ様でした!今回は「段落の自動検出」と「枠線の高度な書式設定」を組み合わせた、実用的な自動化テクニックを解説しました。

  • `Paragraphs` コレクションで文書全体を巡回する
  • `InStr` 関数でスマートにキーワードをハントする
  • `Borders` プロパティでデザインを自在にコントロールする

この3つのパーツが頭に入れば、もう「マクロの記録」に頼り切る必要はありません。あなたの思い通りのドキュメント自動化システムを、自分の手で自由に構築できるようになります。

ここをクリアしたあなたなら、次は「特定の表のデザインを一括変換する」「見出しのスタイルを自動整理する」といった、さらなる高みへ進む準備はバッチリです。

ぜひ、日々の業務にこのマクロを取り入れて、圧倒的な効率化を体感してくださいね!エンジニアライフを応援しています!

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