文字フォントの種類を変更する方法

今回の目標

この記事では、フォントの変更方法や取得方法を解説します。

目標リスト

  • フォントを変更および取得できるようになる
  • フォントがインストールされているか確認できるようになる

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を使いインストール済みのフォント名を列挙しますので、フォント名がインストールされているか確認しましょう。

関連リンク

ページの先頭へ