こんにちは! Wordマクロの記録ボタンを押したはいいものの、生成された暗号のようなコードに絶望して「マクロって難しい……」と挫折しかけていませんか?
大丈夫、安心してください。今日ここをクリアすれば、あなたのWord VBAのスキルは確実に次のステージへと進みます。
今回は、実務の文書作成でめちゃくちゃ重宝する「段落内の『英数字』だけを特定のフォントに一括変更する自動化」をテーマにお届けします。プロのデザイナーが作るような、日本語と英数字が美しく調和したプロフェッショナルな文書を、一瞬で作り上げる魔法のコードを一緒にマスターしていきましょう。
—
なぜ「英数字だけフォント変更」が必要なのか?
Wordで日本語の文章を書いているとき、半角の英数字(「2023」「Word」「VBA」など)が混ざると、なんだか野暮ったく見えたことはありませんか?
これは、日本語フォント(MS明朝や游明朝など)の中に半角英数字が混ざると、文字幅が不自然に広かったり、デザインのトーンがちぐはぐになってしまうからです。プロのDTPやドキュメント作成では、「日本語は明朝/ゴシック、英数字はCenturyやArialなどの欧文フォント」に切り替えるのが鉄則です。
これを手動でやろうとすると、文書全体から英数字を目視で探して選択し、フォントを変えて……と、気が遠くなるような作業になりますよね。しかも、文書の修正が入るたびにやり直しです。
だからこそ、ここをVBA(マクロ)で完全自動化するのです。
—
Word VBAの基本:オブジェクトの階層構造を知る
コードを書く前に、Wordが文書をどう捉えているか(オブジェクトモデル)を少しだけイメージ図で見てみましょう。
[Word アプリケーション (Application)]
└ [文書 (Document)]
└ [段落 (Paragraphs)]
└ [範囲 (Range)]
└ [文字 (Characters) / 検索 (Find)]
Word VBAで文字を操作するとき、私たちは「段落」というまとまりの中に飛び込み、その中にある「文字」を一つひとつ、あるいは条件に合うものだけを狙い撃ちして書き換える指示を出します。
今回は、文書内の文字を高速かつ確実に捉えるために、「Find(検索と置換)オブジェクトのワイルドカード機能」という強力な武器を使います。
—
【実践】英数字フォント一括変更マクロ
それでは、実際のコードを見てみましょう。
開発タブの「Visual Basic」を開き、標準モジュールに以下のコードを貼り付けてみてください。現場でそのままコピペして使えるように、細かくコメントを入れています。
Sub ChangeEnglishFontInParagraphs()
‘ —————————————————————–
‘ 処理名: 段落内の半角英数字のみ欧文フォントに一括変更するマクロ
‘ 対象読者: マクロの記録を卒業し、実務で使える自動化を目指す方へ
‘ —————————————————————–
Dim rngTarget As Range
Dim targetFontName As String
‘ 【設定】適用したい欧文フォントの名前を指定してください
targetFontName = “Century”
‘ 処理の高速化と画面ちらつき防止の呪文(プロの常識です)
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
pnl = 0 ‘初期化
‘ 文書の先頭から最後までをターゲット(範囲)にする
Set rngTarget = ActiveDocument.Content
‘ 検索オブジェクトの設定(Findプロパティの真骨頂)
With rngTarget.Find
.ClearFormatting
.Replacement.ClearFormatting
‘ ワイルドカードを使って「半角の英字と数字」を一網打尽にする正規表現を指定
‘ [a-zA-Z0-9]{1,} は「半角英数字が1文字以上連続している塊」を意味します
.Text = “[a-zA-Z0-9]{1,}”
.MatchWildcards = True
‘ ヒットした部分のフォント名だけを書き換える
.Replacement.Font.Name = targetFontName
‘ 文書全体を一括置換
.Execute Replace:=wdReplaceAll
End With
‘ 画面描画の復元
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
‘ 完了メッセージ
MsgBox “英数字のフォントを [” & targetFontName & “] に一括変更しました!”, vbInformation, “処理完了”
End Sub
—
コードのポイントを優しく解説
初心者の方でも「どこがどう動いているのか」が分かるように、重要なポイントを3つに絞って解説します。
1. 画面描画のロック (`ScreenUpdating = False`)
コードの最初と最後に `ScreenUpdating` という見慣れない行がありますよね。これ、実はプログラミングの現場では必須のテクニックです。
Wordはマクロが動いている最中、画面を一生懸命書き換えようとします。これが処理スピードを劇的に落とす原因になります。最初に「画面更新止め!」と指示し、裏側で一瞬にして処理を終わらせてから「画面更新再開!」と戻すことで、爆速でマクロが完了するようになります。
2. ワイルドカードの魔法 (`.MatchWildcards = True`)
今回のキモはここです。`.Text = “[a-zA-Z0-9]{1,}”` という見慣れない記号。
これは「正規表現」と呼ばれるルールの一種で、Wordの検索機能におけるワイルドカードです。
- `[a-z]` : 小文字のaからzまで
- `[A-Z]` : 大文字のAからZまで
- `[0-9]` : 0から9までの数字
- `{1,}` : それが1文字以上続いている塊
これによって、「あ」「漢字」「。などの句読点」には一切触れず、純粋な半角の英数字の塊だけピンポイントで捕獲することができるのです。
3. 日本語フォント設定に悪さをしない
Wordのフォント設定でやっかいなのが、「日本語用フォント」と「英数字用フォント(欧文フォント)」が別々に管理されている点です。
今回のマクロでは、ヒットした「文字そのもの」のフォントプロパティ(`.Replacement.Font.Name`)を直接書き換えているため、日本語フォントの設定を崩すことなく、綺麗に英数字だけを「Century」などに差し替えることができます。
—
陥りやすいエラーと回避のコツ
現場でこのマクロを使い始めると、いくつか「あれ?」と思う壁にぶつかることがあります。代表的なものを先回りして解決しておきましょう。
- エラー:「コンパイルエラー: 構文エラー」が出る
- → コピペの際に、全角のスペースや謎の改行が混ざってしまっていないか確認してください。特にダブルクォーテーション(`”`)が全角になっていないかに注意!
- 思ったようにフォントが変わらない箇所がある
- → すでにその段落や文字に「文字スタイル」が強く固定されている場合、フォントの直接上書きが負けてしまうことがあります。その場合は、一度文書全体の「書式クリア」を行ってからマクロを実行してみてください。
—
まとめ:ここをクリアすれば、Word VBAの基本はバッチリです!
お疲れ様でした! 今回は「段落(テキスト)の中の特定の文字種だけを狙い撃ちして装飾する」という、実務でめちゃくちゃ役立つテクニックを解説しました。
- `Range` と `Find` オブジェクトを組み合わせること
- ワイルドカードを使って狙った文字列を正確にキャッチすること
- 処理の高速化(`ScreenUpdating`)のお作法
この3つを自分のものにできたあなたは、もう「マクロの記録」に頼りきりの初心者ではありません。立派なWord VBAの使い手です。
ぜひ、自分の仕事用のテンプレート文書にこのマクロを組み込んで、同僚をあっと言わせるような美しい文書を爆速で作り上げてくださいね。あなたの自動化ライフを、これからも応援しています!
