Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

2 CRITERIA VLOOKUP IN EXCEL

This custom function  can use the 1st 2 Columns of a table as matching criteria and return the nth

column row to the right of the matching row range.

Function Two_Con_Vlookup(Table_Range As Range, Return_Col As Long, Col1_Fnd,


Col2_Fnd)

''EXCEL 2003 OR ABOVE

''WRITTEN BY OZGRID.COM

Dim rCheck As Range, bFound As Boolean, lLoop As Long

On Error Resume Next

Set rCheck = Table_Range.Columns(1).Cells(1, 1)

With WorksheetFunction

For lLoop = 1 To .CountIf(Table_Range.Columns(1), Col1_Fnd)

Set rCheck = Table_Range.Columns(1).Find(Col1_Fnd, rCheck,


xlValues, xlWhole, xlNext, xlRows, False)

If UCase(rCheck(1, 2)) = UCase(Col2_Fnd) Then

bFound = True

Exit For
End If

Next lLoop

End With

If bFound = True Then

Two_Con_Vlookup = rCheck(1, Return_Col)

Else

Two_Con_Vlookup = "#N/A"

End If

End Function

OR

Function Two_Con_Vlookup(Table_Range As Range, Return_Col As Long, Col1_Fnd,


Col2_Fnd)

''PRE EXCEL 2003

''WRITTEN BY OZGRID.COM

Dim rCheck As Range, bFound As Boolean, lLoop As Long, lRow As Long

On Error Resume Next


Set rCheck = Table_Range.Columns(1).Cells(1, 1)

With WorksheetFunction

For lLoop = 1 To .CountIf(Table_Range.Columns(1), Col1_Fnd)

lRow = .Match(Col1_Fnd, Table_Range.Columns(1).Range("A" & lRow +


1 & ":A65536"), 0) + lRow

Set rCheck = Table_Range.Columns(1).Range("A" & lRow)

If UCase(rCheck(1, 2)) = UCase(Col2_Fnd) Then

bFound = True

Exit For

End If

Next lLoop

End With

If bFound = True Then

Two_Con_Vlookup = rCheck(1, Return_Col)

Else

Two_Con_Vlookup = "#N/A"

End If
End Function

Use like;

=Two_Con_Vlookup($A$1:$H$20,6,"Apr",4)

in any cell other than $A$1:$H$20

Where $A$1:$H$20 is the table range

6 is the nth column to return the matching row from.

"Apr" and 4 are the 2 conditions to match in the 1st 2 Columns

You might also like