SB
Sheets Bootcamp
Intermediate 8 min read

VLOOKUP Return Multiple Values in Google Sheets

Learn how to return multiple values with VLOOKUP in Google Sheets. Three methods: FILTER function, INDEX MATCH array, and helper column approach.

SB

Sheets Bootcamp

March 15, 2026 ¡ Updated April 25, 2026

VLOOKUP returns one value: the first match it finds. When your data has multiple rows that match the search key, VLOOKUP ignores everything after the first one. There is no built-in way to make VLOOKUP return all matches.

This guide covers three ways to return multiple values for a single lookup: the FILTER function (recommended), an INDEX MATCH array approach, and a helper column workaround.

In This Guide

Why VLOOKUP Only Returns One Value

VLOOKUP scans down the first column of a range and stops at the first row where the value matches. It has no concept of “keep searching” after finding a match.

Consider the sales records below. “Sherlock Holmes” appears in rows 2, 5, 9, and 13. A VLOOKUP for “Sherlock Holmes” returns only the data from row 2:

Formula
=VLOOKUP("Sherlock Holmes", B2:G10, 6, FALSE)

This returns $24.00, the commission from Fred’s first sale. His other three sales are ignored.

VLOOKUP returning only the first match for Sherlock Holmes

The FILTER function is the cleanest way to return multiple matching rows. It was designed for this exact use case.

Step-by-Step

1

Identify the data and the value with multiple matches

In the sales records, Sherlock Holmes appears in multiple rows. A standard VLOOKUP returns only the first.

Sales records table with Sherlock Holmes appearing in multiple rows

2

Write a FILTER formula to return all matching rows

Enter the following formula:

Formula
=FILTER(A2:G10, B2:B10="Sherlock Holmes")

A2:G10 is the data range to return. B2:B10="Sherlock Holmes" is the condition. FILTER returns every row where column B equals “Sherlock Holmes.”

FILTER formula returning all rows for Sherlock Holmes

3

Review the spilled results

The formula returns all matching rows. Each result spills into the cells below and to the right automatically. No additional formulas needed.

FILTER results showing 3 rows for Sherlock Holmes spilled down

✦ Tip

To return only specific columns, wrap the FILTER in QUERY or select specific columns: =FILTER({B2:B10, D2:D10, G2:G10}, B2:B10="Sherlock Holmes") returns only Salesperson, Product, and Commission.

Return specific columns with FILTER

If you only need the Product and Revenue columns for Sherlock Holmes:

Formula
=FILTER({D2:D10, F2:F10}, B2:B10="Sherlock Holmes")

The curly braces {} create an array of the specific columns you want. FILTER then returns only those columns for matching rows.

FILTER with a cell reference

Replace the hardcoded name with a cell reference:

Formula
=FILTER(A2:G10, B2:B10=I2)

Now changing cell I2 to any salesperson name returns all their records.

Method 2: INDEX MATCH with SMALL and IF

Before FILTER existed, the standard approach combined INDEX, MATCH, SMALL, IF, and ROW in an array formula. This method works but is harder to read and maintain.

Formula
=IFERROR(INDEX($D$2:$D$10, SMALL(IF($B$2:$B$10="Sherlock Holmes", ROW($B$2:$B$10)-ROW($B$2)+1), ROW()-ROW($J$1)), 1), "")

This formula goes in cell J2 and is copied down. Each row returns the next matching value using SMALL to iterate through the match positions.

ℹ Note

This formula must be entered with Ctrl+Shift+Enter in some spreadsheet applications, but Google Sheets handles array evaluation automatically. The formula still works if you press Enter normally.

How it works:

  1. IF($B$2:$B$10="Sherlock Holmes", ROW(...)) builds an array of row positions where the name matches
  2. SMALL(..., ROW()-ROW($J$1)) picks the 1st, 2nd, 3rd, etc. match position as the formula is copied down
  3. INDEX($D$2:$D$10, ...) returns the value at that position
  4. IFERROR(..., "") returns blank when there are no more matches

This approach is verbose but useful when you need compatibility with older spreadsheet versions.

Method 3: Helper Column with COUNTIF

A helper column approach uses COUNTIF to number each occurrence of a value, then VLOOKUP uses that number to identify which match to return.

Setup

In column H, add a running count formula:

Formula
=B2&"-"&COUNTIF($B$2:B2, B2)

This creates unique keys like “Sherlock Holmes-1”, “Sherlock Holmes-2”, “Sherlock Holmes-3” for each occurrence. Then use VLOOKUP to look up each numbered occurrence:

Formula
=VLOOKUP("Sherlock Holmes-2", H2:I10, 2, FALSE)

This returns the value from Sherlock Holmes’s second sale.

⚠ Important

The helper column method adds extra columns to your data and is harder to maintain. Use FILTER instead unless you have a specific reason to avoid it.

Which Method Should You Use?

MethodProsConsBest for
FILTERClean syntax, auto-spills, returns full rowsRequires enough empty cells below for resultsMost situations
INDEX MATCH arrayWorks without extra columns, compatible with older appsComplex formula, hard to debugWhen FILTER is not available
Helper columnConceptually straightforwardAdds extra columns, manual maintenanceLearning exercise, legacy spreadsheets

For Google Sheets, FILTER is the right choice in nearly every case.

Tips and Best Practices

  1. Use FILTER as the default for multiple-match lookups. It is cleaner, faster, and easier to modify than any VLOOKUP workaround.

  2. Leave enough empty rows below FILTER results. If FILTER returns 5 rows but the cell below already has data, you get a #REF! error. Place FILTER results in an area with room to expand.

  3. Combine FILTER with SORT. =SORT(FILTER(A2:G10, B2:B10="Sherlock Holmes"), 6, FALSE) returns all of Fred’s sales sorted by Revenue descending.

  4. Use COUNTA or ROWS to count matches. =ROWS(FILTER(B2:B10, B2:B10="Sherlock Holmes")) tells you how many rows match before returning all of them.

  5. Wrap FILTER in IFERROR for no-match scenarios. =IFERROR(FILTER(A2:G10, B2:B10="Nobody"), "No results") avoids the #N/A error when no rows match.

Frequently Asked Questions

Can VLOOKUP return multiple values in Google Sheets?

Not by itself. VLOOKUP always returns the first match. To return all matching rows, use the FILTER function, which is designed for this purpose and requires no workarounds.

Why does VLOOKUP only return the first match?

VLOOKUP scans the first column from top to bottom and stops at the first match. It is designed for one-to-one lookups. For one-to-many lookups, FILTER is the right tool.

How do I use FILTER instead of VLOOKUP to return multiple results?

Use =FILTER(A2:D10, A2:A10="search_value"). FILTER returns every row where the condition is true, not just the first match. It spills results into multiple cells automatically.

Can INDEX MATCH return multiple values?

Not directly. INDEX MATCH also returns a single value. You can build array formulas with SMALL and IF to return multiple results, but FILTER is cleaner for this use case in Google Sheets.

What is the best way to find all matching rows in Google Sheets?

Use the FILTER function. It is built specifically for returning multiple rows that match a condition, it spills automatically, and the syntax is cleaner than any VLOOKUP workaround.

Frequently Asked Questions

Next Steps

Continue learning with these related tutorials: