Excel Practice Test

โ–ถ

The MATCH function in Excel does one thing, and it does it well: it tells you the position of a value inside a list. Not the value itself, not the cell next to it — just the row number, or the column number, where your lookup lands. That sounds small. It is the backbone of nearly every advanced lookup formula you will ever write.

Most people meet MATCH after they have struggled with VLOOKUP for a while. VLOOKUP is fine for simple jobs — until it breaks, until your lookup column moves, until you need to pull data from the left instead of the right. That's when MATCH shows up, usually paired with INDEX, and suddenly the spreadsheet feels like it works with you instead of fighting back.

In this guide you will see the full syntax, every match_type option, side-by-side examples, the INDEX MATCH combo that replaced VLOOKUP for power users, the newer XMATCH function in Excel 365, and the errors you will absolutely hit at some point (yes, the #N/A one). By the end, you should be able to write a MATCH formula on the first try — even when the data is messy.

1985
Year MATCH first shipped in Excel
3
match_type options: 1, 0, -1
Position
What it returns (not the value)
XMATCH
Modern successor (Excel 365)

What MATCH Actually Returns

Here's the part that trips up beginners. Run =MATCH("Banana", A2:A10, 0) and you don't get back the word "Banana" — you get back a number, maybe 3, meaning Banana is the third item in your range. That number is the whole point. You feed it into INDEX, OFFSET, or another formula that needs a row index to do real work.

The full syntax is short:

=MATCH(lookup_value, lookup_array, [match_type])

Three arguments. The last one is optional but you should always set it on purpose. Forgetting match_type is one of the top three reasons a MATCH formula returns the wrong answer — Excel defaults to 1, which assumes your data is sorted ascending, and most real-world data isn't.

Compare that with Excel VLOOKUP, which returns the value itself but only looks rightward. MATCH is more flexible because it doesn't care which direction the answer lives. The trade-off: you almost always pair MATCH with another function. Solo MATCH formulas are rare in production sheets. Once you accept that, the function clicks — it is a coordinate generator, not a lookup tool by itself.

One other quirk worth knowing: MATCH only works on a single row or a single column. Hand it a rectangle like A2:C500 and Excel throws an error or a misleading result. The lookup_array is one-dimensional, full stop. If you need to search a two-dimensional area, that's what nested MATCH inside INDEX is for — we'll get to that.

Quick Mental Model

Think of MATCH as a finger pointing at a row. You ask it "where is this thing?" and it points. It doesn't pick up the thing, it doesn't read what's next to the thing — it just points. That single number becomes a coordinate you can hand to INDEX, OFFSET, or even another MATCH for two-dimensional lookups.

The Three match_type Modes (Why 0 Is Usually Right)

Three numbers, three behaviors. They are not interchangeable, and the wrong one will silently give you the wrong answer without throwing an error. That's the dangerous part — no red flag, just a number that looks right until someone checks.

match_type = 0 means exact match. The lookup value has to be there, character for character (case-insensitive for text). If it's not there, you get #N/A. The list does not need to be sorted. Use this 90% of the time.

match_type = 1 (or omitted) means "find the largest value less than or equal to lookup_value." The lookup_array must be sorted ascending. You'd use this for tax brackets, age tiers, or any banded lookup — "what tier does $47,500 fall into?" — where exact matches are rare and you want the bucket below.

match_type = -1 is the inverse: smallest value greater than or equal to lookup_value, lookup_array sorted descending. Useful for things like "next available slot" problems. Honestly, you'll see this least often.

Why is mode 0 the safe default? Because it screams when something is wrong. If your lookup value isn't there, you get a #N/A error you can see and handle. Modes 1 and -1 never throw — they just return something, even when that something is nonsense because the data wasn't sorted. Silent failures are the worst kind of bug in a spreadsheet, because nobody notices until a report goes out with the wrong number on it.

Choosing the Right match_type

๐Ÿ”ด match_type 0 (Exact)

Use when you need an exact hit. No sorting required. Returns #N/A if the value isn't found. This is the safe default for most lookups — product codes, IDs, names.

๐ŸŸ  match_type 1 (Less-Than-Or-Equal)

Use for banded lookups: tax brackets, commission tiers, age groups. Lookup array MUST be sorted ascending or results are unpredictable. Returns the largest value ≤ your lookup.

๐ŸŸก match_type -1 (Greater-Than-Or-Equal)

Inverse of mode 1. Array sorted descending. Returns smallest value ≥ lookup. Niche — used for inventory thresholds or "round up" scenarios.

๐ŸŸข Omitted (Defaults to 1)

Excel assumes you want approximate match against a sorted ascending list. Bad default. Always pass a match_type explicitly — future you will thank present you.

MATCH by Itself: Five Practical Examples

Before pairing MATCH with INDEX, it helps to see what MATCH alone can do. These are the patterns you'll write the most often.

Example 1: Find the row of a product code. Sales data in column A, you want to know where SKU "A-205" sits.

=MATCH("A-205", A2:A500, 0)

Returns the relative row number inside that range. Pair with INDEX next and you can pull any column.

Example 2: Check whether a value exists at all. Wrap MATCH in IFERROR.

=IF(IFERROR(MATCH("Smith", B:B, 0), 0)>0, "Found", "Not Found")

Example 3: Find the column number for a header. Useful when headers move around.

=MATCH("Revenue", A1:Z1, 0)

Returns 7 if Revenue is in column G. Feed that into INDEX and your formula adapts when columns get reordered.

Example 4: Approximate match for tax brackets. Suppose D2:D6 holds bracket floors {0; 10000; 40000; 85000; 165000}.

=MATCH(47500, D2:D6, 1)

Returns 3 — the $40,000 bracket.

Example 5: Wildcards. With match_type 0, you can use ? and *.

=MATCH("Joh*", A2:A50, 0)

Finds the first cell starting with "Joh" — John, Johnson, Johansson. Handy for fuzzy header detection.

๐Ÿ“‹ MATCH vs VLOOKUP

VLOOKUP returns the value, MATCH returns the position. VLOOKUP only looks rightward from the key column; MATCH doesn't care about direction. VLOOKUP breaks when you insert a column; INDEX MATCH adapts. For tables with more than a handful of columns, MATCH (paired with INDEX) is the durable choice. See our full VLOOKUP guide for the older approach.

๐Ÿ“‹ MATCH vs XLOOKUP

XLOOKUP (Excel 365 and 2021+) combines lookup-and-return into one function. It's cleaner than INDEX MATCH for everyday use. But MATCH still wins for two-dimensional lookups, header detection, and when you only need a position number rather than a value.

๐Ÿ“‹ MATCH vs LOOKUP

The classic LOOKUP function is older and quietly assumes sorted data. MATCH is more explicit — you set match_type yourself. LOOKUP is rarely the right choice in 2026; MATCH or XLOOKUP almost always beat it.

๐Ÿ“‹ MATCH vs XMATCH

XMATCH is MATCH with better defaults. Match mode defaults to exact, supports wildcards via a clean argument, and adds binary search for large sorted arrays. If you're on Excel 365, prefer XMATCH for new formulas. MATCH is still everywhere in legacy workbooks — you need to know both.

INDEX MATCH: The Combo That Replaced VLOOKUP

Here's where MATCH earns its keep. By itself, returning a row number isn't that exciting. Hand that row number to INDEX and you've built a lookup formula that's faster, more flexible, and less fragile than VLOOKUP.

The pattern looks like this:

=INDEX(return_column, MATCH(lookup_value, lookup_column, 0))

Concrete example. You have a roster: column A is employee ID, column B is name, column C is department, column D is salary. You want the salary for ID "E-1042".

=INDEX(D2:D500, MATCH("E-1042", A2:A500, 0))

MATCH finds the row where E-1042 lives. INDEX returns the salary from that row. Three things this gives you that VLOOKUP can't:

If you want a deeper walkthrough of the combo on its own, see our INDEX MATCH guide.

One mental shortcut: read the formula right-to-left. The inner MATCH does its job first, returning a number. Then INDEX uses that number to pick a cell from its range. So the order of operations is "find the row, then grab the value." That mental model makes debugging easier — if the formula's wrong, swap one INDEX for a hardcoded number and see whether MATCH was at fault, or check MATCH alone and see what row it returns.

Test Yourself: Free Excel Lookup Functions Quiz

Two-Dimensional Lookups: Nested MATCH

This is where MATCH really shows off. Pivot-style tables — rows for product, columns for region, prices in the body — need a row coordinate and a column coordinate. Two MATCH calls inside one INDEX nail it.

=INDEX(B2:F50, MATCH("Widget", A2:A50, 0), MATCH("Europe", B1:F1, 0))

First MATCH finds which row Widget sits on. Second MATCH finds which column "Europe" sits on in the header row. INDEX uses both coordinates to pull the value. No need for SUMPRODUCT gymnastics, no need to restructure the table.

This pattern is also how you build dynamic dashboards. Drop two dropdowns on a sheet, point your MATCHes at them, and the same formula serves every combination of product and region. Users feel like the dashboard is doing real intelligence work; really it's just two MATCHes and an INDEX.

One thing worth flagging: the first MATCH range (A2:A50) is the row labels and the second MATCH range (B1:F1) is the column labels. They live outside the INDEX data range (B2:F50). That separation is intentional — it keeps the labels from polluting your data, and it means you can rearrange the table without rewriting the formula.

You can stretch this further. INDEX accepts a third "area" argument, so you can even pick which of several stacked tables to look in. That's how complex enterprise dashboards stay maintainable: a few MATCHes pick coordinates, INDEX returns the value, and the underlying structure can change without touching every formula.

Did you set match_type explicitly? (Don't rely on the default of 1.)
Is the lookup_value the correct data type — text, number, date? Type mismatches return #N/A.
For exact match (0), is your data sorted at all? It doesn't need to be, but stray whitespace ruins matches.
For approximate match (1 or -1), is the lookup_array properly sorted in the required direction?
Are INDEX and MATCH ranges the same size and starting on the same row?
Have you wrapped the formula in IFERROR if a missing value is a normal outcome rather than a real error?
If you're on Excel 365, would XMATCH be cleaner here?
Did you test with a value you know exists AND a value you know doesn't exist?

XMATCH: The Modern Replacement

Excel 365 (and Excel 2021 onward) introduced XMATCH. It's MATCH with sharper defaults and three new tricks: binary-search mode for huge sorted lists, a cleaner wildcard switch, and search-from-end support so you can find the last occurrence of a value, not just the first.

The syntax adds a fourth argument:

=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])

