ようこそ、自動化の世界へ。
マクロの記録ボタンを押して生成された、あの「冗長で修正困難なコード」に別れを告げる時が来ましたね。
Word VBAにおいて「書式設定」を操ることは、単に見た目を整えることではありません。「文書という名のオブジェクトツリーを、いかに効率よくトラバース(巡回)するか」という、アーキテクトとしての最初の試練です。
今日は、ブランド規定を瞬時に適用するための「フォント置換」をテーマに、プロフェッショナルな思考法を伝授します。
—
なぜ「マクロの記録」では限界があるのか
まず、現実を直視しましょう。マクロの記録が生成する `Selection.Font.Name = “…”` というコードは、「今、カーソルがある場所」しか見えていません。
プロのコードは、`Selection`(選択範囲)という不安定なものに依存しません。`Document` や `Paragraph` といった「ドキュメント構造」そのものを直接操作します。これが、高速かつエラー知らずの自動化への第一歩です。
極限のフォント制御:日本語と英数字の分離
Wordのフォント設定には、深淵なる仕様が存在します。`Font.Name` プロパティ一つで全てを変えようとしてはいけません。日本語と英数字は、Wordのエンジン内部で独立して管理されているからです。
以下のコードは、文書内の全ての段落を走査し、日本語と英数字を別々のフォントへ精密に設定するプロ仕様のテンプレートです。
Sub ApplyBrandFonts()
‘ パフォーマンスを最大化するための定石
‘ 画面描画を停止し、処理速度を劇的に向上させる
Application.ScreenUpdating = False
Dim para As Paragraph
‘ 文書内の全段落を巡回(オブジェクト指向的なアプローチ)
For Each para In ActiveDocument.Paragraphs
With para.Range.Font
‘ 【重要】日本語フォントの設定
‘ NameFarEast は日本語専用プロパティ
.NameFarEast = “游ゴシック”
‘ 【重要】英数字フォントの設定
‘ NameAscii は英数字専用プロパティ
.NameAscii = “Arial”
‘ フォントサイズ等の統一規定があればここに追加
.Size = 10.5
End With
Next para
‘ 描画を再開して結果を表示
Application.ScreenUpdating = True
MsgBox “ブランド規定の適用が完了しました。”, vbInformation
End Sub
コードの「魂」を読み解く:3つのポイント
1. `Application.ScreenUpdating = False` の意味
Word VBAは、画面の描画処理が最も重いタスクです。これをオフにすることで、処理速度は10倍以上になることもあります。これは「コードの作法」というより「エンジニアの矜持」です。
2. `NameFarEast` と `NameAscii` の使い分け
ここが本記事の核心です。
- `NameFarEast`: 日本語文字(漢字・かな)に適用されます。
- `NameAscii`: 半角英数字に適用されます。
これらを分けることで、日本語文書の中に混在するアルファベットだけをスタイリッシュな欧文フォントにする、といった「デザインの質」を維持した自動化が可能になります。
3. `Range` オブジェクトの概念
`para.Range` を使うことで、段落そのものではなく、段落が保持する「テキストの範囲(Range)」を操作しています。これにより、段落番号やインデント設定を破壊することなく、フォントという「質感」だけを差し替えることができるのです。
陥りやすい罠:エラーを回避するために
初心者がよくやる失敗は、「保護された文書」や「複雑なテーブル内」でエラーを吐くことです。
- テーブル内の挙動: `For Each para In ActiveDocument.Paragraphs` は、実はテーブル内の段落も全て網羅します。非常に強力ですが、もし特定のセクションだけ除外したい場合は、`If` 文で `para.Range.Information(wdWithInTable)` をチェックするなどのガード節を入れると、さらに堅牢になります。
最後に:自動化は「設計」である
ここをクリアしたあなたは、もう「マクロを動かす人」ではなく「文書構造を制御するエンジニア」の入り口に立っています。
次はぜひ、「スタイル(Style)」の概念を学んでみてください。個別のフォント指定を一つ一つ変えるのではなく、「標準」や「見出し」といったスタイル自体をVBAで書き換えることができれば、あなたの自動化は一段上のステージへと到達します。
また何か壁にぶつかったら、いつでもここへ戻ってきてください。コードはいつでも、あなたの思考を拡張する最強の武器になります。応援していますよ。
