What Most People Miss About What Does the MATCH Function Do in Excel

Most Excel trainers teach MATCH as a sidekick to VLOOKUP or XLOOKUP — like it’s just there to ‘help out’. That’s backwards. MATCH is the core logic engine. It doesn’t return data — it returns location. And if you treat it like a second-class citizen, you’ll spend hours debugging #N/A errors that vanish the moment you understand its true job.

The Problem

You’re reviewing Q1 sales data across 8 regional reps. Your goal: pull Sarah Chen’s quota attainment % from column D into a summary dashboard. But the rep names aren’t sorted. You try XLOOKUP — works fine. Then you add a new rep mid-table and suddenly the dashboard breaks. Not with an error — with a wrong number. Because XLOOKUP found the *first* match, not the *right* one — and you didn’t notice until the finance team flagged a $142K discrepancy.

A1: Rep NameB1: RegionC1: Quota ($)D1: Attainment %
James WuNorthwest$325,00092.4%
Sarah ChenSoutheast$412,500107.1%
Maya PatelNortheast$298,00088.9%
Sarah ChenCentral$375,000114.3%
Diego MoralesSouthwest$452,00095.7%
Sarah ChenWest Coast$391,200102.8%
Anya PetrovaMidwest$340,80091.2%

This table has three Sarah Chens — each with different quotas and attainment rates. A simple lookup fails because it grabs the first occurrence. Worse: if you sort the list later, the row numbers shift — but your hardcoded references (like D2) don’t update. That’s where most people reach for array formulas or pivot tables. They’re overcomplicating it.

The Solution

MATCH doesn’t retrieve data — it tells you where something lives. Its output is a row number (or column number). That’s powerful. Combine it with INDEX, and you control exactly which instance you pull — even without sorting.

  1. In cell F2, type =MATCH("Sarah Chen",A2:A8,0). Press Enter. Result: 2. That’s the relative position of the first “Sarah Chen” in A2:A8.
  2. Now test =MATCH("Sarah Chen",A2:A8,0)+1. You get 3. Still not what you want — but now you see how flexible it is.
  3. To get the third Sarah Chen’s attainment %, use this formula in G2:
    =INDEX(D2:D8,MATCH(1,(A2:A8="Sarah Chen")*(ROW(A2:A8)-ROW(A2)+1=3),0))
    Press Ctrl+Shift+Enter (if using Excel 2019 or earlier). In Microsoft 365, just Enter.
  4. But here’s the elegant fix: create a helper column E2:E8 with =COUNTIF($A$2:A2,A2), then use =INDEX(D2:D8,MATCH(1,(A2:A8="Sarah Chen")*(E2:E8=3),0)). No array entry needed.

The beauty of this approach is that MATCH never touches the actual values — only positions. So even if someone changes “Sarah Chen” to “S. Chen” in row 6, your third-instance formula still works as long as the helper column updates.

F1: Lookup NameG1: InstanceH1: Attainment %
Sarah Chen1107.1%
Sarah Chen2114.3%
Sarah Chen3102.8%

Going Further

MATCH shines when you need dynamic ranges. Say your sales team adds reps weekly. Instead of updating A2:A8 manually, define a dynamic named range SalesReps with =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1). Now =MATCH("Diego Morales",SalesReps,0) always points to the right block — no manual resizing.

Here’s the counterintuitive tip: MATCH with -1 (descending) or 1 (ascending) only works reliably if your data is actually sorted — and Excel won’t warn you if it’s not. Try =MATCH(100,{90;95;88},1). Returns 2 — but 95 isn’t the largest value ≤100. It’s just the first one it hits scanning left-to-right. That’s why 0 (exact match) is safest unless you truly control sort order.

You can also use MATCH to validate dropdowns. In Data Validation → List, set Source to =INDEX(RepNames,MATCH(1,(Regions="Southeast")*(Active=TRUE),0)) — pulling only active Southeast reps.

When NOT to Use This

Avoid MATCH if you’re doing a one-off lookup on static, sorted, unique data — XLOOKUP is simpler and more readable. Also skip it for fuzzy text matching: MATCH only does exact or approximate — no wildcard support unless you wrap it in SEARCH.

Don’t use MATCH(...,0) on columns containing mixed data types. If A2:A8 has "Sarah Chen", 42, and TRUE, =MATCH("Sarah Chen",A2:A8,0) returns #N/A — not because the name’s missing, but because Excel coerces the entire range to numbers during comparison. Convert everything to text first with =MATCH("Sarah Chen",TEXT(A2:A8,"@"),0).

And never use MATCH inside SUMIFS or COUNTIFS as a criteria argument — it will return a position, not a value, and break the logic. Use INDEX + MATCH *outside* those functions instead.

Keyboard Shortcuts

ShortcutActionUse Case
Alt + M, MOpen Insert Function dialogFast access to MATCH syntax help
F9Evaluate part of formulaCheck MATCH result before INDEX wraps it
Ctrl + Shift + EnterConfirm legacy array formulaRequired for older MATCH/INDEX combos with multiple conditions
Ctrl + `Toggle formula viewSee all MATCH instances at once in a complex sheet
Anna Kim

Anna Kim

Anna specializes in tax forms