VLOOKUP → XLOOKUP
A self-study lesson you can turn around and teach.
How this deck works
Driving it
Click (or → / Space) — build the current slide one step at a time, then move on
← — undo one step, then one slide
E — edit any text in place (Ctrl+S saves a copy)
Rail (left) — jump between the 7 sections
The colour key — memorise this
Prerequisite knowledge
✔ VLOOKUP
=VLOOKUP(value, table, col_index, FALSE)
This lesson assumes basic VLOOKUP — find a value, bring something back. XLOOKUP keeps that mental move and removes the traps around it.
✔ Named ranges & tables
Players[Goals] beats F2:F200
This deck writes lookups against named table columns like the one above. You'll need to know how to use Excel tables and the Name Manager for this part — if that's unfamiliar, pause here, look it up, and come back.
Meet your two datasets
One skill, two worlds. If you can make a formula work in both, you actually understand it — that's transfer, and transfer is what lets you teach it.
7 players · 6 fields — plus state, match and award tables we'll meet later.
5 words · Arabic, Russian & Chinese columns, with a mastery score per word.
VLOOKUP anatomy — a quick refresher
The five pains of VLOOKUP
You've probably hit every one of these. None of them are your fault — they're baked into the function.
Can't look left
The lookup column must be column 1 of the table. Need an ID from a name? Rearrange your data or give up.
→ XLOOKUP fixes thisBreaks on insert
Insert one column and your hard-counted index goes stale: 6 → ? — silently pointing at the wrong field.
→ XLOOKUP fixes thisGuesses by default
Omit FALSE and you get approximate matching — near-misses that look like real answers.
→ XLOOKUP fixes thisFails ugly
No match means #N/A — unless you wrap the whole thing in an IFERROR bandage.
→ XLOOKUP fixes thisOne cell at a time
One formula returns one value from one column. Need three fields? Write three formulas.
→ XLOOKUP fixes thisXLOOKUP, one argument at a time
Head-to-head: same task, fewer traps
The task: Talia Rourke's goal count, from her ID.
The sentence you'll teach
Every XLOOKUP — no matter how fancy — is these three plain-English chunks:
Named ranges read like English
Both formulas below give the same answer. One of them you can read over the phone.
Worked example: ID → name
Now reverse it — look left
Fail gracefully: if_not_found
Look up an ID that doesn't exist — HR-999 — and watch the fourth argument earn its keep.
First, a new law of physics: the dynamic array
The old world
One formula lives in one cell and returns one value. Want seven names? Write seven formulas.
The new world
One formula can return a whole block — and Excel spills the answers into the empty cells next door. Automatically.
Anatomy of a spill — four words to own
1 Anchor cell
Solid blue border — the only cell that really contains the formula. Edit happens here, and only here.
2 Spilled cells
Dashed halo, greyed formula in the bar. They display values but can't be edited directly — they belong to the anchor.
3 Spill range
The whole block, anchor + spilled cells, treated as one unit.
4 The # operator
=B2# means "the entire spilled range that starts at B2" — however big it happens to be today.
When spill breaks: #SPILL!
The #1 spill confusion, fully unpacked: something is sitting in the way of where the answers need to go.
The payoff: three answers from one formula
Context switch: the phrasebook
Same skill, new world. tblVocab holds five words with translations in three scripts — plus pinyin, a category, and a mastery score out of 100.
One word, three scripts, one formula
It works in any direction — even across scripts
Wildcards: match_mode 2
Everything so far needed the exact text. Meet match_mode — XLOOKUP's fifth argument, which sets how strictly the value has to match. Mode 2 switches on wildcards: you only remember the word starts with "hel…"? Good enough.
match_mode — how to match
You just used mode 2 — here's the whole menu. One question decides which you need: what should count as a match when the exact value isn't in the list? Leave the argument out for exact; reach for the others when "close" is the point.
Approximate match, done right
Score → band, in both worlds. A band table lists the minimum score for each band, so your exact score is usually not in it — and an exact match would fail. match_mode -1 says what VLOOKUP's fragile TRUE only implied: exact, or the next smaller value — which lands you in the band you're inside.
Mastery 78 isn't in the table → slide down to 70.
Talia's 41 goals → next smaller band is 40.
search_mode — where to start looking
The sixth and final argument does a different job: it changes nothing about what counts as a match, only where Excel starts reading the column. That matters exactly when a value appears more than once — XLOOKUP returns the first match it meets, so direction decides which one wins.
"How did we go last time against New Zealand?"
We've played New Zealand twice, so the Opponent column holds two matches. A normal top-down search stops at the March game and never sees June's. Scanning bottom-up with search_mode -1 makes the last matching row win — and in any log that grows downwards, the last row is the most recent.
The party trick: nested, two-table lookup
Where is Talia's home base? Her row says NT — but "Darwin" lives in a different table. Chain two XLOOKUPs: the inner answer becomes the outer question.
It replaces HLOOKUP too
Point the arrays at rows instead of columns and the same three-chunk sentence works sideways. You can retire a second function today.
The cheat sheet — screenshot this one 📸
the value · where to look · what to bring back — only the first three are required
match_mode
| 0 | exact (default) |
| -1 | exact or next smaller — bands |
| 1 | exact or next larger |
| 2 | wildcard * ? ~ |
search_mode
| 1 | first → last (default) |
| -1 | last → first — most recent |
| 2 | binary, sorted ascending |
| -2 | binary, sorted descending |
Remember
- Looks left, right, up, down — anywhere
- Exact match by default
- if_not_found beats IFERROR
- Multi-column return_array → spill
- =B2# refers to a whole spill range
- Band tables sorted ascending
When it goes wrong — the five usual suspects
#SPILL!
Something is parked in the spill path.
Fix: clear the blocking cells — nothing is wrong with the formula.
#N/A
No match found and no fallback provided.
Fix: add an if_not_found — argument 4, plain text.
#VALUE!
lookup_array and return_array are different sizes — 7 rows vs 6, say.
Fix: make both arrays span the same rows (tables do this for free).
Wrong band
Approximate match over a table that isn't sorted ascending returns plausible nonsense.
Fix: sort the band column ascending. Always.
Mode in wrong slot
match_mode is argument 5, search_mode is 6. A misplaced -1 changes meaning silently.
Fix: count your commas — skipped slots stay empty: , , -1
Golden rule
Every error above is diagnosable with the three-chunk sentence: the value, where to look, what to bring back. Check them in that order.
Now teach it
Your six talking points
- The sentence: the value · where to look · what to bring back.
- It looks anywhere — left, right, up, down. No more column-1 rule.
- Exact match by default — the FALSE ritual is gone.
- if_not_found replaces the IFERROR wrapper with one friendly argument.
- Spill: a multi-column return spills; the anchor owns the formula; #SPILL! just means "something's in the way".
- Modes: match_mode -1 for bands (sorted ascending), search_mode -1 for "most recent".
Three challenges — click to reveal each answer
States[State], States[HomeBase]) → Perth
If you can walk someone through these three, you own it.