英字のみフォントを変更する
Excelはシートのフォントが統一されているため、普通に文章を書けば同じフォントで表示されます。
統一感はありますが、Wordで書いたときに自動変換されるように英字のフォントを変更したい場合はかなり面倒です。
ここでは選択範囲の全てのセルの英字部分を別のフォントに変更するマクロを紹介します。
なお、紹介するマクロでは正規表現のRegExpオブジェクトを利用していますので、次項の参照設定が必要になります。
事前設定
以下のVBAコードは事前に正規表現の参照設定をしておく必要があります。
VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。
選択セル範囲の英字のフォントを変更する関数
選択されているセル範囲の各セルに含まれる英字をImpactフォントに変更する関数です。
処理概要は以下になります。
- 選択セル範囲を1セルずつ処理する。
- セルの文字列から連続する英字部分(≒英単語)の個所を全て抽出する。(正規表現利用)
- 抽出した英字部分(≒英単語)がセル文字列のどこにあるのか判定し、そのフォントを変更する。
フォントは固定でImpactにしていますので適宜変更したり引数にしたりしてください。
Fontオブジェクトを取得していますので、太字や文字色などのプロパティも追加して利用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Sub ChangeEngFont() Dim reg As New RegExp '// 正規表現クラスオブジェクト Dim oMatches As MatchCollection '// RegExp.Execute結果 Dim oMatch As Match '// 検索結果オブジェクト Dim i '// ループカウンタ Dim iCount '// 検索一致件数 Dim r As Range '// セル Dim iIndex '// InStr関数の開始位置と検索一致位置 Dim iLen '// 見つかった英字文字数 Dim f As Font '// Fontオブジェクト '// 検索条件=英字を抽出 reg.Pattern = "[a-zA-Z]+" '// 文字列の最後まで検索する reg.Global = True For Each r In Selection '// 検索実行 Set oMatches = reg.Execute(r.Value) '// 検索一致数取得 iCount = oMatches.Count '// 検索開始位置を初期化 iIndex = 1 '// 検索一致数ループ For i = 0 To iCount - 1 '// 検索で見つかった英字を取得 Set oMatch = oMatches.Item(i) '// 英字の文字数を取得 iLen = Len(oMatch.Value) '// 英字がセル文字列のどこにあるのかを取得 iIndex = InStr(iIndex, r.Value, oMatch.Value) '// 英字部分のFontオブジェクトを取得 Set f = r.Characters(iIndex, iLen).Font '// フォントを指定 f.Name = "Impact" '// 次のInStr用に検索位置をずらす iIndex = iIndex + iLen Next Next End Sub |
使い方
1. 対象のセルを選択します。
2. 上の関数(ChangeEngFont)を実行します。
3. 英字部分のフォントが変わります。分かりやすいように範囲選択ははずしています。
Impactフォントだと目立ちますね。
ちなみに、Wordで初期設定されているArial(上のコードの35行目の”Impact”を”Arial”に書き換え)だとこうなります。