VLOOKUP无法返回多个匹配值,可用四种方法解决:一、FILTER函数(Excel 365/2021+);二、INDEX+AGGREGATE组合(全版本兼容);三、TEXTJOIN+IF数组公式(合并显示);四、辅助列+COUNTIF(传统稳定方案)。

如果您在Excel中使用VLOOKUP函数查找某个值,但该值在数据源中出现多次,而VLOOKUP仅返回第一个匹配结果,则无法直接获取全部匹配项。以下是实现一次性返回所有匹配值的多种方法:
本文运行环境:MacBook Air M2,macOS Sequoia。
一、使用FILTER函数(Excel 365 / Excel 2021及以上)
FILTER函数专为动态数组设计,可自动筛选并返回满足条件的所有行,无需辅助列或复杂嵌套,是当前最简洁高效的多结果匹配方案。
1、确保您的数据区域已定义为结构化表格(如A2:D100),或明确指定查找列与返回列范围。
2、在目标单元格输入公式:=FILTER(返回数组, 查找列=查找值),例如:=FILTER(B2:B100,A2:A100=F2) 表示在A列中查找F2值,并返回对应B列所有匹配项。
3、若需返回多列结果(如同时返回姓名和部门),将返回数组设为多列区域,例如:=FILTER(A2:C100,A2:A100=F2)。
二、使用INDEX + AGGREGATE组合(全版本兼容)
该方法不依赖动态数组功能,适用于Excel 2010及更高版本,通过AGGREGATE函数忽略错误并逐个定位匹配行号,再由INDEX提取对应值。
1、在首个结果单元格(如G2)输入公式:=IFERROR(INDEX($B$2:$B$100,AGGREGATE(15,6,ROW($A$2:$A$100)/($A$2:$A$100=$F$2),ROW(A1))),"")。
2、按Enter确认后,向下拖拽填充柄以生成后续结果;公式中ROW(A1)随行号递增,自动索引第1、第2、第3…个匹配项。
3、若需返回其他列(如C列),仅需将INDEX中的$B:$B0替换为$C:$C0,其余部分保持不变。
三、借助TEXTJOIN + IF数组公式(Excel 2016+,单单元格合并显示)
当只需在一个单元格内汇总所有匹配结果(用逗号分隔),而非逐行列出时,该方案可避免拖拽操作,适合报表摘要场景。
1、选中目标单元格(如G2),输入公式:=TEXTJOIN(", ",TRUE,IF($A$2:$A$100=$F$2,$B$2:$B$100,""))。
2、按下 Ctrl + Shift + Enter(Windows)或 Command + Shift + Enter(macOS)以确认为数组公式;Excel 365用户可直接按Enter。
3、公式将扫描A2:A100中所有等于F2的行,并把对应B列值用顿号连接成单一字符串输出。
四、添加辅助列配合COUNTIF构建序号(传统稳定方案)
通过在原始数据旁插入辅助列,为每个重复值生成唯一序号(如“张三-1”“张三-2”),再结合VLOOKUP进行分次精确查找,逻辑清晰且易于调试。
1、在数据源右侧空白列(如E列)首行(E2)输入公式:=A2&"-"&COUNTIF($A$2:A2,A2),向下填充至数据末尾。
2、在查找区设置序号列(如H2起输入1,2,3…),并在I2输入公式:=VLOOKUP($F$2&"-"&H2,$E$2:$B$100,2,FALSE),其中$E$2:$B$100需调整为包含辅助列与目标返回列的实际区域(注意列顺序)。
3、向下拖拽I2公式,即可按序号逐个提取各匹配项;若某序号无对应结果,将返回#N/A,可用IFERROR包裹处理。










