皆さんは、VBAでセル範囲を検索する方法を知っていますか?
セル範囲を検索する方法の一つに、MATCH関数があります。VBAでワークシート関数を使えば、ExcelのMATCH関数をVBAで使うことができるので、Excelで使ったことがある方にもおすすめです!
そこで今回は、
といった基礎的なことから、応用的な方法まで、徹底的に解説します!
MATCH関数とは
MATCH関数とは、範囲内から指定した値を検索して、上から数えた位置を求める関数です。VBAではワークシート関数を使って、ExcelのMATCH関数を使うことができます。使い方は以下の通りです。
使い方:
WorksheetFunction.Match( 検索値 , 検索範囲 , 検索方法)
サンプル:
WorksheetFunction.Match( "侍エンジニア" , Range("A1:B5") , 0)
「侍エンジニア」という文字列をA1 ~ B5セルの範囲で検索して、見つかった位置を取得しているサンプルです。第3引数の検索方法に入力する値によって、検索方法が変わるので少し注意が必要です。
- 0 :検索範囲から完全一致で検索
- 1 :検索範囲から近似値以下で最大値を検索
- -1:検索範囲から近似値以下で最小値を検索
1、-1を選択する場合は、データを事前に以下のように並べ替えておく必要があるので、更に注意が必要です。
- 1 :データを事前に昇順
- -1:データを事前に降順
ほとんど0を使うケースが多いですが、近似値で検索するためにMATCH関数を使う場合は注意してくださいね。
サンプルコード
次に、サンプルコードをもとに具体的な使い方を解説します。
事前に用意したシートの内容:
サンプルコード:
Sub Test() MsgBox WorksheetFunction.Match("侍エンジニア", Range("A1:A4"), 0) End Sub
実行結果:
このように、検索した結果の位置を簡単に調べることができます。行を挿入する場合、データをコピー・削除する場合など覚えておくと便利です。
INDEX関数を使ったVLOOKUP風の使い方とは
Excelをよく使う方だと、VLOOKUP関数は馴染みがある方が多いのではないでしょうか。INDEX関数とMATCH関数を応用すると、VLOOKUP関数と同じ処理をとても速く動かすことができるので、合わせて覚えておくのがおすすめです。
以下記事で詳しく解説しているので、気になる方は見てみてくださいね!
高度な検索がしたい方におすすめなFindメソッドとは
MATCH関数は便利かつ処理が速いのでおすすめなのですが、完全一致 or ざっくりとした近似値しか調べることができません。高度な検索がしたい場合は、Findメソッドがおすすめです!Findメソッドの使い方については以下記事で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAでMATCH関数を使ってセル範囲を検索する方法について解説しました。データを検索してセルの位置を調べるケースはよくあるので、覚えておくと便利です。
別記事として紹介したVLOOKUP関数、INDEX関数を応用した方法、Findメソッドの使い方も合わせて覚えておくと、応用が利くのでおすめです!ぜひ、使ってみてくださいね!