lls(60000, 2)) = aryRnd '検索する数値 searchVal = Int((99999 - 10000 + 1) * Rnd + 10000) End With With Worksheets("test1") 'Vlookup関数で検索 '2列目の値を返す On Error Resume Next '見つからない場合はエラーが返されるのでトラップする tm = Timer hitline = Application.WorksheetFunction.VLookup(searchVal, .Range("A1:B60000"), 2, False) '処理時間を出力します Debug.Print "Vlookup関数", Format(Timer - tm, "0.0######") If Err.Number 0 Then MsgBox "見つかりません", vbOKOnly + vbExclamation, "VLookupによる検索" End If On Error GoTo 0 'match関数で検索 On Error Resume Next '見つからない場合はエラーが返されるのでトラップする tm = Timer hitline = Application.WorksheetFunction.Match(searchVal, .Range("A1:A60000"), 0) '処理時間を出力します Debug.Print "match関数", Format(Timer - tm, "0.0######") If Err.Number 0 Then MsgBox "見つかりません", vbOKOnly + vbExclamation, "matchによる検索" End If On Error GoTo 0 'find関数で検索 tm = Timer Set hitrng = .Range("A1:A60000").Find(what:=searchVal, LookIn:=xlValues, lookat:=xlWhole) '処理時間を出力します Debug.Print "find関数", Format(Timer - tm, "0.0######") If hitrng Is Nothing Then MsgBox "見つかりません", vbOKOnly + vbExclamation, "findによる検索" End If Set hitrng = Nothing '配列から探す tm = Timer aryRange = .Range(.Cells(1, 1), .Cells(60000, 2)) found = False For idx = 1 To UBound(aryRange, 1) If aryRange(idx, 1) = searchVal Then found = True Exit For End If Next idx '処理時間を出力します Debug.Print "配列から", Format(Timer - tm, "0.0######") If Not found Then MsgBox "見つかりません", vbOKOnly + vbExclamation, "配列から検索" End If End With End Sub
このプログラムで5回実行 してみた結果は下記の通り。ただし、PCの性能により絶対値は変わってくると思いますので、各方法の差のみに注目してください。
これからわかるように、検索値が範囲内のどこにあるかでそれぞれの実行結果は異なりますが、おおむねワークシート関数を使う方法が最も高速のようです。
findや配列からさがす方法もそれなりに高速ではあるので、どれを使うかは「好み」の問題かもしれません。