Lookup & Reference · Most-used function

VLOOKUP

The classic vertical lookup. Look up a value in the first column of a table and return a value from another column in the same row. Third most-used Excel function on earth — and the one you'll most often see in someone else's workbook.

=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

Searches for a value in the leftmost column of a range and returns the value from a specified column in the same row.

Category
Lookup & Reference
Returns
Single value
Available since
Excel 2000 (all versions)

What VLOOKUP does

VLOOKUP stands for Vertical Lookup. It's the classic way to look up a value in a table and return related information. Imagine you have a product catalog with product IDs in column A and prices in column B. Given a product ID, VLOOKUP finds the row containing that ID and returns the price. That's the fundamental workflow, and it applies to thousands of business scenarios — matching customer names to accounts, employee IDs to salaries, part numbers to inventory levels.

VLOOKUP was introduced in the earliest versions of Excel and has become the most widely known lookup function in the world. In 2020, Microsoft released XLOOKUP as its official replacement — cleaner syntax, more flexible, safer defaults. But VLOOKUP isn't going anywhere: billions of existing workbooks depend on it, and every finance/analyst professional still needs to read and write it fluently.

Syntax breakdown

VLOOKUP takes four arguments. The first three are required; the fourth is optional but you should always set it explicitly.

lookup_value Required

The value you want to find. Can be a number, text, date, cell reference, or expression. If it's text, wrap in quotes: "Widget-42". If it's a cell reference: A2.

table_array Required

The range containing the lookup table. Critical: the value you're searching for must be in the FIRST column of this range. VLOOKUP always searches left-to-right — it cannot look up a value in column B and return column A.

col_index_num Required

Which column of the table_array contains the value you want returned. Column 1 is the leftmost (same as the lookup column), column 2 is the next one over, and so on. If the range is A2:D100, column 2 is B, column 3 is C, column 4 is D.

range_lookup Optional

FALSE or 0 forces an exact match — the value must match precisely or #N/A is returned. TRUE or 1 (the default) allows approximate match — for this to work correctly, the lookup column MUST be sorted ascending. Almost always use FALSE for business lookups. Leaving it blank is a common source of silent wrong-answer bugs.

How VLOOKUP works step by step

  1. Excel takes your lookup_value and searches down the FIRST column of the table_array, top to bottom.
  2. When it finds a match, it stops at that row.
  3. It then moves right, counting columns, until it reaches column number col_index_num.
  4. It returns whatever value is in that cell.
  5. If no match is found, VLOOKUP returns #N/A.

Understanding this movement — down first, then right — is the key to understanding VLOOKUP's biggest limitation: it can never look "left" of the search column.

5 real-world examples

Example 1 · Basic price lookup

Find a product's price by ID

You have a product catalog in A2:B100 with product IDs in A and prices in B. In cell E2 you've typed a product ID like P-1042. You want F2 to show that product's price.

=VLOOKUP(E2, A2:B100, 2, FALSE)
Result: the price for product P-1042, e.g., $24.99

What happens: Excel searches for "P-1042" in column A. When found, it returns the value in column 2 of the range (which is column B). FALSE ensures exact match.

Example 2 · Tax bracket / tier lookup

Approximate match for a scaled table

You have a tax bracket table where income levels map to tax rates. Row structure: 0 → 10%, 50000 → 22%, 100000 → 32%, 200000 → 37%. Given an income of $75,000, you want the applicable tax rate.

=VLOOKUP(75000, A2:B5, 2, TRUE)
Result: 22% — the rate for the $50,000 bracket (the largest value not exceeding 75,000)

Critical: approximate match requires the lookup column sorted ascending. If unsorted, VLOOKUP silently returns wrong values with no error.

Example 3 · Safe VLOOKUP with error handling

Wrap in IFERROR to prevent #N/A in reports

Lookups fail. Customer not found. Product doesn't exist. Instead of showing ugly #N/A, return a graceful message.

=IFERROR(VLOOKUP(E2, customers, 3, FALSE), "Not found")
Result: either the actual value from column 3, or "Not found" if the lookup fails

This pattern should wrap every VLOOKUP in a production workbook. Read our IFERROR guide for more.

Example 4 · Dynamic column with MATCH

Two-way lookup — flexible column selection

You have monthly sales data with product names in column A and month names as headers (Jan, Feb, Mar in B1:M1). You want to look up a product's sales for a specific month.

=VLOOKUP(A20, A2:M100, MATCH("Mar", A1:M1, 0), FALSE)
Result: the sales figure for the product in A20 during March

Instead of hardcoding 4 as the column index, MATCH finds where "Mar" appears in the header row. This makes the formula adapt automatically if columns are rearranged.

Example 5 · VLOOKUP with wildcards

Partial match with asterisk

You have a customer database with full names like "Ahmed Khan Enterprises" in column A. Given only "Khan" in E2, you want to find the first matching row.

=VLOOKUP("*"&E2&"*", A2:C100, 2, FALSE)
Result: the value from column 2 for the first row containing "Khan" anywhere in column A

The * wildcards mean "any characters before or after". Wildcards only work with FALSE (exact match) — Excel treats the wildcarded string as the "exact" pattern to find.

Common errors and how to fix them