The defaults matter. XMATCH defaults to exact match (mode 0), which is what most people want. Old MATCH defaults to approximate (mode 1), which is what most people don't want. That alone makes XMATCH the better choice for new formulas.

Search from the end: pass -1 as search_mode and XMATCH walks the list backwards. Useful for "most recent entry" lookups where you want the last instance of a customer ID, not the first.

=XMATCH("E-1042", A2:A10000, 0, -1)

The match_mode argument is also more granular than old MATCH. Mode 2 turns on wildcard support explicitly, which is cleaner than the old "wildcards-only-if-match_type-is-zero" rule. And mode 3 enables regex-style wildcard usage in newer 365 builds — not always documented but it's there.

That said: if you're maintaining a workbook used by Excel 2019 or older, stick with MATCH. XMATCH won't degrade gracefully — older Excel just sees #NAME?. A reasonable rule of thumb: if every user of the file is on 365, write XMATCH. If even one collaborator is on a perpetual-license Excel from 2019 or earlier, keep using MATCH so nothing breaks when they open the file.

Pros

  • Works in every version of Excel from 1985 onward — safest for legacy files
  • Pairs with INDEX for left/right/two-way lookups that VLOOKUP can't do
  • Returns a position number you can reuse in OFFSET, INDIRECT, or another formula
  • Supports wildcards (? and *) when match_type is 0
  • Faster than VLOOKUP on large tables because only two columns are scanned

Cons

  • Returns a position, not a value — you almost always need INDEX too
  • Default match_type of 1 silently produces wrong answers if you forget to set it
  • Approximate-match modes require sorted data — easy to break by accident
  • Less elegant than XLOOKUP or XMATCH on modern Excel versions
  • No native multi-criteria support — you need helper columns or array formulas

Common Errors and How to Fix Them

If you write enough MATCH formulas, you will see these errors. Each one has a specific cause and a specific fix.

#N/A is the most common. It means MATCH didn't find your value. Three usual suspects:

  1. Trailing or leading whitespace. "Smith " doesn't match "Smith". Wrap lookup_value in TRIM, or clean the source column.
  2. Data type mismatch. A number stored as text won't match a real number. Look for a green triangle in the corner of the cell — that's Excel telling you something's off.
  3. You used match_type 1 on unsorted data. The function returns the largest value ≤ lookup, which on unsorted data is essentially random.

#VALUE! usually means your lookup_array isn't a single row or single column. MATCH wants a vector, not a rectangle. Check that you didn't accidentally select A2:C500 when you meant A2:A500.

#REF! happens when a referenced cell or column got deleted. Common after restructuring a sheet. Use named ranges or table references to avoid this.

Wrong answer, no error. The dangerous one. Almost always caused by leaving match_type at the default, or by approximate match on unsorted data. The fix is discipline: always pass match_type, always know whether your data is sorted.

