Expires in:
In this article you will learn what the Excel MATCH function does, how its three arguments work, and when to use exact match versus approximate match. You will also see why MATCH requires a one dimensional array and how to combine MATCH with INDEX to perform reliable lookups. This is aimed at analysts and Excel users who want precise, flexible lookup formulas.

What You'll Learn / Key Take-Aways
- MATCH returns the position of a value inside a single row or column.
- MATCH has three parts: lookup value, lookup array, and match type. Use 0 for exact matches most of the time.
- The lookup array must be one dimensional so MATCH can return a single position number.
- MATCH is rarely used on its own; it becomes powerful when combined with INDEX to retrieve values from tables.
- Common pitfalls include using two-dimensional ranges, confusing match types, and not anchoring ranges when copying formulas.
## What the MATCH function does
All right, MATCH is simple and direct. It tells Excel where a value appears in a single row or a single column. Instead of returning the value itself, MATCH returns the numeric position. For example, if the word pliers appears as the fourth item in column A, MATCH will return 4.
Why use MATCH? Because position is exactly what other functions like INDEX need to return the corresponding value from a different row or column. MATCH is almost always a supporting player in a larger formula.
## MATCH syntax and the three components
The syntax looks like this:
MATCH(lookup_value, lookup_array, match_type)
- lookup_value: the value you are searching for. It can be text, a number, or a cell reference.
- lookup_array: the single row or single column where Excel should look. It must be one dimensional.
- match_type: controls how MATCH finds a value. Use 0 for exact match. Use 1 to find the largest value less than or equal to the lookup value when the array is sorted ascending. Use -1 to find the smallest value greater than or equal to the lookup value when the array is sorted descending.
Most of the time you will use match_type = 0 for exact matches. That eliminates surprises and makes formulas easier to reuse.
## Examples in plain English
Example 1: Find a product name in a column
- Scenario: You have product names in column A and you want to know which row contains pliers.
- Formula: =MATCH("pliers", A:A, 0)
- Result: 4, if pliers is the fourth entry in column A.
Example 2: Find a number in a row
- Scenario: Row 3 contains numbers across columns A to F and you want the position of 66.
- Formula: =MATCH(66, A3:F3, 0)
- Result: 3, if 66 is the third cell from the left in that row.
Both examples show MATCH scanning from the start of the lookup array until it finds the lookup value and then returning the relative position.
## Why MATCH requires a one dimensional array
MATCH must return a single integer position. If you supply a two dimensional range, Excel cannot summarize a row and column into one number in a meaningful way. For example, if a value appears in row 2, column 3 of a selection, would the function return 2, 3, or 5? To avoid that ambiguity, MATCH asks that you point to a single column or a single row.
If you need to search a table, decide whether you are locating a row number or a column number and pass the appropriate single row or single column to MATCH.
## Common match types and when to use them
- 0 Exact match: Use this when you need the value to match exactly. This is the right choice for text and identifiers.
- 1 Approximate match, sorted ascending: This finds the largest value less than or equal to the lookup. Only use when the lookup_array is sorted in ascending order and you need a range-style lookup.
- -1 Approximate match, sorted descending: This finds the smallest value greater than or equal to the lookup. Use only when the array is sorted descending.
Pro tip: Unless you have a specific reason and the data is sorted correctly, stick with 0.
## Combining INDEX and MATCH for powerful lookups
INDEX returns a value at a given row and/or column. MATCH returns the position. Put them together and you get a flexible lookup that does not depend on column order.
Basic pattern:
=INDEX(return_range, MATCH(lookup_value, lookup_column, 0))
Example: Suppose column A has part names and column B has prices. To find the price of pliers:
=INDEX(B:B, MATCH("pliers", A:A, 0))
Why this is better than VLOOKUP:
- INDEX + MATCH does not require the lookup column to be the leftmost column.
- It is more robust against column insertion or reordering.
- It can be faster on large data sets when used with exact match.
## Additional Tips, Pitfalls to Avoid & Pro Advice
- Do not pass a two dimensional range to MATCH. It will produce unexpected results or errors.
- Remember to lock ranges with absolute references when copying formulas, for example $A:$A or $B$2:$B$100.
- When matching text, watch for extra spaces or inconsistent case. MATCH is case-insensitive but extra spaces will break matches. Use TRIM to clean data if needed.
- If MATCH returns #N/A, it means the value was not found. Wrap it in IFERROR to provide a user-friendly message.
- Avoid approximate match types unless you are working with sorted numeric ranges and you understand how the match_type behaves.
## FAQ
Q: What does the MATCH function do in Excel?
A: MATCH returns the position of a lookup value within a single row or column. It does not return the value itself but a number indicating where the value appears relative to the start of the lookup array.
Q: What are the three arguments of MATCH and which should I use most often?
A: The arguments are lookup_value, lookup_array, and match_type. Use match_type = 0 for exact matches most often.
Q: Why does MATCH require a single row or column as the lookup array?
A: Because MATCH returns one numeric position. A two dimensional range would make the position ambiguous. Choose a single row to get a column position or a single column to get a row position.
Q: How do I use MATCH with INDEX to pull a corresponding value?
A: Use MATCH to find the row or column number, then pass that position into INDEX. For example, INDEX(B:B, MATCH("pliers", A:A, 0)) returns the price for pliers when prices are in column B and part names are in column A.
Q: What does a #N/A error from MATCH mean?
A: #N/A means the lookup value was not found. Check for typos, extra spaces, and whether you used the correct match_type.
Q: Should I ever use match_type 1 or -1?
A: Only when working with sorted numeric arrays and when you want an approximate match. For most exact lookups, use 0.
## Summary of Key Points / Take-Home Messages
- MATCH finds the position of a value in a single row or column and returns that position number.
- Use match_type = 0 for exact matches nearly all the time.
- MATCH must operate on a one dimensional array so it can return a single position.
- Combine INDEX and MATCH for robust, flexible lookups that do not depend on column order.
- Clean your data and lock ranges to avoid common errors when copying formulas.






