【Word VBA】こうすればできる!!シンボルフォントを検索するWordマクロ(2)

こうすればできる!!シンボルフォントの検索こうすればできる!!シンボルフォントの検索(2)   ←現在地
・こうすればできる!!シンボルフォントの検索(3)こうすればできる!!シンボルフォントを検索(4)
2017/09/23追記
この記事のマクロには間違いがあります。
修正版を「こうすればできる!!シンボルフォントを検索(4)」に掲載しました。

昨日の記事、「こうすればできる!!シンボルフォントの検索」のマクロの改良版です。修正の理由は、こちらの記事で解説したとおりです。

プログラム解説

追加した部分は、下記のプログラムの4行目です。

変数の宣言は、

  Dim 変数 As 変数の種類

とします。

今回は、数値が6万番以上なので、長整数型(Long)変数にしました。

-2,147,483,648 ~ 2,147,483,647 の範囲の値をとります。

一般に、数字というと、整数型 (Integer)と思われている方もいらっしゃるかもしれませんが、この数字を使うとエラーになります。

なぜなら、Integerは、-32,768 ~ 32,767 の範囲の値をとるように決められているから。

今回の 61505 という数字を代入した瞬間に、オーバーフロー(こらえきれずに、こぼれた!)というエラーになります。

一般的に、私は文章におけるカーソル位置を検出する場合には長整数型変数(Long)を使います

Integerでは、少し長い文章を書くと、カーソル位置が取れなくてオーバーフローしてしまうから。

プログラム


Sub Symbolフォント探し()

 Dim SS, SE As Long 'カーソル位置の保存用
 Dim i As Long '文字コード用
 
 '画面更新非表示
 Application.ScreenUpdating = False
 
 'カーソルの現在位置を保存
 SS = Selection.Start
 SE = Selection.End
       
 'シンボルフォントのギリシャ文字をピンクの蛍光ペンで着色
 For i = 61505 To 61562
  
  If i >= 61531 And i <= 61536 Then GoTo Proc_Skip
 
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
   .Text = ChrW(i)
   .Forward = True
   .Wrap = wdFindContinue
   .Format = False
   .MatchCase = False
   .MatchWholeWord = False
   .MatchByte = False
   .MatchAllWordForms = False
   .MatchSoundsLike = False
   .MatchWildcards = False
   .MatchFuzzy = True
   .Execute
  End With
  
  Do While Selection.Find.Found = True
   Selection.Range.HighlightColorIndex = wdPink
   Selection.Find.Execute
  Loop
   
Proc_Skip:
 Next i

 '▼検索・置換条件の初期化
 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find
  .Text = ""
  .Replacement.Text = ""
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
  .Execute
 End With
 
 'カーソルの位置を戻す
 Selection.Start = SS
 Selection.End = SE

 '画面更新表示
 Application.ScreenUpdating = True

End Sub

トップへ戻る