A small habit that saves hours: when a MATCH-based formula misbehaves, pull MATCH out into its own cell. Run just =MATCH(lookup_value, lookup_array, 0) by itself and look at what comes back. If it's a sensible row number, the bug is somewhere else in the formula (probably an INDEX range mismatch). If MATCH itself returns #N/A or the wrong row, you've isolated the problem to the lookup. That ten-second debug step beats staring at a 200-character formula trying to spot the issue.

Another guardrail: wrap user-facing MATCH formulas in IFERROR with a friendly fallback. =IFERROR(INDEX(D:D, MATCH(x, A:A, 0)), "Not found") won't break the dashboard when someone types a missing ID, and it tells the user what happened without dumping #N/A across half the screen.

Free Excel Functions Practice Test

When to Reach for MATCH (And When Not To)

MATCH is the right tool when you need a position rather than a value, when you're building a two-dimensional lookup, when you want a formula that survives column reordering, or when you're working in an older Excel version that doesn't have XLOOKUP. For everyday left-to-right lookups in Excel 365, XLOOKUP is usually cleaner.

Skip MATCH when XLOOKUP would do the same job in fewer characters, when your team is on Excel 365 anyway, or when you're writing a one-off formula nobody will maintain. There's no prize for the most verbose formula. Use the function that fits.

The skill that separates spreadsheet hobbyists from people who get hired for their Excel chops isn't memorizing every function — it's knowing which one fits the shape of the problem. MATCH fits more shapes than most functions. Once you stop fighting VLOOKUP and learn INDEX MATCH, the rest of Excel opens up: dynamic dashboards, audit-friendly formulas, and lookups that don't crumble the first time someone rearranges a sheet.

Practice on real data. Build a small INDEX MATCH formula today, deliberately break it (insert a column, add whitespace, mistype a value), and watch how it fails. That's how the patterns stick. After a week of doing that, you'll write MATCH formulas without thinking — and that's when Excel starts feeling fast. Then try the practice tests linked above; the questions test exactly the edge cases that hurt in real work.

Excel Questions and Answers

What does the MATCH function return in Excel?

MATCH returns the relative position of a lookup value inside a single-row or single-column range. It does not return the value itself — it returns a number, like 5, meaning the value sits on the fifth row of your range. You then feed that number into INDEX or another function to pull the actual data.

What is the difference between MATCH and VLOOKUP in Excel?

VLOOKUP returns the value from a column to the right of the lookup column. MATCH only returns a position number, but it works in either direction and is usually paired with INDEX. INDEX MATCH handles left-of-key lookups, survives column insertions, and runs faster on large tables. MATCH is more flexible; VLOOKUP is more compact.

What does match_type 0 mean in the MATCH function?

match_type 0 means exact match. MATCH looks for a lookup value that matches character-for-character (text is case-insensitive). The lookup_array does not need to be sorted. If the value isn't found, MATCH returns #N/A. This is the safest mode and the one you'll use most often.

How do I use INDEX MATCH for a two-way lookup?

Nest two MATCH calls inside one INDEX, one for the row coordinate and one for the column coordinate: =INDEX(data_range, MATCH(row_value, row_headers, 0), MATCH(col_value, col_headers, 0)). The first MATCH finds the row, the second MATCH finds the column, and INDEX returns the cell at that intersection.

Why does my MATCH formula return #N/A?

Three common causes: leading or trailing whitespace in the lookup value or array (wrap with TRIM), a data-type mismatch (a number stored as text won't equal a real number), or you used match_type 1 on data that isn't sorted ascending. Set match_type to 0 for exact match and clean your data; that fixes most cases.

Should I use MATCH or XMATCH in Excel 365?

Use XMATCH for new formulas in Excel 365 or Excel 2021. It defaults to exact match (safer), supports wildcards via a clean argument, and lets you search from the end of the array to find the last occurrence of a value. Stick with MATCH only when the workbook needs to open in Excel 2019 or older — XMATCH returns #NAME? in older versions.

Can MATCH find the last occurrence of a value?

Plain MATCH always returns the first match. To find the last occurrence you either reverse-sort the data, use an array formula trick with LOOKUP, or switch to XMATCH and pass -1 as the search_mode argument. XMATCH is the cleanest approach if you're on Excel 365.

Does MATCH support wildcards?

Yes, but only when match_type is 0 (exact match). The question mark ? matches any single character and the asterisk * matches any sequence of characters. For example, MATCH("Joh*", A:A, 0) finds the first cell starting with Joh — John, Johnson, Johansson. To match a literal ? or *, prefix it with a tilde (~?).
โ–ถ Start Quiz