Home » エクセルマクロ・Excel VBAの使い方 » マクロのサンプル » 自分でインストールしたフォント名一覧を作成するExcelマクロ

自分でインストールしたフォント名一覧を作成するExcelマクロ

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2502(ビルド18526.20168クイック実行)

Grokに指示を出して、自分でインストールした(と思われる)フォントの一覧を作成するマクロをExcel VBAで作ってもらいました。

[スポンサードリンク]

自分でインストールしたフォントを判定する仕様について

最初は、Windows 11にデフォルトでインストールされるフォントを除外した一覧を作ろうとしていました。
Windows 11にデフォルトでインストールされるフォント名をVBAのCollectionにする処理も、Grokがあっさり書いてくれたのでOKかなと思ったのですが、いざ実行してみるとリストアップされるフォントが多すぎました。
Microsoft Officeをインストールすると一緒にインストールされるフォント等もあるためです。

そこで仕様を変更しました。
フォント名に全角文字が入っていて、フォント名の先頭が「游」「HG」「MS」などではないもの、という条件にしました。
私のインストールしたフォントの場合は、フォント名に必ず日本語が入っているため、今回はこの仕様でOKそうです。

自分でインストールしたフォントの一覧を作成するExcelマクロ

実際のコードは以下のとおりです。
以下のマクロを実行すると、アクティブブックの先頭にワークシートが挿入され、自分でインストールしたと思われるフォント名一覧が作成されます。

Sub 自分でインストールしたフォントの一覧を作成する()
 ' ワークシートの挿入
 Dim sht As Worksheet
 Set sht = Sheets.Add(Before:=Sheets(1))
 sht.Cells(1, 1).Value = "全角文字を含むフォント一覧(特定プレフィックス除外)"
 
 ' システムのフォント一覧を取得
 Dim font_list As Object
 Set font_list = Application.CommandBars("Formatting").FindControl(ID:=1728)
 If font_list Is Nothing Then
  MsgBox "フォントリストを取得できませんでした。"
  Exit Sub
 End If
 
 ' 全角文字を含むフォントを抽出(特定プレフィックスを除外)
 Dim row_num As Long
 row_num = 2
 
 Dim i As Long
 For i = 1 To font_list.ListCount
  Dim font_name As String
  font_name = font_list.List(i)
  If _
   HasFullWidthChar(font_name) And _
   Not HasExcludedPrefix(font_name) Then
    With sht.Cells(row_num, 1)
     .Value = font_name
     .Font.Name = font_name
    End With
   row_num = row_num + 1
  End If
 Next i
 
 ' リストのフォントサイズと列幅を調整
 sht.Columns(1).Font.Size = 20
 sht.Columns(1).AutoFit
 
End Sub


' 全角文字が含まれているか判定する関数
Function HasFullWidthChar(txt As String) As Boolean
 Dim i As Long
 For i = 1 To Len(txt)
  Dim char_code As Long
  char_code = AscW(Mid(txt, i, 1))
  If char_code > 255 Then
   HasFullWidthChar = True
   Exit Function
  End If
 Next i
 HasFullWidthChar = False
End Function


' 除外するプレフィックスを持つか判定する関数
Function HasExcludedPrefix(font_name As String) As Boolean
 Dim arr_prefix As Variant
 arr_prefix = Array("游", "メイリオ", "BIZ", "HG", "MS", "UD")
 
 Dim i As Variant
 For Each i In arr_prefix
  If Left(font_name, Len(i)) = i Then
   HasExcludedPrefix = True
   Exit Function
  End If
 Next i
 HasExcludedPrefix = False
End Function

自分一人で作っていたら最初に決めた仕様のWindowsにデフォルトでインストールされるフォント名のCollectionを作る部分だけでかなり時間がかかってしまっていたはずなので、仕様変更をして1時間強でこのマクロを作れるのはありがたいです。

最終更新日時:2025-03-26 18:57

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » マクロのサンプル » 自分でインストールしたフォント名一覧を作成するExcelマクロ

「マクロのサンプル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.