【エクセルVBA】非表示のセルを含めて検索するときはFindではなくmatchを使う

excelvbaエクセル

Findメゾットでは非表示のセルに対して検索を行えません。

そんな時はワークシート関数のmatchを使います。

Application.WorksheetFunction.Match("検索対象","検査範囲","照合の種類")

"照合の種類"は完全一致させたい場合は0、近似値の場合は1かー1となります。

これはセル関数のmatchと一緒です。

これを使用することによって非表示のセルも検索するようになります。

ただ、複数行や複数列に対してはエラーになります。

これはセル範囲を配列として処理しているからだと思います。

複数行や列だと連想配列になってしまい処理できないのだと思います。

戻り値に関してはFindと違いmatchは最初にヒットした数を戻しますので、一意なものの検索にする必要があります。

また、戻り値から新たにセル番号を指定して値を取得する必要はあります。

例えば

の場合、下記コードだと

Sub testmatch()
testrow = Application.WorksheetFunction.match("林檎", Range("A1:A6"), 0)
testvalue = cells(test ,1).value
End Sub

testrowは「3」

testvalueは「林檎」

となります。

 

ちなみに検索のスピードはFindよりもmatchのほうがはるかに速いです。

コメント

タイトルとURLをコピーしました