・こうすればできる!!シンボルフォントの検索 ・こうすればできる!!シンボルフォントの検索(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