【コード】Symbolフォントのギリシャ文字を蛍光ペンで着色するWordマクロ(解説)

2017年10月8日追記
本記事にはSymbolフォントの文字入力で間違った記述があります。
文字入力方法の修正内容を以下の記事でご確認ください。
【コード】こうすればできる!!シンボルフォントを検索するWordマクロ(4) 

Symbolフォントのギリシャ文字を蛍光ペンで着色するマクロ」に関連した記事です。

少しだけ細かく説明いたします。

マクロのポイント(上記記事のコードを後半に掲載しました)

.Replacement.Text = ""

上記のとおり、置換後の文字列を空欄にしてあります。

今回のように蛍光ペンで着色をしたり、書式を変更する場合には、文字列を入れずに置換ができます

参考情報ですが、書式を指定せずに置換後の文字列を空欄にした場合には、検索する文字列の「削除」になりますね

さて、以下のように「検索する文字列」と「置換後の文字列」を同じものをいれても、書式の変更の場合はできますね。

.Text = ChrW(i)
 .Replacement.Text = ChrW(i)

ただ、今回は、あえて上記の通りにはしておりません。

置換後の文字列に文字を入力すると、書式だけではなく文字列の入力を伴います

実は、上記のようにSymbolフォントを置換後の文字列に使用すると、文字化けしてしまうことがあります

置換後の文字列を設定すると、文字を入力します。そのときに入力するのは「Symbolフォント」のギリシャ文字の文字コードなのですね。

標準フォントがMS 明朝とCentury の組み合わせの場合、これらに入力した文字コードに対応するものがなくて以下のように文字化けしてしまいます。

フォントの種類をSymbolに変換すると、以下のように正常な状態に戻ります。文字コードとしての情報は持っているのですが、表示形式が間違っているのですね。

Symbolフォントのギリシャ文字を入力するマクロ」でも同様の説明をいたしました。

というわけで、文字列の入力はせずに、蛍光ペンの着色だけをするために、置換後の文字列を空欄にしました。

マクロ


Sub Symbol_Greece_Check()

  Dim i As Long '文字コード用
  Dim myRange As Range 'Rangeオブジェクト
  Dim myHighLight As String '蛍光ペンの設定の保存用
  Dim nCount As Integer '見つけたか文字種の数
  Dim myMessage As String 'メッセージ
    
  '蛍光ペンの設定
  myHighLight = Options.DefaultHighlightColorIndex
  Options.DefaultHighlightColorIndex = wdYellow
  
  'Rangeオブジェクトの設定
  Set myRange = ActiveDocument.Range(0, 0)
    
  'シンボルフォントのギリシャ文字を黄色の蛍光ペンで着色
  For i = 61505 To 61562
    If i >= 61531 And i <= 61536 Then GoTo Proc_Skip
    
    myRange.SetRange Start:=0, End:=0
        
    'ギリシャ文字を検索して黄色に着色
    With myRange.Find
      .Text = ChrW(i)
      .Replacement.Text = ""
      .Replacement.Highlight = True
      .Wrap = wdFindStop
      .Forward = True
      .Execute
      
      If .Found = True Then
        .Execute Replace:=wdReplaceAll
        nCount = nCount + 1
      End If
        
    End With
  
Proc_Skip:
  Next i
  
  If nCount > 0 Then
    myMessage = StrConv(nCount, vbWide) & "種類のSymbolフォントのギリシャ文字を着色しました。"
  Else
    myMessage = "Symbolフォントのギリシャ文字は見つかりませんでした。"
  End If
  
  MsgBox myMessage, vbInformation, "ギリシャ文字チェック"
  
  Options.DefaultHighlightColorIndex = myHighLight
  Set myRange = Nothing

End Sub

関連記事

トップへ戻る