XLOOKUP vs VLOOKUP (Google Sheets) 2025: Switch Guide

by

XLOOKUP vs VLOOKUP is the Google Sheets showdown most teams should settle in 2025. If you’ve ever broken a dashboard by inserting a new column, or spent hours debugging “#N/A” in a client report, this guide is for you. Below, you’ll get a plain‑English comparison, copy‑paste formulas, and a 30‑minute migration plan so you can finally switch from VLOOKUP to XLOOKUP with confidence.

XLOOKUP vs VLOOKUP in Google Sheets with side-by-side examples
XLOOKUP vs VLOOKUP in Google Sheets: speed, stability, and flexibility in 2025.

XLOOKUP vs VLOOKUP: the quick answer

  • XLOOKUP is more flexible and safer than VLOOKUP. It looks left or right, returns multiple columns, supports exact/closest match modes, and won’t break when you insert columns.
  • VLOOKUP is older, one‑directional (right only), fragile with column insertions, and limited match control.
  • If you build anything long‑lived (dashboards, ops sheets, client reports), switch to XLOOKUP.
Cheat sheet: XLOOKUP vs VLOOKUP key differences
Cheat sheet: why XLOOKUP replaces VLOOKUP for most use cases.

What XLOOKUP can do that VLOOKUP can’t

  • Look left or right: No more rearranging tables just to match on a left column.
  • Return multiple columns at once: Spill a whole row of results in one go.
  • Robust to structure changes: Column inserts don’t break the formula.
  • Built‑in not‑found handling: Friendly messages instead of raw #N/A.
  • Match modes: Exact match, next smaller, or next larger—powerful for pricing tiers and ranges.
  • Wildcard matching: Use ? and * to match patterns (handy for SKUs).
XLOOKUP returning multiple columns in Google Sheets using spill
Return multiple columns with a single XLOOKUP—no extra helper formulas.

Where VLOOKUP still works (and when to keep it)

  • One‑off quick checks in small ad‑hoc tables.
  • Legacy sheets where changing formulas is risky today.
  • Team members who only know VLOOKUP and need a short‑term fix.

However, for any sheet you’ll share, scale, or maintain—prefer XLOOKUP.

XLOOKUP syntax (Google Sheets) with examples

Syntax:

=XLOOKUP(search_key, lookup_range, return_range, [if_not_found], [match_mode], [search_mode])

Parameters to remember:

  • search_key: the value you’re matching (e.g., an email or SKU)
  • lookup_range: the column or row that contains the key
  • return_range: the column(s) or row(s) to return
  • if_not_found (optional): message or value when no match is found
  • match_mode (optional): 0 exact (default), -1 next smaller, 1 next larger, 2 wildcard
  • search_mode (optional): 1 forward (default), -1 reverse

Exact match (typical lookup):

=XLOOKUP(A2, Customers!A:A, Customers!D:D, "Not found")

Multiple columns at once (spill):

=XLOOKUP(A2, Products!A:A, Products!C:E, "Missing product")

Wildcard (match SKU prefix):

=XLOOKUP(A2 & "*", Catalog!A:A, Catalog!B:B, "No SKU", 2)

Tiered pricing (next smaller):

=XLOOKUP(B2, Tiers!A:A, Tiers!B:B, "No tier", -1)

VLOOKUP refresher (why it breaks)

Syntax:

=VLOOKUP(search_key, range, index, [is_sorted])

  • Can only return from a column to the right of the search column.
  • Relies on a numeric index; insert a column and your index becomes wrong.
  • is_sorted TRUE needs sorted data and returns approximate matches—often not what you want.

Typical exact‑match pattern (wrapped):

=IFERROR(VLOOKUP(A2, Products!A:E, 4, FALSE), "Missing product")

Compare this to the equivalent XLOOKUP that’s easier to read and harder to break:

=XLOOKUP(A2, Products!A:A, Products!D:D, "Missing product")

Convert your VLOOKUPs to XLOOKUPs (step‑by‑step)

  1. Identify the search_key column used in VLOOKUP (first column of the range).
  2. Replace the VLOOKUP range with two ranges: lookup_range and return_range.
  3. Remove the VLOOKUP index; XLOOKUP uses explicit return ranges.
  4. Set [if_not_found] to keep user‑friendly messages.
  5. Optional: choose a [match_mode] if you need tiered or wildcard matching.

Example migration:

Before (VLOOKUP): =IFERROR(VLOOKUP(A2, SKUs!A:H, 6, FALSE), "No match")

After (XLOOKUP): =XLOOKUP(A2, SKUs!A:A, SKUs!F:F, "No match")

