Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする

highlight

photo credit: andrewrennie Do Not Worry via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAで色々な検索&置換をする方法についてシリーズにてお伝えしています。

前回の記事はこちら!

Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム
Word VBA初心者向けに検索&置換を活用する方法についてお伝えします。初回ということでWord VBAで検索をするためのFindオブジェクトの基本中の基本の最初の一歩について、どこよりも丁寧に解説します。

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である)間、繰り返し処理をする際に使う構文で、以下のように書きます。

Do While 条件式
‘処理
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ステートメントは本来不要ですが、ちょっと動作がわかるように入れさせて頂いています。

では、このプロシージャを実行してみましょう。

Word VBAで連続で検索をする

ちゃんとプロシージャの実行内で最後の文字列まで連続して検索することができました。

検索結果に蛍光ペンでハイライトをする

順番に検索するだけではマクロとしてはあんまり意味がないので、検索結果に操作をしてみましょう。

蛍光ペンでハイライトをしてみます。

ただ、なぜか蛍光ペンに関してはSelectionオブジェクトに対して直接設定することはできませんので、まずはSelectionオブジェクトから範囲つまりRangeオブジェクトを取り出してから

Selection.Range

その範囲に対して蛍光ペンのハイライトを表すHighlightColorIndexプロパティの値を設定するという段取りになります。

Rangeオブジェクト.HighlightColorIndex = WdColorIndex

設定値には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で検索結果を蛍光ペンでハイライト

期待していたよりも微妙な色でしたね。

まとめ

Word VBAでカーソル位置以降の検索を連続でする方法、また検索結果に蛍光ペンでハイライトをする方法についてお伝えしました。

Do While~Loop文を使うという点、またその条件式にExecuteメソッドを使うという点がポイントですね。

次回ですが、検索結果に対して色々な文字書式の設定をする方法についてお伝えします。

Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
Word VBAで色々な検索&置換をする方法についてお伝えしています。今回はWord VBAでFontオブジェクトを使ってフォントの設定を変更する方法と、そのプロパティを一覧で一挙にまとめました。

どうぞお楽しみに!

連載目次:Word VBAで色々な検索&置換をする方法

Word VBAのFindオブジェクトを使えば色々な条件で目的を探し当てて置換、書式設定、その他、いろいろな処理を施すことができます。Word VBAの検索の最初の一歩から順番にお伝えしていきます!
  1. Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム
  2. Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
  3. Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
  4. Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
  5. Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
  6. Word VBAで検索の方向を変更する方向と文書全体を検索する方法
  7. Word VBAでワイルドカードを使ったパターン検索をする方法
  8. Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法
タイトルとURLをコピーしました