Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドで検索して行を選択する

Findメソッドで検索して行を選択する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「マクロ 検索した文字の行を選択する」
「vba 検索にヒットした行を選択」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

どのアプリケーションの話かわかりませんけれどVBAで、文字列を検索してみつかった行全体を選択するにはどのようなコードを書けばいいのかを探している方による検索です。

[スポンサードリンク]

文字列を検索して行全体を選択するサンプルマクロ

参考になりそうな簡単なExcelマクロをご紹介しておきます。

Sub 文字列を検索して行全体を選択する()
 Dim rng As Range

 Set rng = Range("A:A").Find("北海道")

 If rng Is Nothing Then
  MsgBox "みつかりませんでした。"
 Else
  rng.EntireRow.Select
 End If
End Sub

上記のマクロを実行すると、A列で「北海道」という文字列を検索して、みつからなかったときには「みつかりませんでした。」というメッセージボックスが表示され、みつかった場合はその行全体を選択します。

サンプルマクロの解説

A列に必ず「北海道」という文字列が入力されているという保証があるのなら、
  Range("A:A").Find("北海道").EntireRow.Select
というコードだけでOKです。

ですが、実務で使われるマクロの検索を考えると、文字列がみつからないケースは想定しておかざるを得ないでしょう。

オブジェクトブラウザー等で確認するとわかるとおり、RangeオブジェクトのFindメソッドは、検索を行ってみつかった場合は、みつかったセルを表すRangeオブジェクトを返してきますが、

VBAで文字列を検索して行を選択する

みつからなかった場合はNothingを返してきます。

このことを利用して、Range.Findメソッドの戻りをオブジェクト変数・rngにセットして、
  Dim rng As Range
  Set rng = Range("A:A").Find("北海道")

その変数・rngがNothingかどうかで、処理を分岐して、
  If rng Is Nothing Then

みつからなかったときにはメッセージを表示して、
   MsgBox "みつかりませんでした。"

Nothingではなかったとき(みつかったとき)に、RangeオブジェクトのEntireRowプロパティで行全体を取得して、RangeオブジェクトのSelectメソッドで選択を行っています。
  Else
   rng.EntireRow.Select

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドで検索して行を選択する

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.