Word VBAを掌握する:小さすぎるフォントを「瞬殺」で見つけ出す校閲自動化術
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアです。
「マクロの記録」ボタンを押して満足している段階から、一歩先へ進みたいあなたへ。Word VBAの世界へようこそ。今日は、ただ動くだけのコードではなく、「Wordのオブジェクト構造を正しく理解し、文書を制御する」というエンジニアの視点を伝授します。
今回のミッションは、「誤操作で極端に小さくなったフォントを、蛍光ペンで強調して炙り出す」という実用的な校閲補助ツールを作ることです。
—
1. なぜ「範囲(Range)」を制する者がVBAを制するのか
Word VBAにおいて、一番やってはいけないことが「カーソルを動かして選択すること」です。画面をちらつかせる上に、動作が極端に遅くなります。
私たちが操作すべきは、画面上のカーソルではなく、Wordの内部モデルである`Range`(範囲)オブジェクトです。文書全体を「Range」として捉え、そこから「単語」や「段落」を切り出して、一つずつ診断していく。これが高速かつ堅牢な自動化の第一歩です。
—
2. 小さなフォントを狩る!最強の校閲マクロ
以下のコードは、文書内の全段落をスキャンし、フォントサイズが「8pt未満」の箇所を蛍光ペンで塗るスクリプトです。
Sub HighlightTinyFonts()
‘ 文書内の全段落を扱うための変数
Dim para As Paragraph
‘ 閾値(この値より小さいものを警告する)
Const THRESHOLD As Single = 8
‘ 画面の更新を停止(高速化の鉄則)
Application.ScreenUpdating = False
‘ 文書内の全段落をループ処理
For Each para In ActiveDocument.Paragraphs
‘ 段落内のフォントサイズを確認
‘ 混在している可能性があるため、Range全体をチェック
If para.Range.Font.Size < THRESHOLD Then
' 警告として蛍光ペン(黄色)を設定
para.Range.HighlightColorIndex = wdYellow
End If
Next para
' 画面更新を再開
Application.ScreenUpdating = True
MsgBox "チェック完了!小さな文字を黄色でマークしました。", vbInformation
End Sub
コードの心臓部を解説
- `For Each … In …`: Wordのコレクション(段落の集まりなど)を扱う際の定石です。インデックス(番号)で回すより、バグが圧倒的に少なくなります。
- `Application.ScreenUpdating = False`: これを入れるか入れないかで、処理速度が10倍変わることもあります。プロの現場では必須の作法です。
- `wdYellow`: Word標準の定数です。これを使えば色コードを調べる必要はありません。
—
3. 初学者が陥りやすい「落とし穴」
コードを書いていて、こんなエラーに遭遇しませんか?
Q1. 「プロパティを取得できません」と言われる
段落の中に「画像」や「図形」が含まれていると、VBAはフォントサイズを判定できずにエラーを吐くことがあります。もしエラーが出る場合は、`On Error Resume Next`(エラーを無視して次へ進む)をループの先頭に入れて回避するのも、現場での一つの手です。
Q2. なぜか全部塗られてしまう
フォントサイズを「段落全体」で見ているため、段落の中に一つでも小さな文字があると、その段落全体がマークされます。もし「その文字だけ」を特定したい場合は、`Paragraph`単位ではなく、`Word`単位でループさせる必要があります。まずはこのマクロで「怪しい段落」を特定し、そこを詳しく見る運用から始めるのが効率的です。
—
4. さあ、あなたも「自動化の扉」を開こう
このコードは、単なる校閲ツールではありません。「文書の全要素をループさせ、条件に合致するものだけを加工する」という、あらゆる業務自動化の雛形です。
- フォントサイズだけでなく、「特定のキーワードを含んでいたら赤字にする」
- 「特定のスタイルが適用されていたらコメントを入れる」
応用範囲は無限大です。まずはこのコードをコピーして、エディタ(Alt + F11)に貼り付けてみてください。自分の手で文書が動く感覚を味わえば、あなたはもう、単なるWordユーザーではなく「エンジニア」の入り口に立っています。
ここをクリアすれば、Word VBAの基本はバッチリです。次に何を作りたいか、またいつでも相談してくださいね。応援しています。
