Excel中INDEX+MATCH多条件匹配返回多个唯一结果的实现方案
解决Excel中匹配多条件返回唯一结果的问题
针对你需要匹配姓名(A列)和姓氏(B列),从Table1提取所有唯一的Food allergy code并横向展示的需求,分两种Excel版本给出解决方案:
一、Excel 365/2021(支持动态数组)
自动溢出版本(无需手动拖动)
在C3单元格输入以下公式,结果会自动横向填充所有唯一匹配值:
=TRANSPOSE(UNIQUE(FILTER(Table1!C:C,(Table1!A:A=A2)*(Table1!B:B=B2))))
- FILTER:筛选出Table1中与当前行姓名、姓氏均匹配的所有过敏码
- UNIQUE:去除筛选结果中的重复值
- TRANSPOSE:将纵向结果转为横向排列
手动拖动版本
如果需要手动拖动公式(比如从C3拖到D4),可以用以下公式,拖动后会依次提取第1、第2...个唯一匹配值,无结果时显示空:
=IFERROR(INDEX(UNIQUE(FILTER(Table1!C:C,(Table1!A:A=A2)*(Table1!B:B=B2))),COLUMN(A1)),"")
拖动时,COLUMN(A1)会自动变为COLUMN(B1),对应提取唯一结果的第2个值。
二、旧版Excel(不支持动态数组,需按Ctrl+Shift+Enter输入数组公式)
在C3单元格输入以下数组公式,按Ctrl+Shift+Enter确认后横向拖动:
=IFERROR(INDEX(Table1!C:C,SMALL(IF((Table1!A:A=$A$2)*(Table1!B:B=$B$2)*(COUNTIF($C$2:C2,Table1!C:C)=0),ROW(Table1!C:C)),1)),"")
- (Table1!A:A=$A$2)*(Table1!B:B=$B$2):匹配姓名和姓氏条件
- COUNTIF($C$2:C2,Table1!C:C)=0:排除已经在当前单元格左侧/上方提取过的重复值
- SMALL+ROW:按顺序提取符合条件的行号
- INDEX:根据行号返回对应过敏码
优化建议
针对大型数据集,建议用结构化引用(比如Table1[名字]、Table1[姓氏]、Table1[Food allergy code])代替整列引用(Table1!A:A),减少计算量提升效率。
内容的提问来源于stack exchange,提问作者OG_1996
相关产品推荐
相关产品推荐

