VLOOKUP TRUE vs FALSE: Approximate vs Exact Match
By ExcelReady TeamUpdated 7 min read
The short answer
VLOOKUP's last argument sets the match type. FALSE (or 0) finds an exact match and returns #N/A if the value is missing. TRUE (or 1, or leaving it out) finds the largest value less than or equal to the lookup value, and needs the first column sorted smallest to largest. Use FALSE for IDs and names, TRUE for bands.
Key takeaways
- FALSE means exact match; TRUE means approximate match. Leaving the argument out means TRUE.
- TRUE needs the first column sorted in ascending order, or it can return wrong answers without any error.
- TRUE returns the largest value less than or equal to the lookup value, which suits tax bands, grades and commission tiers.
- Wildcards such as * and ? only work with FALSE.
On this page+
The short answer to VLOOKUP TRUE vs FALSE: the last argument chooses how VLOOKUP matches. FALSE finds an exact match, and TRUE finds an approximate match in a sorted list, meaning the closest value that is not bigger than the one you look up. Use FALSE when you look up IDs, names or codes, and TRUE when you look up a number in bands such as tax brackets or grades. This comparison is for anyone who has seen a VLOOKUP return the wrong row and wants to know why.
VLOOKUP TRUE vs FALSE at a glance#
FALSE asks "is this exact value here?"; TRUE asks "which band does this number fall into?".
| Feature | FALSE (exact match) | TRUE (approximate match) |
|---|---|---|
| Also written as | 0 | 1, or leave the argument out |
| What it finds | The exact lookup value | The largest value less than or equal to the lookup value |
| First column must be sorted | No | Yes, ascending (A to Z, smallest to largest) |
| Value not found | #N/A | Returns the band below; #N/A only if smaller than the first value |
| Unsorted data | Works correctly | Can return wrong answers with no error |
Wildcards (*, ?) | Yes, for text | No |
| Typical use | IDs, names, product codes, emails | Tax bands, grades, discount and commission tiers |
| Default if omitted | No | Yes |
The full syntax is =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]). The fourth argument, range_lookup, is the one this article is about. The VLOOKUP function guide covers the other three.
How each match type works#
Both settings use the same first three arguments; only the way VLOOKUP searches the first column changes.
FALSE: exact match#
With FALSE, VLOOKUP looks down the first column for a cell that equals the lookup value exactly, and returns the value from the column you name.
| A | B | C | |
|---|---|---|---|
| 1 | Code | Product | Price |
| 2 | P-104 | Stapler | 6.50 |
| 3 | P-101 | Notebook | 2.25 |
| 4 | P-110 | Desk lamp | 18.00 |
| 5 | P-103 | Pen pack | 3.75 |
=VLOOKUP("P-110",A2:C5,3,FALSE)The result is 18.00. The list is not sorted, and that doesn't matter. Look up "P-999" and you get #N/A, which is honest: the code isn't there. Upper and lower case don't matter, so "p-110" also matches.
FALSE also lets you use wildcards in text lookups. =VLOOKUP("Desk*",B2:C5,2,FALSE) returns 18.00, because * stands for any characters after "Desk". The VLOOKUP lesson practises exact-match lookups step by step.
TRUE: approximate match#
With TRUE, VLOOKUP assumes the first column is sorted from smallest to largest and returns the row with the largest value that is less than or equal to the lookup value. Think of the first column as the lower limit of each band.
| A | B | |
|---|---|---|
| 1 | Sales from | Rate |
| 2 | 0 | 2% |
| 3 | 10,000 | 4% |
| 4 | 25,000 | 6% |
| 5 | 50,000 | 8% |
=VLOOKUP(32000,A2:B5,2,TRUE)The result is 6%. 32,000 isn't in the list, so VLOOKUP takes the largest limit that doesn't go over it: 25,000. Sales of exactly 25,000 also return 6%, and 9,999 returns 2%. Any amount of 50,000 or more returns 8%.
If the lookup value is smaller than the first value in the column, there is no band to fall into, and VLOOKUP returns #N/A. That's why tier tables usually start at 0. The approximate VLOOKUP lesson builds a table like this from scratch.
The same lookup with TRUE and FALSE#
Using the commission table above, here is what each match type returns:
| Sales | ...,2,TRUE) | ...,2,FALSE) |
|---|---|---|
| 25,000 | 6% | 6% |
| 32,000 | 6% | #N/A |
| 9,999 | 2% | #N/A |
| 75,000 | 8% | #N/A |
FALSE only finds values that are exactly in the list. For bands, that's useless. Now go back to the product table and try TRUE:
=VLOOKUP("P-102",A2:C5,3,TRUE)There is no P-102, but instead of #N/A you can get a price from another row, because TRUE returns "the closest one below". And since the codes aren't sorted, even codes that do exist can come back with the wrong price. There is no error to warn you, which is what makes this mistake so costly.
When to use FALSE#
Use FALSE for any lookup where the value must exist exactly. It fits:
- IDs and codes: employee numbers, product codes, order numbers.
- Names and emails, where a near miss would be a different person.
- Unsorted data, which is most real data.
- Wildcard searches, such as names that start with a certain word.
- Job tests and interviews. If the task says "find the price for this product", FALSE is the expected answer. The VLOOKUP interview questions cover this point often.
When to use TRUE#
Use TRUE when you place a number into a band. It fits:
- Tax brackets and pay scales.
- Grade boundaries, such as 0 = F, 50 = C, 70 = B, 85 = A.
- Discount, commission or shipping tiers.
- Date bands, such as which price list applies on a given date, when the start dates are sorted.
- Shipping by weight, where each row holds the starting weight of a price band and a parcel of 2.7 kg falls into the band that starts at 2 kg.
- Scoring rubrics, such as turning a satisfaction score of 0 to 100 into a label like Poor, Fair, Good or Excellent.
The rules are strict: the first column must hold the lower limit of each band, and it must be sorted from smallest to largest.
Common mistakes with the last argument#
- Leaving it out. VLOOKUP then uses TRUE. On unsorted IDs, this returns wrong values. Always type FALSE for exact lookups.
- Using TRUE on an unsorted list. Sort the first column ascending (Data > Sort A to Z), or switch to FALSE.
- Putting upper limits in the first column. For TRUE, list where each band starts (0, 10,000, 25,000), not where it ends.
- Expecting #N/A from TRUE. Approximate match returns the band below a missing value. That's correct for tiers but wrong for codes.
- Numbers stored as text. With FALSE, the number 101 doesn't match the text "101". Convert one side so both are the same type.
- Forgetting to lock the table. Before filling down, use
$A$2:$B$5(press F4 on Windows or ⌘T on a Mac).
How XLOOKUP handles the same choice#
XLOOKUP, in Excel 2021 and Microsoft 365, defaults to an exact match, so the risky default is gone. For bands, its fifth argument, match_mode, set to -1 means "exact match or next smaller item", like VLOOKUP with TRUE, and XLOOKUP doesn't need the list sorted for this. =XLOOKUP(32000,A2:A5,B2:B5,,-1) returns 6%. See VLOOKUP vs XLOOKUP and VLOOKUP vs INDEX MATCH for the full comparison, and VLOOKUP vs HLOOKUP if your table runs across rows.
Our recommendation#
Type FALSE every time, unless you are deliberately looking up a number in sorted bands. Exact match is what almost every lookup needs, and its #N/A tells you honestly when something is missing. Use TRUE for tax brackets, grades and tiers, with the lower limits sorted from smallest to largest. Never rely on the default.
In short: FALSE for things, TRUE for bands, and never leave the argument blank.
Practise it#
Try the exercise on this page: find a commission rate with an approximate match. Then practise exact-match VLOOKUP in a live spreadsheet and the approximate-match VLOOKUP lesson: you type each formula, and it checks your answer instantly.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
The table in A2:B5 shows commission rates by sales tier. In E2, use VLOOKUP with an approximate match to find the rate for the sales in D2.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rate | Rate | ||||
| 2 | ||||||
| 3 | ||||||
| 4 | ||||||
| 5 | ||||||
| 6 | ||||||
| 7 | ||||||
| 8 |
Tip: Look up D2 in A2:B5, return column 2, and use TRUE as the last argument so VLOOKUP finds the tier at or below 32,000.
Practise this in a lesson
Frequently asked questions
What does FALSE mean in VLOOKUP?
FALSE tells VLOOKUP to find an exact match. If the lookup value isn't in the first column, it returns #N/A. You can type 0 instead of FALSE; it means the same thing.
What happens if I leave out TRUE or FALSE in VLOOKUP?
VLOOKUP uses TRUE, an approximate match. On an unsorted list, that can return a wrong value with no error, which is why most people always type FALSE for lookups by ID or name.
When should I use TRUE in VLOOKUP?
Use TRUE when you look up a number in bands, such as tax brackets, grade boundaries, discount tiers or commission rates. The first column must hold the lower limit of each band, sorted from smallest to largest.
Why does my VLOOKUP with TRUE return the wrong value?
Usually the first column isn't sorted in ascending order. Approximate match assumes the list is sorted and stops searching early. Sort the table by its first column, or use FALSE if you need an exact match.
Is VLOOKUP with FALSE slower than TRUE?
On very large lists, approximate match can be faster because it searches a sorted list more cleverly. For everyday sheets, the difference is too small to notice, so choose by the result you need.