フォントの設定をマクロで行う必要性
- 日本語用フォントと英語用フォントを設定するため、1発で設定できない
- セルを編集すると意図しないフォント変更が生じることがある
- したがって、めんどうな作業を繰り返し行わなくてはいけなくなる
日本語用フォントの設定項目がない
日本語用フォントは、漢字やひらがなだけでなく、アルファベットも含まれています。
一方で、英語用フォントは半角英数字と一部の記号のみが含まれています。
日本語でエクセルを記述する場合、日本語用フォントと英語用フォントを両方とも設定する必要があります。
しかしながら、Power PointやWordとは異なり、Excelには「日本語用フォント」を設定する機能がありません。
日本語用フォントの設定方法
そこで、次のような手順を取ります。
- 日本語用フォント(例: MS Pゴシック)を適用する
- 英語用フォント(例: Arial)を適用する
フォントに含まれていない文字は「現状維持」となります。
したがって、上の手順でフォントを適用した場合は、英語用フォントがある文字はArialに、ない文字は(Arial適用前に適用されたフォントである)MS Pゴシックになります。
1つのセルに2つ以上のフォントを設定する
エクセルは、1つのセルの中でフォント・フォントサイズ・フォントスタイルなどを使い分けることができます。
たとえば、5文字目まではArial、6文字目からはTimes New Romanといった設定が可能です。数式バーで文字列を選択して、リボンからフォントを選択すればこのように設定できます。
日本語用フォントと英語用フォントを共存させるということは、上記のような「セル内で複数のフォントを使い分ける」といった動作をしているということです。
日本語用フォントと英語用フォントを両方使っているセルの文字列を編集すると、意図せずに英数字が日本語用フォントになることがあります。
このため、フォントの設定は「デフォルト設定をすればその後は意識しなくて済む」というようなものではなく、こまめに再設定が必要な項目になっています。
サンプルコード
日英フォントを単純に設定する
気を付けるべき点は1つだけで、日本語フォント=>英語フォントの順に記述することです。
Sub Serif_Fonts()
' セリフ体フォント
With Selection.Font
.Name = "MS P明朝"
.Name = "Times New Roman"
End With
End Sub
Sub Sans_Fonts()
' サンセリフ体フォント
With Selection.Font
.Name = "MS Pゴシック"
.Name = "Arial"
End With
End Sub
フォントサイズやアラインメントも併せて設定する
ホットキーを設定するのであれば、正規表現でメモ書きしておくとよいでしょう。
そうすると、VBProjectオブジェクトなどから抽出しやすくなります。
選択した範囲のみ
Sub Set_Default_Font_Selection()
' Hotkey: Alt + Ctrl + Shift + 6
' Onkey: "%^+6"
With Selection
With .Font
.Size = 10
.Name = "MS Pゴシック"
.Name = "Arial"
End With
.VerticalAlignment = xlCenter
End With
End Sub
シート全体
使用していないセルにフォントを設定すると、ファイルサイズがかさんでしまいます。
機械的に、シート全体 = UsedRange と覚えておくのがよいでしょう。
Cellsコレクションなどからシート全体に何かを行うことはまずありません。
Sub Set_Default_Font_Wholesheet()
' Hotkey: Alt + Ctrl + Shift + 6
' Onkey: "%^+6"
With ActiveSheet.UsedRange
With .Font
.Size = 10
.Name = "MS Pゴシック"
.Name = "Arial"
End With
.VerticalAlignment = xlCenter
End With
End Sub
フォントサイズサイクルを作る
サイクル型のマクロにすると、より実践的になります。
Sub Fonts_Cycle()
' Hotkey: Alt + Shift + 6
' Onkey: "%+6"
Dim mspg As String
Dim mspm As String
mspg = "MS Pゴシック"
mspm = "MS P明朝"
With Selection.Font
If .Name = "Arial" Or .Name = mspg Then
.Name = mspm
.Name = "Times New Roman"
Else
.Name = mspg
.Name = "Arial"
End If
End With
End Sub
VBEは、日本語が文字化けすることがあるので、最小限に抑えたいところ。
やむを得ず全角文字を書く場合は、下記のように変数に格納したほうが読みやすくなります。
Notes
.NameFarEast プロパティは、WordやPower Pointで使われるほか、エクセル上のShapeオブジェクトにも使用可能ですが、Range.Fontオブジェクトには使用できません。