2025-10-12 17:48
Status: Child
Tags: Excel data types Data Analysis
Advanced VLOOKUP: Handling Multiple Matches and Errors in Excel
In this tutorial, we explore a more complex pricing table that includes products and region-specific prices. The table structure is as follows:
| Product | Region | Price |
|---|---|---|
| Box | Sylhet | 20 |
| Box | Kumilla | 30 |
| … | … | … |
This setup introduces challenges with VLOOKUP, particularly when dealing with non-leftmost lookup columns and duplicate product entries across regions.
Problem 1: VLOOKUP Requires the Leftmost Column for Lookup
VLOOKUP searches for a value in the leftmost column of a table and returns a value from a specified column in the same row. If the lookup value (e.g., product name) is not in the leftmost column, the function fails.
Example Issue
Suppose you attempt to look up a product with pricing in the third column:
=VLOOKUP("Box", Table, 4, FALSE)This returns an error because the product column is not the leftmost.

Solution for Problem 1: Rearrange the Table
To resolve this, restructure the table so the lookup column (e.g., Product) is the leftmost:
| Product | Price | Region |
|---|---|---|
| Box | 20 | Dhaka |
| Box | 30 | Kumilla |
Now, the formula works:
=VLOOKUP("Box", Table, 2, FALSE)This returns the price from the second column. However, this introduces a new issue with multiple rows for the same product.
Problem 2: Handling Multiple Matches for the Same Product
When the same product appears in multiple rows (e.g., different regions), VLOOKUP returns the first match it finds, ignoring subsequent entries.
Example Issue