#N/A

Trailing or leading spaces in the data

Your lookup value is "CUST-023" but the table has "CUST-023 " with a trailing space. To your eyes they look identical. Excel treats them as different values.

Fix: =VLOOKUP(TRIM(E2), TRIM(A2:B100), 2, FALSE) — or clean the data with Data → Text to Columns → Finish
#N/A

Numbers stored as text vs actual numbers

Common with CSV imports. Your lookup value is the number 42 but the table has the text "42" (or vice versa). VLOOKUP won't match these across types.

Fix: convert with =VALUE() on one side, or select the column → Data → Text to Columns → Finish to bulk convert
#N/A

Approximate match on unsorted data

You left range_lookup blank (defaults to TRUE), but your lookup column isn't sorted ascending. VLOOKUP silently returns wrong values, or #N/A when it thinks the value doesn't exist.

Fix: always add FALSE explicitly for business lookups: =VLOOKUP(E2, A2:B100, 2, FALSE)
#N/A

Lookup value not in the first column

You want to look up a customer name (column B) and return their ID (column A). VLOOKUP can't do this — it only searches the leftmost column of the range.

Fix: use INDEX/MATCH or XLOOKUP for left lookups
#REF!

col_index_num larger than the table has columns

You wrote =VLOOKUP(E2, A2:C100, 5, FALSE) but the range only has 3 columns (A, B, C). Column 5 doesn't exist.

Fix: extend the table range or use a smaller col_index_num
#VALUE!

col_index_num less than 1

You wrote =VLOOKUP(E2, A2:C100, 0, FALSE) — column 0 doesn't exist. Column numbering starts at 1.

Fix: use 1 for the leftmost column, 2 for the next, etc.

For a complete list of lookup errors, see our Lookup Errors guide.

VLOOKUP vs XLOOKUP vs INDEX/MATCH

These three approaches solve the same fundamental problem. Which should you use?

VLOOKUP Use when: your workbook must work in Excel 2019 or earlier, or when everyone on your team knows VLOOKUP but not the alternatives. Learn it because you'll always encounter it in others' workbooks.
XLOOKUP Use when: you're on Excel 365 or 2021+. Default choice for new work. Cleaner syntax, safer defaults, can look up in any direction, has built-in "if not found" argument. Read our XLOOKUP guide.
INDEX/MATCH Use when: you need bidirectional lookups, two-way matrix lookups, or complex nested criteria that XLOOKUP doesn't handle elegantly. The flexibility champion for advanced scenarios. Read our INDEX/MATCH guide.

Version compatibility

Excel 365
✓ Full support
Excel 2021
✓ Full support
Excel 2019
✓ Full support
Excel 2016
✓ Full support
Excel Online
✓ Full support
Excel Mac
✓ Full support
Excel iPad
✓ Full support
Google Sheets
✓ Full support

Related functions

📥 Download the practice workbook

All 5 examples above in a working .xlsx file with sample data. Open in Excel or Google Sheets and try modifying the formulas.

Workbook coming soon — check back after our team releases it.

Frequently asked questions

Should I stop using VLOOKUP in 2026?

Only in new work where you control the workbook and you're on Excel 365 or 2021+. In those cases, XLOOKUP is a better default. But VLOOKUP still works everywhere, isn't deprecated, and every workbook you inherit will use it. Learn both.

Why is my VLOOKUP returning #N/A when I can clearly see the value?

99% of the time it's an invisible data mismatch. Test with =EXACT(lookup_value, target_cell). If FALSE, the values differ — trailing spaces, non-breaking spaces from web pastes, numbers stored as text, or casing issues. Wrap both in TRIM() to test.

Can VLOOKUP search left?

No. VLOOKUP always searches the leftmost column of its range and returns something to the right. For left lookups, use INDEX/MATCH or XLOOKUP. This is VLOOKUP's biggest limitation.

Is INDEX/MATCH really faster than VLOOKUP?

On modern Excel with modern computers, the speed difference is negligible for most workbooks. Where INDEX/MATCH wins is flexibility — bidirectional lookups, two-way lookups, and complex scenarios VLOOKUP can't do. The speed argument was more valid on old hardware.

How do I VLOOKUP with multiple criteria?

Two approaches. Traditional: create a helper column concatenating your criteria (e.g., =A2&"|"&B2) and VLOOKUP against that. Modern: use FILTER with multiplied conditions, or XLOOKUP with concatenated arguments.

Why does VLOOKUP with approximate match return wrong answers silently?

Because approximate match assumes your lookup column is sorted ascending. If it isn't, VLOOKUP returns whatever value happens to be at the "would-be" insertion point — often completely wrong. Always add FALSE explicitly unless you specifically need bracket-lookup behavior on sorted data.

What's the maximum table_array size for VLOOKUP?

Excel's total limit is 1,048,576 rows × 16,384 columns. VLOOKUP works across the entire sheet if needed. For huge datasets (100K+ rows), performance may slow — consider Excel Tables, Power Query, or Power Pivot for cleaner alternatives.

Never write VLOOKUP by hand again.

Describe what you want — "look up customer name from the orders table" — and the Add-in writes the exact VLOOKUP or XLOOKUP formula for you.

Get the Add-in →