Quick fix (copy/paste patterns)
Anchor stable ranges with $ so they do not drift when copied:
$B$5:$C$100
Or use a named range for readability:
PriceTable
What this error is
A lookup or reference range that is partially anchored (some $ but not fully) or fully relative when it should remain
stable. This commonly appears inside:
VLOOKUP(search_key, range, ...)(range argument)MATCH(search_key, range, ...)(range argument)XLOOKUP(search_key, lookup_range, result_range, ...)(lookup and result ranges)
Why it is risky
- Copy down 50 rows and the lookup table can “walk” with the formula.
- Outputs still look valid because they are calculated, just from the wrong cells.
- The drift compounds when templates are copied across months and workbooks.
Safe patterns
- Anchor stable ranges (both row and column) for lookup tables.
- Use mixed references intentionally only when a range should move in one direction.
- Prefer named ranges when the same table is referenced everywhere.
- Stress test: copy the formula across the expected area and verify references do not shift.
How SheetSage detects this (R4)
SheetSage inspects literal A1 ranges inside common lookup functions. It can auto-fix partially anchored ranges by inserting the
missing $ markers. For fully-relative ranges, it recommends anchoring and may ask for confirmation, because intent can
be ambiguous.
Related reading: VLOOKUP match mode and column index risk.
FAQ
What’s the difference between absolute and mixed references?
Absolute references lock both the column and row (e.g., $B$5). Mixed references lock only one part (e.g.,
$B5 or B$5).
Why did my lookup table shift when I copied the formula?
Because the range was relative (or partially anchored). When you copy the formula, the range moves with it unless you anchor it.
When should references remain relative?
When the reference is intentionally tied to the row/column you copy into (like row-by-row calculations). Lookup tables and control ranges should usually be anchored.