Quick fix (copy/paste)
If you want exact matches, make match mode explicit:
=VLOOKUP(A2, PriceTable, 2, FALSE)
And fail loud when missing:
=IFNA(VLOOKUP(A2, PriceTable, 2, FALSE), "NOT FOUND")
If approximate match is intentional (tier bands), keep it explicit and keep the table sorted.
What this error is
A VLOOKUP without an explicit match mode (4th argument), or using a risky/ambiguous match mode when exactness is intended. In practice, this includes:
- Missing 4th argument (
VLOOKUP(key, range, index)) - Explicit approximate match (
TRUEor1) when the lookup should be exact - Dynamic match mode (cell references or expressions), which makes intent unclear
Why it causes silent wrong numbers
- Closest-match behavior can return the wrong row without error.
- The wrong value is usually plausible, so it survives reviews and gets reported.
- The mistake spreads when formulas are filled down and reused across tabs/months.
Real example
Imagine a simple price table:
SKU-001 → $10
SKU-005 → $15
SKU-010 → $20
If you look up SKU-003 with approximate match, the formula may return a nearby row (e.g., SKU-001) instead
of returning "not found". That is useful for tier bands, but dangerous for identifiers like SKUs, employee IDs, or invoice numbers.
Fix hierarchy
- Make intent explicit: set match mode to
FALSEfor exact, orTRUEfor bands. - Fail loud: wrap in
IFNAso missing keys are visible. - Prefer modern patterns when possible (XLOOKUP / INDEX+MATCH) to reduce fragility.
Edge cases (when NOT to change to exact)
Approximate match is correct in banded lookup tables (tax brackets, shipping tiers, discount thresholds). In those cases:
- Keep approximate match explicit.
- Ensure the lookup table is sorted by the lookup key.
- Document the banding logic in the sheet (assumptions section).
How SheetSage detects this (R1)
SheetSage scans formulas and flags unsafe/missing VLOOKUP match modes, then clusters repeated formulas so you can fix the pattern in bulk. When intent matters, SheetSage can present options (make approximate explicit vs enforce exact match).
Next read: MATCH exact vs approximate and reference drift.
FAQ
Why does VLOOKUP return a value when the item does not exist?
With approximate behavior, VLOOKUP can return the closest match in the table rather than failing. If you want identifiers to be
exact, you should explicitly use FALSE and wrap with IFNA.
When is approximate match actually correct?
Tier bands: brackets, thresholds, rate tables, shipping tiers. The table must be sorted by the lookup key.
How do I make “not found” obvious?
Wrap the lookup in IFNA (or IFERROR) and return a clear sentinel like "NOT FOUND".
What is safer: VLOOKUP or XLOOKUP?
XLOOKUP is generally clearer and avoids column index counting. Many legacy sheets still use VLOOKUP; the key is to make intent explicit and fail loud when missing.