みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで色々な検索&置換をする方法についてシリーズにてお伝えしています。
前回の記事はこちら!
Word VBAの基本中の基本、Findオブジェクトを使った最も簡単な使い方をお伝えしました。
ただあれっすね、一個ずつしか検索しかできないものでしたし、何の検索するだけで何にもしないプログラムでしたので…正直役に立たない…
ということで、今回は少し役に立つ内容にパワーアップをしていきます。
Word VBAでカーソル位置から連続して検索して蛍光ペンでハイライトをする方法についてお伝えします!
前回のおさらい
前回作成したプログラムはこちらでした。
Sub findText()
With Selection.Find
.Text = "Word"
.Execute
End With
End Sub
Selectionオブジェクトつまり、カーソル位置から直後の「Word」という文字列を検索する内容です。
イメージとしては、検索条件を表すFindオブジェクトに、検索文字列であるTextプロパティをセットして、Executeメソッドで検索実行!…という感じですね。
プロシージャを実行するたびに、選択範囲が検索結果の文字列に移動していくという動作になりますので、全部のワードを検索するには、何回も同じプロシージャを繰り返し実行する必要がありました。
まずは、一回のプロシージャ実行で、カーソル位置以降のすべての検索文字列を検索することを目指します。
Word VBAで連続して検索をする方法
カーソル位置から連続して検索するためには、Do While~Loop文とExecuteメソッドを組み合わせて使うと便利です。
Do While~Loop文による繰り返し
Do While~Loop文は指定した条件式が成立している(Trueである)間、繰り返し処理をする際に使う構文で、以下のように書きます。
‘処理
Loop
Executeメソッドの値
また、Findオブジェクトで設定した検索条件で検索を実行するExecuteメソッドですが、ちょっとイケてる特性があります。
Executeメソッドは検索実行のたびに以下のようなルールでTrueかFalseno値を返すのです。
- 検索文字列が見つかった場合:True
- 検索文字列が見つからなかった場合:False
ということは…、先ほどのDo While~Loop文の条件式に、Executeメソッドをそのまま放り込んでゴニョゴニョすれば…
カーソル位置以降を連続検索するプロシージャ
それをコード化したが以下のプロシージャです。
Sub findText()
With Selection.Find
.Text = "Word"
Do While .Execute
Stop
Loop
End With
End Sub
Stopステートメントは本来不要ですが、ちょっと動作がわかるように入れさせて頂いています。
では、このプロシージャを実行してみましょう。
ちゃんとプロシージャの実行内で最後の文字列まで連続して検索することができました。
検索結果に蛍光ペンでハイライトをする
順番に検索するだけではマクロとしてはあんまり意味がないので、検索結果に操作をしてみましょう。
蛍光ペンでハイライトをしてみます。
ただ、なぜか蛍光ペンに関してはSelectionオブジェクトに対して直接設定することはできませんので、まずはSelectionオブジェクトから範囲つまりRangeオブジェクトを取り出してから
その範囲に対して蛍光ペンのハイライトを表すHighlightColorIndexプロパティの値を設定するという段取りになります。
設定値にはWdColorIndexつまりWordの色のインデックスを表す定数を指定します。
WdColorIndexには以下の種類がありますので、好みのものを使用してください。
定数 | 色 |
---|---|
wdAuto | 自動(既定値は黒) |
wdBlack | 黒 |
wdBlue | 青 |
wdBrightGreen | 明るい緑 |
wdByAuthor | 作者が定義した色 |
wdDarkBlue | 濃い青 |
wdDarkRed | 濃い赤 |
wdDarkYellow | 濃い黄色 |
wdGray25 | 網掛け25のグレー |
wdGray50 | 網掛け50のグレー |
wdGreen | 緑 |
wdNoHighlight | ハイライトなし |
wdPink | ピンク |
wdRed | 赤 |
wdTeal | 青緑 |
wdTurquoise | 水色 |
wdViolet | 紫 |
wdWhite | 白 |
wdYellow | 黄色 |
検索結果にハイライトをするプログラム
せっかくなのっで、wdTealを選択して、プロシージャを作ってみました。
Sub findText()
With Selection.Find
.Text = "Word"
Do While .Execute
Selection.Range.HighlightColorIndex = wdTeal
Loop
End With
End Sub
このプロシージャを実行すると、以下のようにティールカラーの蛍光(?)ペンにハイライトされます。
期待していたよりも微妙な色でしたね。
まとめ
Word VBAでカーソル位置以降の検索を連続でする方法、また検索結果に蛍光ペンでハイライトをする方法についてお伝えしました。
Do While~Loop文を使うという点、またその条件式にExecuteメソッドを使うという点がポイントですね。
次回ですが、検索結果に対して色々な文字書式の設定をする方法についてお伝えします。
どうぞお楽しみに!