こんにちは。Word VBAの世界へようこそ。
「マクロの記録」ボタンを押して、生成された長くて読みづらいコードに絶望したことはありませんか?あるいは、文書内のフォントを一括で変えようとして、意図しない場所まで崩れてしまった経験があるかもしれません。
Wordの文書は、実は「オブジェクト」という小さな部品たちが複雑に絡み合って構成されています。今回は、その中でも最も基本であり、かつ最も奥が深い「段落(Paragraph)」という単位を制御し、安全にフォントを統一する方法を伝授します。
これは、あなたがVBAの「記録係」から「アーキテクト(設計者)」へと進化するための第一歩です。
—
なぜ「スタイル」を触らずにフォントを変えるのか?
Wordには「スタイル」という強力な機能がありますが、初心者のうちはこれを不用意にいじると、文書全体のレイアウトが崩壊するリスクがあります。
今回紹介するのは、「段落の中にある文字(Range)を直接指定して、書式だけを上書きする」という手法です。これなら、既存のスタイル定義に干渉することなく、外科手術のようにピンポイントでフォントだけを変更できます。
実践:文書全体のフォントを一括置換するコード
以下のコードをVBAエディタに貼り付けてみてください。まずはこれが「Word VBAの基本形」だと考えてください。
Sub ChangeAllParagraphFonts()
‘ Wordの文書(Document)を扱うための変数
Dim doc As Document
‘ 段落(Paragraph)を一つずつ取り出すための変数
Dim para As Paragraph
‘ 現在アクティブな文書を対象にする
Set doc = ActiveDocument
‘ 文書内の全段落に対してループ処理を開始
For Each para In doc.Paragraphs
‘ 段落内の「範囲(Range)」に対してフォントを指定
‘ ここでフォント名とサイズを統一します
With para.Range.Font
.Name = “游ゴシック”
.Size = 10.5
End With
Next para
MsgBox “フォントの統一が完了しました!”, vbInformation
End Sub
コードの解説:ここが「プロの視点」です
1. `For Each … In …` の魔法:
Wordには数千の段落があるかもしれません。この構文は「最初から最後まで、漏れなく一つずつ掴んで処理する」という、最も効率的で安全な巡回方法です。
2. `With` ステートメントの重要性:
`para.Range.Font.Name = “…”` と何度も書くのは非効率です。`With` を使うことで、「この段落のフォントに関しては、以下の設定を適用せよ」と一括で指示を出せます。これはコードの可読性を高めるだけでなく、計算資源の節約にもつながります。
3. `Range` オブジェクトの概念:
Word VBAにおいて最も大切なのは「どこを触っているか」です。`para.Range` と書くことで、「この段落の全文字」を対象にしていることを明示しています。
—
初学者が陥りやすい「3つの罠」
せっかくコードを書いても、以下のポイントを見落とすとエラーや予期せぬ挙動に繋がります。
- フォント名が正確でない:
`”游ゴシック”` と書くべき場所を `”Yu Gothic”` と書いてしまうと、Wordは「そのフォントは見つかりません」と判断し、無反応になるかデフォルトフォントに戻ってしまいます。Windowsの「フォント設定」で正しい名前を確認しましょう。
- 「全選択」は極力避ける:
`Selection.WholeStory` のようなコードをネットで見かけるかもしれませんが、これは「画面上でドラッグして全選択する」のと同じ動きをVBAにさせています。非常に遅く、PCが重くなる原因です。今回のように `Document.Paragraphs` を直接叩く方が、遥かにスマートで高速です。
- 処理後の「戻る」が効かない:
VBAで実行した操作は、Wordの「元に戻す(Ctrl + Z)」が効かない場合が多いです。実行する前に必ずファイルをコピーしてバックアップを取る。 これがプロの鉄則です。
—
次のステップへ
今回のコードは、いわば「Word VBAの地図」です。
ここをクリアできれば、次は「特定の文字だけ色を変える」「特定のスタイルが適用されている段落だけフォントを変える」といった、より高度な条件分岐(`If`文)の世界へ進むことができます。
まずはこのコードをコピーして、自分の手元の文書で動かしてみてください。自分の命令一つで文書が整然と書き換わる瞬間、きっとVBAの虜になるはずです。
何か分からないことや、もっと深く知りたいことがあれば、いつでも聞いてくださいね。一緒に最高にクールな自動化環境を作り上げていきましょう!
