XLOOKUP vs VLOOKUP vs INDEX/MATCH: which lookup should you use?
Three formulas do the same core job — pull a value out of a table by its key — and finance people argue about them like sports teams. Here's the short version, then the honest, side-by-side version.
XLOOKUP for almost everything. Keep INDEX/MATCH for two-way lookups and older files; keep VLOOKUP only when you have to hand the file to someone stuck on a decade-old version.VLOOKUP: the one everyone learned, and its three traps
VLOOKUP looks down the first column of a table for your key and returns a value from the column you number: =VLOOKUP(key, table, col_number, FALSE). It's everywhere, it's muscle memory, and it has three failure modes that quietly put wrong numbers on board slides:
- It counts columns. That
3is a hard-coded position. Insert a column anywhere to its left and the3now points at the wrong field — no error, just a bad number. - It can't look left.The key must sit in the leftmost column of the range. Need the value that lives to the left of your key? VLOOKUP simply can't.
- It defaults to an approximate match. Forget the final
FALSEand VLOOKUP returns the closest match on unsorted data — which is to say, a random-looking wrong answer.
=VLOOKUP(101, A2:C4, 3, FALSE)| A | B | C | |
|---|---|---|---|
| 1 | SKU | Product | Price |
| 2 | 100 | Widget | $42 |
| 3 | 101 | Gadget | $55 |
| 4 | 102 | Gizmo | $90 |
| 5 | |||
| 6 | Price for 101 | $55 |
INDEX/MATCH: the classic fix that still wins two-way
INDEX / MATCH splits the job in two — =INDEX(return_range, MATCH(key, lookup_range, 0)). MATCH finds which row your key is in, and INDEX returns the value from that row in anycolumn you point at. Because the return column is a real range — not a counted number — inserting columns doesn't break it, and it can happily return a value to the left of the key.
=INDEX(A2:A4, MATCH(101, B2:B4, 0))| A | B | |
|---|---|---|
| 1 | Product | SKU |
| 2 | Widget | 100 |
| 3 | Gadget | 101 |
| 4 | Gizmo | 102 |
| 5 | ||
| 6 | Product for 101 | Gadget |
INDEX MATCH MATCH: the two-way lookup nothing else does simply
This is the one people mean when they say INDEX MATCH MATCH — two MATCHes inside one INDEX, one running down the rows and one running across the columns, to pinpoint a single cell in a grid. =INDEX(grid, MATCH(row_key, row_labels, 0), MATCH(col_key, col_labels, 0)). It's the natural tool for anything shaped like a matrix: a metric by product-by-quarter, a rate by tier-by-term, an actual by account-by-month. Change either label and the answer moves — no rebuilding, no VLOOKUP gymnastics.
=INDEX(B2:D4, MATCH("Gadget", A2:A4, 0), MATCH("Q3", B1:D1, 0))| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Q1 | Q2 | Q3 |
| 2 | Widget | 40 | 44 | 46 |
| 3 | Gadget | 22 | 25 | 28 |
| 4 | Gizmo | 9 | 11 | 12 |
| 5 | ||||
| 6 | Gadget in Q3 | 28 |
XLOOKUP: the modern default that fixes all three traps
XLOOKUP is the one Microsoft built to retire VLOOKUP, and it does everything above without the sharp edges: =XLOOKUP(key, lookup_range, return_range, if_not_found). You point at real ranges instead of counting columns, so inserted columns never break it. It looks any direction, left or right. It defaults to an exact match — no forgotten FALSE. And the fourth argument is a built-in not-found answer, so #N/A never leaks onto a slide.
For a two-way lookup it nests cleanly — =XLOOKUP(row_key, rows, XLOOKUP(col_key, cols, grid)) — the same idea as INDEX MATCH MATCH, in one function name.
=XLOOKUP("A/P", A2:A4, B2:B4, "Not found")| A | B | |
|---|---|---|
| 1 | Account | Balance |
| 2 | Cash | 48,200 |
| 3 | A/R | 61,400 |
| 4 | Inventory | 92,800 |
| 5 | ||
| 6 | Look up A/P | Not found |
Side by side
| VLOOKUP | INDEX/MATCH | XLOOKUP | |
|---|---|---|---|
| Look left of the key | No | Yes | Yes |
| Survives inserted columns | No | Yes | Yes |
| Default match | Approx | Exact | Exact |
| Built-in not-found | No | No | Yes |
| Two-way (row & column) | No | MATCH MATCH | Nested |
| Runs on old Excel / Sheets | Yes | Yes | 2021+/365 |
So which one?
- Default to XLOOKUP.On any modern Excel or Google Sheets it's shorter, safer, and reads more clearly than the alternatives.
- Reach for INDEX MATCH MATCHwhen the data is a grid and you're looking up by row andcolumn at once — it's still the cleanest way to express a two-way lookup.
- Keep VLOOKUP only for compatibility — a workbook that has to open on a version of Excel too old to know what XLOOKUP is. Always pass the final
FALSE.
None of this is about memorizing four hundred functions. It's about wiring the right lookup into a layout you can actually read — the same discipline behind the dozen formulas a fractional CFO leans on.
See what a report like this looks like on your own numbers.
Get my free report →