## VLOOKUP MEETING N conditions

This month I would like to show you a quick and easy way to do a multi-condition VLOOKUP. As you may know, VLOOKUP normally looks up data in the 1st column of a data table (Note that table should be sorted in ascending order by the first column) and returns the corresponding column we specify. Say we have a table of data in A1:G9 and we wanted to VLOOKUP based on our 1st 3 Columns. Insert a new column at column A so your table now occupies B1:H9. We will now use this new Column to Concatenate our 1st 3 Columns. So in A2 (Row 1 are headings) enter;

=B2&"+"&C2&"+"&D2

and then copy down to the last row of our Table. This Column ("A") can now be hidden (optional)

Now we will create a Data Validation list to show our Concatenated Columns. So in any cell, outside our table (I'm using J1), go to Data | Data Validation. Choose the "List" option from the "Allow:" box and set our "Source:" box to A2:A9. Now in J2 enter this VLOOKUP Formula;

=IF(J1="","",VLOOKUP(\$J\$1,\$A\$1:\$H\$9,5,FALSE))

Now, as we choose values from our Data Validation list we can return a value that correspondence with multi-lookup-conditions.

Let's make it even more user friendly by highlighting the table row that meets 3 conditions in J1. Highlight/Select A2:H8 and then activate Conditional Formatting and use the Formula option. In the formula box, use;

=\$A2=\$J\$1

Set your Fill color to any color, Yellow is my preference, and OK it. It is important to note that \$A2 is a Relative row and Absolute Column reference. This forces the whole table row to be highlighted.

While the above VLOOKUP allows us to return a VLOOKUP that meets 3 conditions, it doesn't return all columns that meet our condition, or all rows (assuming more than 1 record meets the 3 conditions). To return all columns and rows we can automate Advanced Filter via VBA.

For the purpose of the exercise I'm going to use cells directly below our table that occupies A1:H9. In cells A13:C13 we enter copies of our table headings.

A13=City
B13=Department
C13=Person.

Directly below these cells we are going to use Data Validation lists that refer back to our data directly below our table headings.

Now we name our ranges;

B1:H9=DataTable
A13:C14=Criteria
A16:H19=Results

The VBA code;

```Sub GetData()
Range("Results").Clear

If Range("Results")(2, 1) = vbNullString Then
Range("Results").Clear
End If
End Sub```

It is important to note that will first clear any data in our named range "Results". We do this to ensure there is no data in the "Results" range as Advanced Filter will throw a Run-Time error if it copies results to a range with data already in.

It is also worth noting the check for data (not headings) is via;

If Range("Results")(2, 1) = vbNullString Then

The (2, 1) is the Item method and refers to the second row, 1 column in our Named range "Results".  If no data, we clear the entire Named range "Results".  Advanced Filter will still copy our table heading even though no data meets our criteria. This can confuse the end user so we display a MsgBox.

Excel Dashboard Reports & Excel Dashboard Charts 50% Off

Become an ExcelUser Affiliate & Earn Money

Microsoft ® and Microsoft Excel ® are registered trademarks of Microsoft Corporation. OzGrid is in no way associated with Microsoft