【Word VBA】表の列で文字列を比較するWordマクロ

2015年1月5日

明けましておめでとうございます。本年もよろしくお願いいたします。

今年最初のマクロはこちらです。正月と何にも関係ありません。

Wordで動く翻訳チェックソフト「色deチェック 」で今後実装する機能です。一足先にご利用ください。

このマクロでできること(Word 2007以降で使えます)

表の列で単語のペアを強調表示します。

ここでいう強調表示というのは蛍光ペンのことではなく、「選択されている文字列を、Word文書内で強調表示するマクロ 」で紹介した強調表示のことです。

表内にカーソルを置いてマクロを実行します。

蛍光ペン

文字列が選択されていればその語句が強調表示の対象になります。
文字列が選択されていない場合には、近くの単語が選択されます。

今回は、文字列が選択されていないので、カーソルの近くにあった「ペン」が自動的に選択されました。

蛍光ペン

インプットボックスが表示されるので、対になる単語を入力します。

今回の例では、pen と入力しました。

[OK] ボタンをクリックすると、カーソルが置かれていた行の単語のペアが強調表示されます。

蛍光ペン

マクロの解説

HitHighlight メソッドを使います。

メソッドのオプションでハイライトの色(黄色)と文字の色(赤色)を設定し、検索条件として「完全に一致する単語だけを検索する」をオフにしました。

強調表示は、ClearHitHighlight メソッド を用いて解除します。

マクロ


Sub 対訳表で比較()

 Dim myText1 As String
 Dim myText2 As String
 Dim myRange As Range

 'カーソルが表内であれば、実行します。
 If Selection.Information(wdWithInTable) = False Then
  MsgBox "2列以上の表内で実行してください。"
  Exit Sub
 End If
 
 '語句を選択します
 If Selection.Type = wdSelectionIP Then
  Set myRange = Selection.Range
  myRange.Expand wdWord
  myText1 = Trim(myRange.Text)
 Else
  myText1 = Trim(Selection.Text)
 End If
 
 'Rangeオブジェクトにカーソルのある行を代入します
 Set myRange = Selection.Rows(1).Range

 'Inputboxを使って、myText1 に代入した語句に
 '対応する語句を入力します
 myText2 = Trim(InputBox(myText1 & _
  " に対応する語句を入力してください。", "用語を比較"))
 
 If myText2 = "" Then Exit Sub

 'Find.HitHighlight メソッド を用いて
 'myText1 と myText2 をハイライトします
 '英語の複数形もハイライトしたいので、
 'MatchWholeWord:=False(部分一致)とします
 With myRange.Find
   .ClearHitHighlight
   .HitHighlight FindText:=myText1, _
    HighlightColor:=wdColorYellow, _
    TextColor:=wdColorRed, MatchWholeWord:=False
   .HitHighlight FindText:=myText2, _
    HighlightColor:=wdColorYellow, _
    TextColor:=wdColorRed, MatchWholeWord:=False
 End With

 Set myRange = Nothing

End Sub


Sub 強調表示を解除()

 ActiveDocument.Range.Find.ClearHitHighlight
 
End Sub

関連記事

選択されている文字列を、Word文書内で強調表示するマクロ

『検索された項目の強調表示』機能 Word2007

Word2010における検索機能の紹介

-コード
-, ,