Your spreadsheets are only as good as your lookups. If you’ve wrestled with broken ranges, wrong columns, or mysterious N/As, it’s time to leave VLOOKUP behind. In this 2025 guide, we break down VLOOKUP vs XLOOKUP in Google Sheets with practical formulas, edge‑case fixes, and migration patterns you can use today. You’ll learn when XLOOKUP is faster, safer, and more flexible—and how to switch without breaking existing models.
Stop fighting your lookups: XLOOKUP fixes VLOOKUP’s biggest pain points.
XLOOKUP vs VLOOKUP: what changes (and why it matters)
XLOOKUP is a modern, bidirectional lookup that replaces VLOOKUP’s left‑to‑right limitation and fragile column indexing. It’s easier to read, safer to copy, and handles missing values gracefully—no helper columns or INDEX/MATCH gymnastics required.
Look both directions: left, right, up, or down without rearranging your data.
No more “column number” gotchas: reference the actual return range.
Built‑in default for not found: show a friendly message or fallback value.
Exact match by default (when set)—avoids silent mis‑matches.
Optional match/search modes: first/last, wildcard, binary search, and more.
Anatomy of XLOOKUP: readable arguments, safer references, better defaults.
Formula basics: side‑by‑side examples
Classic VLOOKUP pulls a column number from within a table range. If that table shifts, your results can silently break.
=VLOOKUP(A2, Sheet2!A:D, 4, FALSE) /* fragile: depends on the 4th column staying put */
XLOOKUP separates lookup and return ranges, so layout changes won’t corrupt results.
=XLOOKUP(A2, Sheet2!A:A, Sheet2!D:D, "Not found") /* robust: always returns from column D */
Core use cases (with copy‑paste snippets)
1) Clean product lookups with friendly error handling
=XLOOKUP(E2, Products!A:A, Products!C:C, "No price")
When a SKU is missing, users see “No price” instead of #N/A—no extra IFERROR wrapper needed.
2) Left lookup (impossible with VLOOKUP alone)
=XLOOKUP(B2, Orders!D:D, Orders!A:A, "Order not found")
Search column D, return from column A—no helper columns.
3) Partial matches and wildcards
=XLOOKUP("*"&G2&"*", Customers!B:B, Customers!E:E, "No match", 2)
Match mode 2 enables wildcards. Great for contains/ends‑with lookups.
4) Last occurrence (reverse search)
=XLOOKUP(A2, Ledger!A:A, Ledger!C:C, "—", 0, -1)
search_mode -1 scans from bottom to top, returning the last match—a common need in ledgers and audit logs.
5) Multi‑criteria lookup with concatenation
Build a key with multiple fields on both sides for a precise match.
Use reverse search to fetch the latest change when duplicates exist.
Expert insights: getting teams to adopt XLOOKUP
Conventions beat one‑offs: Standardize named ranges and error messages.
Readable formulas win: XLOOKUP’s argument names map to how humans think—lean into that in training.
Instrument your models: Count how many lookups return defaults and review weekly.
Refactor opportunistically: Convert VLOOKUPs when you touch a sheet for other changes.
Alternatives and when to use them
QUERY: When you want SQL‑style joins/filters in‑sheet; more complex but powerful across ranges/tabs.
Pivot tables: Aggregate first, then XLOOKUP from the pivot for single‑value summaries.
Apps Script: For very large datasets, pre‑compute keys or results server‑side and write back to the sheet.
Implementation guide: switch to XLOOKUP in one afternoon
Pick one critical report with fragile VLOOKUPs.
Add named ranges for lookup and return arrays.
Replace VLOOKUPs with XLOOKUP, adding explicit not‑found defaults.
Test missing keys, duplicate keys (first/last), and whitespace issues.
Share a 1‑page “before/after” guide with your team.
Final recommendations and quick wins
Use XLOOKUP for any new single‑value lookup—make it your default.
Reserve FILTER for multi‑row results and QUERY for complex joins.
Add if_not_found everywhere; your future self (and teammates) will thank you.
Migrate the “noisiest” sheets first to cut support questions fast.
Frequently asked questions
Does Google Sheets support XLOOKUP?
Yes. Google Sheets supports XLOOKUP with the same core arguments you’d expect: lookup_value, lookup_array, return_array, if_not_found, match_mode, and search_mode.
Is XLOOKUP faster than VLOOKUP?
Speed depends on data size and structure. In practice, XLOOKUP’s direct range references and reduced fragility usually make it faster to build and maintain at scale.
How do I do a left lookup in Google Sheets?
Use XLOOKUP. You can reference any return range (left or right) without helper columns.
What’s the best way to handle missing values?
Use the if_not_found argument to show a clear message or a neutral default like “—” or 0, depending on context.
Do I still need INDEX/MATCH?
Rarely. XLOOKUP covers most INDEX/MATCH scenarios with cleaner syntax. Keep INDEX/MATCH only for legacy models or niche array tricks.
How do I get the last matching record?
Set search_mode to -1 in XLOOKUP to search from the bottom up and return the last match.
Can I match partial text?
Yes. Use match_mode = 2 and wildcards like * and ? in your lookup value.
What if there are duplicate keys?
Decide whether you want the first or last occurrence and set search_mode accordingly. For all matches, use FILTER instead.
How do I do multi‑criteria lookups?
Concatenate fields on both sides into a composite key (e.g., Country & "|" & SKU) and use XLOOKUP on that key. Named functions can encapsulate this pattern.
How do I speed up slow sheets?
Limit ranges to the needed columns, use LET to cache repeated arrays, and avoid volatile functions. Consider pre‑aggregating data with QUERY or pivot tables.
Recommended tools & deals
Discover lightweight spreadsheet add‑ons and templates: AppSumo — find CSV tools, data cleaners, and dashboard kits that pair well with Sheets.
Template assets and UI kits: Envato — charts, icons, and presentation templates to polish your reports.
Disclosure: Some links are affiliate links. If you click and purchase, we may earn a commission at no extra cost to you. We only recommend tools we’d use ourselves.