Vlookup Searching All Entries Of A Lookup Table
This example shows how to use vlookup to search for an exact match in a translation table that is not sorted.
Program Code
Option Explicit
Option Base 1
Sub VlookupTestAndTiming()
Dim rngAnswerRange As Range
Dim C As Range
Dim i As Long
Dim intSearchForMe As Long
Dim varAnswerFound As Variant
Dim rngTableArray As Range
Dim dteStartTime As Single
Dim dteEndTime As Single
' ****************************************************************
' Initialize The Ranges
' ****************************************************************
Set rngAnswerRange = Range("B1:B20000")
Set rngTableArray = Range("A1:B20000")
If MsgBox("Initialize Rows?", vbYesNo) = vbNo Then
GoTo Skip_Initialize
End If
' ****************************************************************
' Initialize The First Column Using Cells Method
' ****************************************************************
For i = 1& To 20000
Cells(i, 1&).Value = i
Next i
' ****************************************************************
' Initialize The Second Column Using The Range Method
' ****************************************************************
For Each C In rngAnswerRange
C.Value = C.Offset(0, -1).Value * 2
Next C
Skip_Initialize:
' ****************************************************************
' Exercise The Vlookup
' ****************************************************************
dteStartTime = Timer
On Error Resume Next
For i = 1 To 20000
intSearchForMe = Cells(i, 1&).Value
' ****************************************************************
' Vlookup Parameters
' (1) The Value You Are Looking For
' (2) The Range Of The Values Table You Are Searching
' (3) The Column Number of the Value Table That Contains the "Answer"
' (4) False - Find An Exact Match - Value Table Does Not Need To Be
' In Order
' ****************************************************************
varAnswerFound = Application.VLookup(intSearchForMe, rngTableArray, 2, False)
If IsError(varAnswerFound) Then
MsgBox ("Error At Row " & i)
Exit Sub
End If
Next i
dteEndTime = Timer
MsgBox ("Time To Run = " & dteEndTime - dteStartTime)
On Error GoTo 0
End Sub