【Word VBA】キーワードを蛍光ペンで着色するWordマクロ(その2)

2013年8月20日

先日の記事で「【コード】キーワードを蛍光ペンで着色するWordマクロ」を紹介いたしました。

私は、もう少し違う仕様で使っています。

改造のやり方の例としてご覧ください。

このマクロでできること

本文中のキーワードを蛍光ペンで着色します。

着色するときに、半角・全角の区別をします。

文字列が選択された状態でマクロを実行すると、インプットボックスにその文字列が自動的に入力されます。

 

まず、文字列を選択して、

マクロを実行すると、「ワードマクロ」がインプットボックスのデフォルト値として表示されます。

[OK]ボタンをクリックして蛍光ペンの着色終了。

マクロの解説

13行目で選択されている文字列を取得します。

myDefault = Trim(Selection.Text)

Trim関数を使って、選択範囲の文字列の先頭と末尾の両方のスペースを削除します。

英単語を選択する場合、末尾に半角スペースが入りうるので(Ctrl + Shift + →または←で選択する場合)、半角スペースを削除するのです。

そうしないと、文末にあるキーワードを着色できませんので。

 

なお、条件分岐をしていますが、その理由は「選択されている文字列を文書内で検索するマクロ」に記載したとおりです。

上記記事内の条件分岐

If Selection.Start = Selection.End Then

と、

今回の記事の条件分岐

If Selection.Type = wdSelectionIP Then

は、同じ意味です。

16行目で、インプットボックスの設定をしています。

myKW = InputBox("文字列を入力してください。" & vbCr & _
 "検索条件:半角と全角を区別する", "一括蛍光ペン", myDefault)

InputBox 関数には、いくつかの引数(設定できる項目)があります。

表示されるメッセージは、必ず指定します。

それ以外は、指定してもしなくてもいいです。

 

VBEのヘルプには、以下のように記載されています。

角括弧の引数は、指定しなくてもいい項目です。

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

promptはメッセージのことです。

 

今回は、タイトルとデフォルト項目を指定しています。

タイトル(title):"一括蛍光ペン"

デフォルト値(default):myDefault

 

42行目で、半角と全角を区別するよう、検索オプションを指定します。

検索オプションのTrueとFalseの設定を変更する場合、Falseの項目を前半に記載し、Trueの項目を後半に記載します。

理由はあるのですが、ひとまずこのルールだけ覚えておけば間違いはないです。

特に、Selectionオブジェクトでこの設定をする場合に、エラーの回避になりますから重要です。

マクロ


Sub キーワードを蛍光ペンで着色2()

  Dim myRange As Range
  Dim myDefault As String 'インプットボックスのデフォルトの文字列
  Dim myKW As String '着色するキーワード
  Dim myColor As String

  'キーワードが選択されていない場合
  If Selection.Type = wdSelectionIP Then
   myDefault = ""
  Else
  'キーワードが選択されている場合
   myDefault = Trim(Selection.Text)
  End If
  
  myKW = InputBox("文字列を入力してください。" & vbCr & _
    "検索条件:半角と全角を区別する", "一括蛍光ペン", myDefault)
  
  '現在の蛍光ペンの色を保存
  myColor = Options.DefaultHighlightColorIndex
 
  '蛍光ペンの色を黄色に設定
  Options.DefaultHighlightColorIndex = wdYellow
 
  'myRange(オブジェクト変数)を設定
  Set myRange = ActiveDocument.Range(0, 0)

  '一括置換を実行(「検索と置換」ダイアログボックスの設定)
  With myRange.Find
   .Text = myKW '検索する文字列
   .Replacement.Text = ""  '置換後の文字列(空欄でOK)
   .Replacement.Highlight = True '置換後の文字列の蛍光ペンをオン
   .Forward = True
   .Wrap = wdFindStop
   .Format = True       '書式の設定をオン
   .MatchCase = False     '大文字と小文字の区別する
   .MatchWholeWord = False   '完全に一致する単語だけを検索する
   .MatchAllWordForms = False '英単語の異なる活用形を検索する
   .MatchSoundsLike = False  'あいまい検索(英)
   .MatchFuzzy = False     'あいまい検索(日)
   .MatchWildcards = False   'ワイルドカードを使用する
   .MatchByte = True      '半角と全角を区別する
   .Execute Replace:=wdReplaceAll
  End With
 
  '蛍光ペンの色を元に戻す
  Options.DefaultHighlightColorIndex = myColor
 
  'myRangeを解放
  Set myRange = Nothing
 
End Sub

関連記事

選択されている文字列を文書内で検索するマクロ

-コード
-,