【Word VBA】使用中のフォントの名前を調べるWordマクロ

2010年5月9日

今日、水野麻子さんのブログに「MS明朝とCenturyは「同じ」フォント!? 」という記事がありました。

これ、やっかいですね。

使用中のフォントの種類を検索するマクロを作ってみましたが、最初訳がわからなくて手こずりました。

僕が最初に作ったマクロは、「利用可能なフォント種類のうち、選択されている文章中で使われている場合には、そのフォントの種類を書き出す」という処理をしています。

しかし、文書中に使用されている(表示されている)フォントが使用中のフォントとして認識されてませんでした。

理由は、水野麻子さんが説明されているとおりなので、僕はあえて説明しませんが、不可解なことがあるものです。

そんなわけで、水野麻子さんの見解もふまえて、検索結果の表示に一工夫をしたプログラムの紹介です。

使い方

まず、ご登録を。

マクロの登録方法は、水野麻子さんのこちらの記事をご覧ください。

マクロコードのコピーと使い方

実行すると、以下のような検索結果が表示されます。

フォント

上記のような、使用中のフォントが検出されない事態への対策として、以下のようにしました。

検索結果にて、標準のスタイルに設定されているフォント名のあとに (標準) と追記して表示しています。

標準のフォントに関しては、「使用されているとき」も「使用されていないとき」も、常に使用中のフォントとして表示するようになっています。

検索結果は、参考情報を示すものとご理解ください。検索されていないフォントもあるかも。

このマクロを使うときには、その点にご注意いただければいいかと思います。

不思議な結果が表示されたら、ご一報ください。

調べてみます。

プログラム


Sub フォントの種類を探す()

 Dim myFont(1 To 2) As String
 Dim myFontInUse As String
 Dim aFont As Variant
 Dim i As Integer
 
 On Error GoTo Name_Check_Error
 
 '標準スタイルのフォント確認
 With ActiveDocument.Styles(wdStyleNormal).Font
  myFont(1) = .NameFarEast '日本語のフォント
  myFont(2) = .NameAscii '英数字のフォント
 End With
 
 For i = 1 To 2
  myFontInUse = myFontInUse & vbCr & "  " & myFont(i) & "(標準)"
 Next i
 
 
 For Each aFont In FontNames
 
  If aFont = myFont(1) Or aFont = myFont(2) Then
   GoTo NextFont
  End If
  
  With ActiveDocument.Content.Find
   .ClearFormatting
   .Text = ""
   .Font.Name = aFont
   .Execute Format:=True
   If .Found = True Then
    myFontInUse = myFontInUse & vbCr & "  " & aFont
   End If
  End With
  
NextFont:
 
 Next aFont
 
 MsgBox "この文書では" & myFontInUse & vbCr & "が使われています。", _
     vbInformation, "使用中のフォントの種類"
 
 On Error GoTo 0
 Exit Sub
 
Name_Check_Error:
 
 MsgBox "エラーが発生しました。終了します。"

End Sub

コメント

  • 6. Re:Re:Re:Re:Re:フォントごとに何文字か?

    >tomkさん

    ご連絡ありがとうございました。

    思いついたときで結構です。
    またご連絡ください。

  • 5. Re:Re:Re:Re:フォントごとに何文字か?
    >新田順也☆ワードプログラマーさん
    返事が遅くなって申し訳ありません。もう少し考えてみます。ありがとうございました。
    tomk 返信する
  • 4. Re:Re:Re:フォントごとに何文字か?

    >tomkさん

    どうも、ご連絡ありがとうございます。

    2バイト文字の混入と、フォントごとの使用数
    をカウントすることの関係がよくつかめません。

    もう少し、対象となるファイルの状況と
    欲しい結果が見えるといいのですが。

  • 3. Re:Re:フォントごとに何文字か?

    >新田順也☆ワードプログラマーさん

    早々のご回答ありがとうございます。

    小生,ISO規格関係の仕事をしており,海外へ送るWORD文書は文字化けを起さないように気をつけているのですが,他の方々からの修正意見を加えていると,思わぬところで2バイト系の文字が入っていることがあるので,送付前に確認したいと考えています。

    英文フォントはTimes New RomanとArialを使うことになっているので,一括置換というわけにはいかないのです。

    tomk 返信する
  • 2. Re:フォントごとに何文字か?

    >tomkさん

    ご質問ありがとうございます。

    フォントの検出は非常に難しくて、実は正確に検出されません。

    フォントの種類によっては、公開してあるプログラムでは正確に認識されないのです。

    それが前提になることをご理解ください。

    あと、スペースや改行もフォントの種類を持っていますので、それも1文字に数えてもよければ簡単にできそうな気がします。

    何のために使うのか(結果の精度など)教えていただけませんか?そうすればプログラミングのめどが立てられるかもしれません。

  • 1. フォントごとに何文字か?
    探していたものに近いプログラムなのですが,それぞれのフォントの使用数をカウントして表示することはできませんか?
    tomk

-コード
-