先日の記事で「【コード】キーワードを蛍光ペンで着色する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








