【実務・中級編】【初心者向け】段落の「フォントサイズ」が極端に小さい箇所を検索してハイライトする校閲補助 – Word VBA解析バイブル

スポンサーリンク

現場の「見えない爆弾」を検知せよ:Word VBAによるフォントサイズ異常検知のアーキテクチャ

現場でWordファイルを扱っていると、必ず遭遇する「フォントサイズが極端に小さい箇所」。コピペを繰り返した結果、意図せず「0.5pt」や「1pt」といった読めない文字が紛れ込み、校閲や印刷で致命的な不備を招く。これらは肉眼での発見が極めて困難な「見えない爆弾」だ。

今日は、これをVBAで一掃する。ただ動くコードを書くのではない。大規模文書でもフリーズせず、かつ保守性が高い、プロダクション品質の設計思想を伝授する。

なぜ「安易なループ」は危険なのか

初心者が書くコードの典型例は、`ActiveDocument.Paragraphs`を単純にループし、全文字を一文字ずつ`Characters`オブジェクトで走査する手法だ。

断言する。これは大規模文書では「死」を意味する。

Wordの`Characters`オブジェクトへのアクセスは非常に低速だ。数千ページの文書でこれを行うと、VBAの実行スレッドは数分間固まり、OSからは「応答なし」と判定される。我々エンジニアが目指すべきは、「Rangeオブジェクトの最適化」と「検索エンジンの利用」である。

プロダクションコード:異常サイズ検知エンジン

このコードは、全範囲を走査するのではなく、Wordの「検索機能(Find)」を擬似的に利用して高速化を図る設計としている。

Option Explicit

‘ ———————————————————
‘ 機能:指定サイズ以下のフォントをハイライトする
‘ 設計方針:パフォーマンスを考慮し、Charactersループを回避する
‘ ———————————————————
Public Sub HighlightTinyFonts()
Dim targetRange As Range
Dim thresholdSize As Single

‘ 閾値を設定(例:8pt未満を異常とする)
thresholdSize = 8.0

‘ スクリーン更新を停止し、処理速度を劇的に向上させる
Application.ScreenUpdating = False

Set targetRange = ActiveDocument.Content

With targetRange.Find
.ClearFormatting
.Replacement.ClearFormatting

‘ 検索対象の範囲を初期化
.Text = “”
.Forward = True
.Wrap = wdFindContinue
.Format = True

‘ 検索ループの実行
Do While .Execute
‘ 取得した範囲のフォントサイズを判定
‘ Note: undefined(wdUndefined)の場合は複数のサイズが混在しているため除外
If Not IsNull(targetRange.Font.Size) Then
If targetRange.Font.Size < thresholdSize Then ' 異常箇所を蛍光色(黄色)でマーク targetRange.HighlightColorIndex = wdYellow End If End If ' 検索位置を次の文字へ進める targetRange.Collapse wdCollapseEnd Loop End With Application.ScreenUpdating = True MsgBox "検査が完了しました。", vbInformation End Sub ---

コードの心臓部を読み解く:エンジニアの視点

1. `Application.ScreenUpdating = False`

  • これを忘れるエンジニアは二流だ。Wordの描画エンジンは、処理ごとに画面を書き換えようとする。大規模文書において、これを無効化するだけで実行速度は10倍変わる。

2. `targetRange.Collapse wdCollapseEnd`

  • Findメソッド実行後、検索結果がRangeとして残る。そのまま次の検索に進むと、同じ箇所で無限ループする可能性がある。必ず`Collapse`で終了点へカーソルを移動させよ。

3. `IsNull(targetRange.Font.Size)`の罠

  • Wordの`Font.Size`プロパティは、範囲内に異なるサイズが混在している場合、`Null`を返す。これをチェックせずに比較演算を行うと、実行時エラーが発生する。このガード句こそが、堅牢なシステムの証だ。

運用上の注意点とデータベース連携への展望

このツールを個人のPCで動かすならこれで十分だ。しかし、組織の標準ツールにするなら以下の「先」を考える必要がある。

  • スタイル依存の考慮:

もし組織内で「スタイル」が厳格に運用されているなら、`Font.Size`で見るのではなく、`Paragraph.Style`の属性をチェックすべきだ。直接書式(Direct Formatting)の汚染を検出する方が、本質的な校閲になる。

  • ログの出力:

ハイライトするだけでなく、どのページに何件異常があったかをCSVやExcelに書き出すロジックを追加せよ。それが「自動化」から「管理」へのステップアップだ。

最後に:自動化は「設計」で決まる

VBAは古臭い言語だと言われる。だが、Wordの内部オブジェクトモデルを深く理解し、メモリ効率と実行速度を計算しながら設計されたVBAコードは、現代のどのスクリプト言語よりも強力な武器になる。

まずはこのコードをコピーし、自分の環境で走らせてみてほしい。そして、動いたことに満足せず、「なぜこのコードが速いのか」を咀嚼してほしい。それが、君を「コードを書く人」から「エンジニア」へと変える第一歩だ。

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