【エクセルVBA】指定した範囲内から値を検索するFindメソッドとその使い方


find,method,eyecatch,excel.vba

みなさまこんにちは、ノグチです。

前回は、エクセルのChangeイベントと、入力規則をVBAで操作するValidationオブジェクトを使って、セルに入力した値をマスタシートから検索し、ヒットした値をセルにプルダウンメニューに表示する方法をご紹介しました。

【エクセルVBA】Changeイベントと組み合わせてもっと便利に!検索にヒットした値をドロップダウンリストに表示する方法
エクセルのChangeイベントと、Validationオブジェクトを用いたドロップダウンリストを作成する方法を組み合わせて、セルに入力した値をマスタシートから検索し、検索にヒットした値を入力したセルのドロップダウンリストに表示させる方法をご紹介しています。この方法を使えば、入力作業が楽になるかもしれません。

その記事の中で使っていたFindメソッド

値の検索にはワークシート関数のVlookupなどがありますが、このFindメソッドも値を検索するときにとっても便利なのです。

ということで今回は、このFindメソッドを使って、セルに入力された値で指定範囲を検索する方法をご紹介します!

Findメソッドとは?

Findメソッドは、指定したRange型の範囲から指定した文字列を持つセルを返すメソッドです。

Findメソッドの記述方法

記述方法はこちら。

Rangeオブジェクト.Find(パラメータ)

検索したい値が見つかった場合はそのセルを表すRangeオブジェクトを、検索したい値が指定した範囲の中で見つからなかった場合にはNothingを返してくれます。

Findメソッドのパラメータ

Findメソッドにはいくつかパラメータがありますが、個人的によく使うパラメータが以下です。

パラメータ 役割と指定する値
What 検索したい値を指定するパラメータで、もちろん指定必須です。
LookAt 検索したい値で、部分一致検索なのか全体一致検索なのかを指定します。部分一致の場合はxlPartを、全体一致の場合はxlWholeを指定します。
SearchOrder 行方向に検索するのか列方向に検索するのかを指定します。行の場合はxlByColumnsを、列の場合はxlByRowsを指定します。省略した場合はxlByColumnsがデフォルトでセットされます。

パラメータを使ってFindメソッドを書いてみると、こんな感じになります。

Findメソッドを使った検索コードの例

このメソッドを使って、前回の記事でもご紹介した、請求書シートに入力した値でマスタシートを検索し、入力したセルに検索結果を返す、というコードを書いてみましょう。

請求書シートがこちら、

excel,vba,event,請求書

マスタシートがこちらです。

excel,vba,event,マスタシート

請求書シートのB5セルに入力した値で、マスタシートの得意先リストを部分一致検索したい場合、このようなコードになります。

戻り値がNothingの時の処理も大切

Findメソッドを使う場合は、戻り値がNothingだったとき(検索にヒットする値を持つセルが見つからなかったとき)のことも考えておきましょう。

上のコードで戻り値がNothingだった場合、9行目で検索にヒットした値をセルに出力するときにエラーになってしまいますので、戻り値がNothingだった場合の処理もセットで書くようにしましょう。

検索にヒットするセルがある場合と、Nothingの場合をIF文を使って分岐させると、こんな感じのコードになります。

または、On Error Resume Nextを差し込んでおく方法もありますよ。

いずれにせよ、戻り値がNothing の場合の処理は、必ず書き込んでおくのが安心ですね。

検索した値を取得してみる

では、上のコードを実際に動かしてみます。
検索値を入力するセルに”AAA”と入力します。
エクセル検索値,入力,請求書シート

マスタシートでは、”AAA”を含む得意先名は「AAA株式会社」だけなので、B5セルに「AAA株式会社」と出力されるはずです。

コードを動かしてみると…

エクセル,Find,検索結果

このとおり、ちゃんとB5セルに「AAA株式会社」が出力されていますね。

最後に

今回は、Findメソッドを使って、セルに入力された値で指定範囲を検索する方法をご紹介しました。

次回は、検索値に対して複数の値がヒットする可能性がある場合に使える、FindNextメソッドをご紹介します。

【エクセルVBA】FindNextメソッドで指定範囲内の検索条件にヒットする値をすべて取得する方法
Findextメソッドを使って、指定した範囲内で検索条件にヒットする値を全て取得する方法をご紹介しています。Findメソッドだけだと、指定範囲で一番最初に検索にヒットする値しか取得できませんが、FindNextメソッドなら複数の検索結果を取得できますよ。

それでは最後までお読みいただき、ありがとうございました!


The following two tabs change content below.

ノグチ

元製造子会社SE、ERPパッケージシステムコンサルタント(販売管理、購買管理、生産管理、設備管理他)。 業務システム保守・導入両方やった経験をお伝えすることで、少しでもシステムや手作業に悩まされる人が減ればいいなぁ、楽にお仕事してもらえたらいいなぁと日々夢見ております。

コメント