文字フォントの種類を変更する方法
今回の目標
この記事では、フォントの変更方法や取得方法を解説します。
目標リスト
- フォントを変更および取得できるようになる
- フォントがインストールされているか確認できるようになる
Font.Name プロパティについて
Font.Name プロパティとは
Font.Name プロパティは、Rangeオブジェクトに含まれる Font オブジェクトのプロパティで、フォントを変更または取得できます。
なお、インストールされていないフォント名でも設定できてしまう点に注意が必要です。
存在しないフォントを指定した場合、見た目が変わらなかったり、テーマの既定フォントに自動的に置き換わったりします。
そのため、結果が定まらない不安定な表示となります。
特に、PCの初期状態でインストールされていないフォントを指定する場合や、
Windows と MAC のPCでやり取りをする場合、フォントがインストール済みかを確認してから設定しましょう。
Font.Name プロパティの構文
セルA1のフォントを"メイリオ"に変更するプログラムです。
Range("A1").Font.Name = "メイリオ"
セルA1のフォントを取得するプログラムです。取得結果はイミディエイトウィンドウに表示されます。
Debug.Print Range("A1").Font.Name
セルのフォントを操作する
Rangeオブジェクトの Font.Name でフォントを操作します。
サンプルコード
Sub FontChangeSample1()
'セルA1, B1にサンプルのテキストを入力する
Range("A1").Value = "ABCDEFGHIJ"
Range("B1").Value = "あいうえお"
'セルA1, B1のフォントを、Meiryo UIに変更する
Range("A1:B1").Font.Name = "Meiryo UI"
End Sub
セルA1, B1のフォントが、"Meiryo UI" になります。
文字列の一部のフォントを変更する
文字列の一部のフォントを変更する場合は、「Range」オブジェクトと「Font.Name」プロパティの間に『Characters』を追加します。
詳細は別記事(※準備中)で説明しますが、『Characters(開始位置, 文字数)』プロパティを使用します。
例:Range("A1").Characters(3, 2).Font.Name = "Meiryo UI"
→ セルA1の3文字目から2文字のみ(=3文字目と4文字目)、フォントを "Meiryo UI" へ変更する
サンプルコード
Sub FontSizeSample2()
'セルA1のテキストとフォントを設定する
With Range("A1")
.Value = "ABCDEFGHIJ"
.Font.Name = "游ゴシック"
End With
'セルA1の3文字目から2文字のみ、フォントを "Meiryo UI"にする
Range("A1").Characters(3, 2).Font.Name = "Meiryo UI"
'セルA1の7文字目から3文字のみ、フォントを "HGS教科書体"にする
Range("A1").Characters(7, 3).Font.Name = "HGS教科書体"
End Sub
安全にフォントを変更する
安全にフォントを変更するには、そのフォントがインストール済みか確認してから設定する必要があります。
「Word」がインストールされている必要がありますが、下記サンプルコードが一番安全に確認できるかと思います。
サンプルコード
'-----------------------------------------------------
' 【WORDがインストールされている場合のみ使用可能】
' フォントがインストールされているかを確認する
' fontName:確認するフォント名
' 戻り値:True/インストールされている
' False/インストールされていない
'-----------------------------------------------------
Function CheckFontExists(fontName As String) As Boolean
On Error GoTo CleanUp
Dim wd As Object
Dim nm As Variant
'Word を起動する(画面は表示されません)
Set wd = CreateObject("Word.Application")
'フォントがインストール済みか確認する
For Each nm In wd.FontNames
If StrComp(CStr(nm), fontName, vbTextCompare) = 0 Then
CheckFontExists = True
Exit For
End If
Next nm
CleanUp:
On Error Resume Next
If Not wd Is Nothing Then
'Word を終了する
wd.Quit False
End If
Set wd = Nothing
End Function
' フォントがインストールされているか確認する
Sub FontChangeSample3()
Dim fontName As String
'"Meiryo UI" に設定する
fontName = "Meiryo UI"
'フォントがインストール済みか
If CheckFontExists(fontName) Then
Range("A1").Font.Name = fontName
Else
MsgBox "フォント【" & fontName & "】" & _
"はインストールされていません。"
End If
End Sub
セルA1が、"Meiryo UI" になります。
Wordがインストールされていない場合は、Windows API を利用してフォントを列挙する方法があります。
他サイト(LiCLOG様)で詳細が紹介されていますので、参考にしてください。
LiCLOG 様
【VBA×WindowsAPI】使用可能なフォント名をすべて列挙する
WindowsAPIを使いインストール済みのフォント名を列挙しますので、フォント名がインストールされているか確認しましょう。