For “Box in Kumilla,” the formula returns 20 (from Dhaka) instead of the correct 30:
=VLOOKUP("Box", Table, 2, FALSE) // Returns 20, the first matchThis leads to incorrect pricing, such as a “big loss” if the wrong regional price is applied.
Solution for Problem 2: Create Unique IDs
To differentiate entries, add a unique ID column that combines the region and product (e.g., using concatenation). This ensures each lookup is specific.
Step 1: Generate Unique IDs
In a new column (e.g., ID), create identifiers like “Sylhet-Box” or “Kumilla-Box”:
=Region & "-" & ProductUpdated table:
| ID | Product | Region | Price |
|---|---|---|---|
| Sylhet-Box | Box | Sylhet | 20 |
| Kumilla-Box | Box | Kumilla | 30 |
| … | … | … | … |
Step 2: Perform Lookup on Unique ID
Construct the lookup value by combining region and product in the search cell, then use VLOOKUP on the ID column (now leftmost):
=VLOOKUP(Region & "-" & Product, ID_Table, 4, FALSE)
This returns the correct price for the specific region-product combination. For example:
- Input: “Kumilla-Box” → Returns 30.
If the entry doesn’t exist (e.g., “Gajipool-Box”), it returns an error, which we handle next.
Implementing the Lookup with Unique IDs
Rearrange the table to place the ID column leftmost:
| ID | Region | Product | Price |
|---|---|---|---|
| Sylhet-Box | Sylhet | Box | 20 |
| Kumilla-Box | Kumilla | Box | 30 |
The formula becomes:
=VLOOKUP(G2 & "-" & H2, ID_Table, 4, FALSE)Where G2 is Region and H2 is Product. This setup is efficient and avoids ambiguity.
Handling Errors with IFERROR
VLOOKUP returns errors (e.g., A) for missing references. Wrap it in IFERROR to provide a custom message:
=IFERROR(VLOOKUP(G2 & "-" & H2, ID_Table, 4, FALSE), "Reference is missing. Please update")Example Usage
- Valid lookup (e.g., “Kumilla-Box”): Returns 30.
- Invalid lookup (e.g., “Gajipool-Box”): Returns “Reference is missing. Please update”.
For divisions or other operations, extend with additional checks, but ensure proper bracketing to avoid formula errors.
Adding More Data and Final Touches
Populate the table with additional regions, such as Bogura (B-O-G-U-R-A):
| ID | Region | Product | Price |
|---|---|---|---|
| Sylhet-Box | Sylhet | Box | 20 |
| Kumilla-Box | Kumilla | Box | 30 |
| Bogura-Box | Bogura | Box | 25 |
| … | … | … | … |
Copy formulas down the rows (e.g., using Ctrl+Z for undo if needed). Test with various inputs to ensure accuracy.
This approach scales well for region-specific pricing. For further exploration, consider the TRUE parameter in VLOOKUP for approximate matches in the next tutorial.
Advanced Excel Techniques: Complex Data Handling
Scenario: Price Analysis Across Warehouses
In this business case, we work with warehouse data where each ID has multiple price points across different warehouses. The goal is to identify the minimum price for each ID.
The Challenge with Traditional VLOOKUP/XLOOKUP
- Traditional lookup functions return only the first match
- When multiple entries exist for the same ID, we need more sophisticated approaches
- Simple VLOOKUP will not capture the minimum value across multiple warehouses
Solution: Nested Array Formulas
Step 1: Extract All Values
=XLOOKUP(lookup_value, lookup_array, return_array)This returns an array of all matching values.
Step 2: Find Minimum Value
=MIN(XLOOKUP(lookup_value, lookup_array, return_array))This nested formula returns the minimum value from the array.
Step 3: Find Maximum Value
=MAX(XLOOKUP(lookup_value, lookup_array, return_array))Similarly, this returns the maximum value.
Alternative Solution: FILTER Function
The FILTER function provides another approach for handling complex data scenarios:
=FILTER(array, include, [if_empty])
FILTER(FILTER(Sheet1|$D$2:$3$8,Sheet1!$B$2:$B$8=Sheet2|A2)=MIN(FILTER(FILTER(Sheet1|$D$2:$3$8,Sheet1!$B$2:$B$8=Sheet2|A2),FILTER(Sheet1|$D$2:$J$8,Sheet1|$B$2:$B$8=Sheet2|$A$2)<>0))Advanced Filtering with Multiple Conditions
- Use multiple FILTER functions for complex criteria
- Handle empty or zero values with conditional logic
- Ensure data integrity by excluding unwanted values
Important Considerations
- When filtering out zeros, consider business logic
- Zero and NULL values require different treatment
- Always validate results against business requirements
INDEX and MATCH Functions
Why INDEX/MATCH?
INDEX and MATCH together overcome VLOOKUP’s limitations:
- ✓ Can look left or right (any direction)
- ✓ Faster performance on large datasets
- ✓ Won’t break if columns are inserted/deleted
- ✓ More flexible for complex lookups
Individual Functions
INDEX - Returns a value from specific position:
=INDEX(array, row_num, [column_num])MATCH - Finds position of a value:
=MATCH(lookup_value, lookup_array, 0)Use 0 for exact match
Basic INDEX/MATCH Combination
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))Real Example:
=INDEX(E2:E10, MATCH("Samsung", C2:C10, 0))Finds “Samsung” in column C and returns corresponding value from column E.
Two-Dimensional Lookup
=INDEX(data_range, MATCH(row_value, row_range, 0), MATCH(col_value, col_range, 0))Example - Sales Matrix:
| Product/Region | North | South | East | West |
|---|---|---|---|---|
| Samsung | 5000 | 7000 | 6000 | 8000 |
| iPhone | 9000 | 8500 | 9500 | 7500 |
| Dell | 4000 | 4500 | 5000 | 4200 |
=INDEX(B2:E4, MATCH("iPhone", A2:A4, 0), MATCH("East", B1:E1, 0))Result: 9500
Left Lookup (VLOOKUP Can’t Do This)
=INDEX(A2:A10, MATCH("Samsung", C2:C10, 0))Returns a value from column A based on match in column C (looking left).
VLOOKUP vs INDEX/MATCH
| Feature | VLOOKUP | INDEX/MATCH |
|---|---|---|
| Direction | Left to right only | Any direction |
| Performance | Good | Excellent |
| Column changes | Breaks formula | Resistant |
| Learning curve | Easy | Moderate |
| Flexibility | Limited | High |
Error Handling
=IFERROR(INDEX(return_range, MATCH(lookup_value, lookup_range, 0)), "Not Found")References