
If you have been using VLOOKUP for every lookup task in Excel, you are not alone — it is one of the most recognized functions in the spreadsheet world. But experienced Excel users almost universally graduate to INDEX MATCH, a two-function combination that is more flexible, more reliable, and capable of solving problems that VLOOKUP simply cannot. This article explains exactly why, with real syntax, worked examples, and a practical walkthrough you can follow immediately.
Before combining them, it helps to understand each function on its own.
INDEX returns the value of a cell at a given position within a range or array.
=INDEX(array, row_num, [col_num])
For example, =INDEX(A1:A10, 3) returns whatever value is in the third row of column A, from row 1 to row 10.
MATCH searches for a value inside a range and returns its position number — not the value itself, but the number that tells you where it lives.
=MATCH(lookup_value, lookup_array, [match_type])
0 for an exact match (most common), 1 for less than, -1 for greater thanFor example, if A1:A5 contains {Apple, Banana, Cherry, Date, Fig}, then =MATCH("Cherry", A1:A5, 0) returns 3 because Cherry is the third item.
The real power appears when you nest MATCH inside INDEX. Instead of hard-coding a row number, you let MATCH calculate it dynamically:
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
This tells Excel: "Find the position of my lookup value in the lookup range, then return the corresponding value from the return range." The two ranges must be the same size and aligned in the same direction.
Imagine a product inventory table with the following structure:
| Product ID | Product Name | Category | Unit Price | Stock |
|---|---|---|---|---|
| P-101 | Wireless Mouse | Electronics | $29.99 | 142 |
| P-102 | USB-C Hub | Electronics | $49.99 | 87 |
| P-103 | Desk Lamp | Office | $34.99 | 55 |
| P-104 | Notebook A5 | Stationery | $8.99 | 310 |
| P-105 | Ergonomic Chair | Furniture | $299.00 | 12 |
Data lives in A2:E6, with headers in row 1. You want to look up the Unit Price of a product whose ID is entered in cell H2.
With INDEX MATCH, the formula in H3 would be:
=INDEX($D$2:$D$6, MATCH(H2, $A$2:$A$6, 0))
Step by step:
Notice the use of absolute cell references with dollar signs. Locking the ranges ensures the formula works correctly if you copy it to other cells.
If you already know VLOOKUP from our VLOOKUP complete guide, you understand its strengths. But it has well-known limitations that INDEX MATCH solves cleanly.
VLOOKUP only searches the leftmost column of a table and returns a value to the right. If your lookup column is to the right of your return column, VLOOKUP fails. INDEX MATCH has no such restriction — the return range and the lookup range are entirely independent, so you can return values from any column, including those to the left of your search column.
VLOOKUP uses a hard-coded column index number (e.g., the third column). Insert or delete a column and that number becomes wrong, silently returning incorrect data. Because INDEX MATCH references actual ranges, inserting columns never breaks the formula.
VLOOKUP scans the entire table array on every calculation. INDEX MATCH evaluates only the specific lookup column and the specific return column, which is measurably faster in workbooks with tens of thousands of rows.
You can nest two MATCH functions — one for the row, one for the column — to create a two-dimensional lookup that VLOOKUP cannot replicate without helper formulas:
=INDEX(B2:E6, MATCH(H2, A2:A6, 0), MATCH(H3, B1:E1, 0))
Here, MATCH(H2, A2:A6, 0) finds the correct row and MATCH(H3, B1:E1, 0) finds the correct column. Change either input cell and the formula instantly adapts. This is particularly useful for sales dashboards where you need to pull metrics across multiple dimensions.
When no match is found, MATCH returns a #N/A error. Wrap the entire INDEX MATCH in IFERROR to display a user-friendly message instead:
=IFERROR(INDEX($D$2:$D$6, MATCH(H2, $A$2:$A$6, 0)), "Product not found")
This is especially important in shared workbooks or templates where end users type in search values — clean error handling prevents confusion and frustration. Pair this with data validation on the input cell to restrict entries to a valid list, and you have a robust, user-proof lookup tool.
One of the most requested lookup scenarios is matching on more than one condition. Suppose you want to find the Unit Price where both the Category is "Electronics" AND the Stock is less than 100. You can achieve this with an array version of INDEX MATCH.
=INDEX($D$2:$D$6, MATCH(1, ($C$2:$C$6="Electronics")*($E$2:$E$6<100), 0))
In older Excel versions (pre-365), press Ctrl + Shift + Enter to enter this as an array formula — Excel wraps it in curly braces {}. In Excel 365 and Excel 2021, dynamic arrays handle this automatically, so a regular Enter is sufficient.
How it works: each condition produces an array of TRUE/FALSE values (1s and 0s). Multiplying them together creates a new array that is 1 only where both conditions are TRUE. MATCH then finds the first 1, and INDEX returns the corresponding price.
Excel 365 introduced XLOOKUP, which simplifies many lookup tasks with a single function. XLOOKUP is excellent for straightforward lookups, and it does handle left-side lookups natively. However, INDEX MATCH remains relevant for several reasons:
Understanding INDEX MATCH is also foundational when working on more advanced tasks such as creating dynamic dashboards in Excel, where lookup formulas feed charts and summary tables that update automatically.
=INDEX(UnitPrices, MATCH(H2, ProductIDs, 0)) is far easier to audit than cell references.If you find yourself staring at a complex lookup requirement — multiple criteria, non-standard table layouts, or cross-sheet references — you can describe what you need in plain English to ExcelGPT and receive a ready-to-use INDEX MATCH formula in seconds, including the correct absolute references and error handling. It removes the guesswork and gets you to a working formula without manual trial and error.
For broader formula writing techniques powered by AI, the article on using ChatGPT to write Excel formulas covers the workflow in detail.
For the vast majority of professional use cases, yes. INDEX MATCH handles left-side lookups, is not broken by column insertions, and supports two-dimensional and multi-criteria matching. VLOOKUP is simpler to write for basic right-side lookups, but its limitations become painful as your data grows in complexity.
Only when you are using a multi-criteria array version of the formula in Excel 2019 or earlier. Standard single-criteria INDEX MATCH formulas are entered with a regular Enter key in all Excel versions. In Excel 365 and Excel 2021 with dynamic arrays, even multi-criteria versions do not require the array shortcut.
MATCH always returns the position of the first match it finds. If your lookup column has duplicates and you need to retrieve data for each occurrence, consider using a helper column with concatenated keys, or use Power Query — covered in our Power Query guide — to reshape your data before applying the lookup.
Yes. Simply include the sheet name in your range references. For example: =INDEX(Sheet2!$D$2:$D$100, MATCH(H2, Sheet2!$A$2:$A$100, 0)). The formula works identically whether the ranges are on the same sheet or a different one within the same workbook.
Learn how Excel's TEXT function converts numbers, dates, and times into formatted text strings using format codes — with real examples and practical use cases.
Learn how the Excel IF function works, how to nest multiple IFs, and when to use modern alternatives like IFS and SWITCH for cleaner, more readable logic.
Master SUMIF and SUMIFS in Excel to sum data based on single or multiple conditions, with real syntax, practical examples, and a step-by-step walkthrough.