Wordで複数の文字の検索を繰り返し実行したいときはないでしょうか。
例えば検索したい文字が複数個あり、それらを一度に検索をしたいときなどです。
そんなときに悩ませることは、
・Word VBAのFindメソッドの使い方がいまいちわからない。
・Wordで複数の検索を繰り返すと同時に検索結果を蛍光ペンでハイライト処理したいが方法がわからない。
ですね。
今回はそんなお悩みを解決する、
Word VBAを使い、Wordドキュメント内の複数の検索を繰り返す方法と、さらに蛍光ペンで着色する方法
についてまとめます。
もくじ
Word VBAのFindで複数文字の検索を繰り返すイメージ
前回の【Word VBA】一括置換と同時に書式変更や蛍光ペンをひく方法!色やサイズ変更も!の補足として、検索処理の説明を重点的にした内容となります。
まず、検索したい文字を含む文書を用意します。
検索した文字が記載されているCSVファイルを用意します。
CSVファイルを設定したVBAをWordへ実装しVBAを実行すると、
検索文字に該当する箇所は蛍光ペンでハイライト表示されます。
さらにさらに蛍光ペンの色を変えたり、
文字サイズを変更したりすることもできます!
カンタンですね。
早速使ってみましょう。
サンプルのWordドキュメント、検索文字リストを準備する
サンプルのWordドキュメント、検索文字リストを準備しましょう。
Wordドキュメントを準備する
検索したい文字を含む文章を記載したWordドキュメントを用意します。
できたら、任意の場所へ保存します。
検索文字をしたCSVファイルを用意する
検索文字をしたCSVファイルを用意します。
こちらのように検索文字の後に改行し、複数入力していきます。
検索文字B
検索文字C
検索文字D
検索文字E
検索文字F
検索文字G
文字コードをShift-JISにしたCSV形式で任意の場所へ保存します。
複数の文字列を検索し蛍光ペンをつけるVBA
VBAを実装する
続いてWordのVisual Basic EditorへVBAを実装しましょう。
実装にあたり、変更頂きたい箇所は以下です。
・検索文字リストファイルを指定する
検索文字リストを格納したパスへ変更してください。
csvFilePass = “C:\Users\****\Documents\****\検索リスト.csv”
VBAソースコードは以下の通りです。
Sub 複数の文字列を検索しハイライト表示する()
Dim csvFilePass
Dim strBuf As String
Dim tmp As Variant
'置換リストファイルを指定します。
csvFilePass = "C:\Users\****\Documents\****\検索リスト.csv"
Open csvFilePass For Input As #1
'CSV内の行数分置換処理を繰り返します。
Do Until EOF(1)
'1行分のデータを読み込みます。
Line Input #1, strBuf
'文字列を","で分割します。
tmp = Split(strBuf, ",")
Options.DefaultHighlightColorIndex = wdYellow '蛍光ペン色:黄色(デフォルト)
'Options.DefaultHighlightColorIndex = wdBrightGreen '蛍光ペン色:緑
'Options.DefaultHighlightColorIndex = wdTurquoise '蛍光ペン色:水色
'Options.DefaultHighlightColorIndex = wdPink '蛍光ペン色:ピンク
'検索・置換の設定をおこないます。
With Selection.Find
.Format = True 'フォーマット変更を有効する(True)、有効にしない(False)を設定します。
.ClearFormatting '検索条件から書式を削除します。
.Replacement.ClearFormatting '置換対象の書式を削除します。
.Replacement.Highlight = True '置換対象を蛍光ペンで着色します。
'.Replacement.Font.Bold = True '置換対象の書式を太字にします。
'.Replacement.Font.Size = 20 '置換対象の文字サイズを指定します。
.Text = tmp(0) '検索ワードを代入します。
.Replacement.Text = "" '検索の場合は置換ワードは空です。
.Forward = True '文書に対して末尾の方向(順方向)に検索します。
.Wrap = wdFindContinue '先頭(または末尾)に戻って検索をします。
.MatchCase = True '英語の大文字と小文字の区別する(True)、区別しない(False)を設定します。
.MatchWholeWord = False '単語全体を検索対象としない設定にします。
.MatchByte = False '半角と全角を区別する(True)、区別しない(False)を設定します。
.MatchAllWordForms = False '英単語の異なる活用形検索を有効する(True)、有効にしない(False)を設定します。
.MatchWildcards = False 'ワイルドカード(?*など任意の文字)を使った検索を有効する(True)、有効にしない(False)を設定します。
.MatchSoundsLike = False '誤った置換を防止するため、英語のあいまいな検索はOFFにします。
.MatchFuzzy = False '誤った置換を防止するため、日本語のあいまいな検索はOFFにします。
End With
'文字を除く置換を実行(全て置換)します。
Selection.Find.Execute Replace:=wdReplaceAll
Loop
Close #1
MsgBox "検索が完了しました。"
End Sub
実装手順は以下の通りです。
①Wordを新規に開き、「開発」タブをクリックし、
「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインの「Nomal」を右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
早速VBAの実行をしてみましょう。
①「開発」タブの「マクロ」をクリックし「複数の文字列を検索しハイライト表示する」を選択し、「実行」をクリックします。
②「置換が完了しました。」が表示されたら、
置換されていることを確認します。
変更前
変更後
はい!
検索と同時にハイライト表示されていますね!
VBAの説明
検索・置換処理の説明についてはこちらの記事の説明をご参照ください。
今回変更した箇所は
置換後の文字指定を空にしたことです。
これにより、文字の変換はされず、書式のみ変換されます。
また、追加した箇所は、Findメソッドの置換処理対象Replacementの蛍光ペンを意味するHighlightプロパティとなります。
「True」を指定することにより置換対象を蛍光ペンで着色する内容となります。
色はデフォルトの黄色となります。
色の変更もできますので、次で説明をします。
複数の文字列を検索し蛍光ペンの色を変え、着色する
検索処理、蛍光ペンの色をかえて着色する処理を加えていきます。
DefaultHighlightColorIndexに対して色の識別子を指定します。
指定できる代表的な色は
こちらに出ている黄色、緑色、水色、ピンク色になります。
Options.DefaultHighlightColorIndex = wdBrightGreen ‘蛍光ペン色:緑
Options.DefaultHighlightColorIndex = wdTurquoise ‘蛍光ペン色:水色
Options.DefaultHighlightColorIndex = wdPink ‘蛍光ペン色:ピンク
好きな色を選択して設定してみてください。
追加する場所は、
With Selection.Find
の上あたりとなります。
サンプルでは水色を選択しました。
実装し実行してみましょう。
はい、蛍光ペンの色が水色になりましたね!
複数の文字列を置換し書式変更(太字)とサイズ変更をする
蛍光ペン着色に加え書式変更(太字)とサイズを変更する処理を加えていきます。
実装にあたり、変更頂きたい箇所は以下です。
.Replacement.Font.Bold = True ‘置換対象の書式を太字にします。
Findメソッドの置換処理対象ReplacementのFontプロパティを追加します。
「Bold 」プロパティは「True」にすると置換対象の書式を太字にします。
次に標準のフォントサイズより大きくしてみます。
追加頂きたいコードは以下です。
Findメソッドの置換処理対象ReplacementのFont.Sizeプロパティを追加します。
サイズは20ポイントとしています。
追加して、実行をしてみましょう。
はい、書式が太字になり、サイズも大きくなりましたね!
さいごに
いかがでしょうか。
今回は、
Word VBAを使い、Wordドキュメント内の複数の検索を繰り返す方法と、さらに蛍光ペンで着色する方法
についてまとめました。
今回のVBAと置換リストをうまく活用すれば、短期間で処理ができるので、ぜひ活用いただければと思います。
コメントを残す