VLOOKUP is Fine. Your Workarounds Aren't.

VLOOKUP works. That's the take. It works exactly as designed - and the design is from 1993.

The lookup column must be first. The return column is specified by position. One inserted column and your formula is silently returning wrong data, wrapped in an IFERROR so nobody notices until the quarterly numbers don't add up.

None of that is a bug. It's just a thirty-year-old solution to a problem we now have better tools for.

Why people keep using it

VLOOKUP is the first lookup function most people learn, and it works well enough that the pain is gradual. You don't hit the column-number problem until someone reorganises the sheet. You don't notice the IFERROR swallowing real errors until something is wrong for three weeks before you find it. By then the workbook is in production, twenty people depend on it, and fixing it feels riskier than leaving it.

So it stays. And then it gets copied into the next workbook. And the one after that.

Why that's a problem

The column index number is the core issue. VLOOKUP(A2, B:F, 3, FALSE) doesn't know your third column is "Status." It counts from the left edge of B:F and returns whatever's there. Restructure the table and the count is wrong. No warning. Just wrong data, delivered confidently.

IFERROR makes this worse. It was designed to catch genuine not-found results, but it catches everything — including the formula errors that would tell you something has broken. You get "Not Found" whether the record doesn't exist or whether your column count drifted last Tuesday.

At small scale, you notice. In a report that runs automatically, you don't.

The better way

XLOOKUP separates the lookup column from the return column entirely:

excel
=XLOOKUP(A2, B:B, E:E, "Not Found")

B:B is where you look. E:E is what you return. Move columns around, insert new ones, sort differently — the formula doesn't care. And the "Not Found" argument handles genuine misses without hiding actual errors.

If you're on Excel 2019 or sharing with people who are, INDEX/MATCH does the same thing and works everywhere:

excel
=INDEX(E:E, MATCH(A2, B:B, 0))

Same logic. Lookup and return are separate references. Column order is irrelevant.

The migration isn't complicated: stop writing new VLOOKUPs today, and when you next touch a workbook, convert anything with a hardcoded column number above 3 and anything wrapped in IFERROR. Those are your highest-risk formulas. Everything else can wait.

VLOOKUP had a good run. Thirty-two years is more than most software features get. You can let it retire.