How to convert VLOOKUP to XLOOKUP: mapping components
Map VLOOKUP parts to XLOOKUP: search key → lookup range → return range.

Advanced patterns you’ll actually use

Multi‑criteria lookup (email + date)

Build a helper key inline using & and use wildcard if needed.

=XLOOKUP(A2 & "|" & TEXT(B2, "yyyy-mm-dd"),
FILTER(Table!A:A & "|" & TEXT(Table!B:B, "yyyy-mm-dd"), LEN(Table!A:A)),
Table!E:E, "No record")

2D lookup (row & column headers)

Combine two XLOOKUPs: one to find the column, one to find the row.

=XLOOKUP(A2, Items!A:A,
XLOOKUP(B1, Items!1:1, Items!2:999),
"Missing")

Partial text matches (contains)

=XLOOKUP("*" & A2 & "*", Descriptions!B:B, Descriptions!C:C, "No match", 2)

Return a whole record (spill)

=XLOOKUP(A2, Leads!A:A, Leads!B:G, "Not found")

Error handling, arrays, and performance tips

  • Friendly errors: Use [if_not_found] to avoid nested IFERROR in most cases.
  • ARRAYFORMULA: XLOOKUP can spill across columns; for down‑column fill, prefer placing XLOOKUP at the top of a results block and letting it spill rather than dragging.
  • Volatile helpers: Minimize repeated expensive ranges (e.g., use named ranges for large tables).
  • Data types: Ensure numbers are numbers; stray text digits cause misses. Use VALUE() to coerce if needed.

INDEX MATCH vs XLOOKUP (do you still need it?)

INDEX MATCH used to be the flexible alternative to VLOOKUP. XLOOKUP now consolidates that power with clearer syntax and extras like [if_not_found] and match modes. Keep INDEX MATCH in your toolkit for niche array gymnastics, but for day‑to‑day business lookups, XLOOKUP wins.

INDEX MATCH example for context:

=INDEX(Products!D:D, MATCH(A2, Products!A:A, 0))

Equivalent XLOOKUP:

=XLOOKUP(A2, Products!A:A, Products!D:D, "Missing product")

Implementation guide: migrate a sheet in 30 minutes

  1. Audit: Find your top 5 VLOOKUP formulas (use Find for “VLOOKUP(”).
  2. Map: For each, write down search key, lookup column, return column(s), and desired not‑found text.
  3. Replace: Convert one formula at a time to XLOOKUP. Test with 3–5 known cases.
  4. Spill where helpful: Replace chains of VLOOKUPs with one XLOOKUP that returns multiple columns.
  5. Document: Add a note near the header: “Uses XLOOKUP, exact match.”
  6. Lock: Protect key ranges to prevent accidental column inserts that could confuse teammates.
XLOOKUP migration checklist for teams
Scope → Replace → Test → Spill → Document → Protect. That’s your migration loop.

Templates and resources

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.

From our library (related guides)

Trusted sources and official docs

Final recommendations

  • Use XLOOKUP for anything you’ll maintain or share. It’s safer and clearer.
  • Replace your top five VLOOKUPs today—start with ones that break most often.
  • Document match modes and not‑found behavior so teammates trust your sheets.

Frequently Asked Questions

Is XLOOKUP available in Google Sheets?

Yes. Google Sheets supports XLOOKUP with the same core behavior as Excel’s version, including match modes and optional not‑found text.

Why do my XLOOKUPs return #N/A?

Most misses are type mismatches (text vs number) or extra spaces. Use VALUE() or TRIM(), and set the optional if_not_found argument.

Can XLOOKUP look to the left?

Yes—unlike VLOOKUP, XLOOKUP can return from any column or row. Just point return_range wherever you want.

How do I replace IFERROR with XLOOKUP?

Use the fourth XLOOKUP argument. Example: =XLOOKUP(A2, A:A, D:D, “Not found”). No IFERROR needed.

Which is faster—XLOOKUP or VLOOKUP?

For most practical sheets, performance is similar. XLOOKUP often reduces formula count (spilling multi‑columns), which can improve overall speed.

Should I still learn INDEX MATCH?

It’s useful to understand, but XLOOKUP covers most INDEX MATCH scenarios with cleaner syntax.

How do I do a partial text match?

Use match_mode 2 and wildcards: =XLOOKUP(““&A2&”“, B:B, C:C, “No match”, 2).

Can XLOOKUP return multiple columns?

Yes. Select a multi‑column return_range to spill adjacent results.

What’s the difference between match modes -1 and 1?

-1 returns the next smaller value (useful for tiers). 1 returns the next larger value.

How do I migrate a big report safely?

Replace in small sections, test with known values, and document behavior. Protect key ranges after migration.

all_in_one_marketing_tool