Excel公式求助:匹配指定范围值并返回对应列关联值
Excel多列匹配返回对应行值的公式修复
示例数据
| A | B | C | D | E |
|---|---|---|---|---|
| 1 | 0 | 11 | 12 | A |
| 2 | 9 | 13 | 14 | B |
| 3 | 8 | 15 | 16 | C |
| 4 | 7 | 17 | 20 | D |
| 5 | 6 | 18 | 19 | E |
需求:输入任意属于某行A-D列的值时,返回该行E列的对应值(比如输入14/13/9/2返回B,输入1/0/11/12返回A等)。
原公式问题
尝试的公式:
=IFERROR(INDEX($E$1:$E$5,MATCH(G1,IF(($B$1:$D$5=G1)+($A$1:$A$5=G1), $B$1:$D$5),0)),"Not Found")
输入12时返回“Not Found”,原因是公式逻辑错误:IF函数返回的是匹配到的单元格值(如12)和其他位置的FALSE,但MATCH在这个混合数组中查找时,无法正确定位到对应的行号——因为数组是多列结构,MATCH返回的是数组中的相对位置而非行号,导致匹配失败。
正确公式方案
方案1:INDEX+MATCH+MMULT(支持所有Excel版本)
=IFERROR(INDEX($E$1:$E$5,MATCH(TRUE,MMULT(--($A$1:$D$5=G1),ROW($1:$4)^0)>0,0)),"Not Found")
- 原理:
MMULT(--($A$1:$D$5=G1),ROW($1:$4)^0)对每行的A-D列进行匹配判断,将每行的匹配结果求和(只要该行有一个值匹配,结果就大于0); MATCH(TRUE, ...>0,0)找到第一个匹配的行号;INDEX根据行号返回E列对应值;- 旧版Excel需按 Ctrl+Shift+Enter 作为数组公式执行,新版Excel自动识别。
方案2:XLOOKUP(Excel 365/2021及以上版本)
=XLOOKUP(TRUE,MMULT(--($A$1:$D$5=G1),{1;1;1;1})>0,$E$1:$E$5,"Not Found")
- 逻辑和方案1一致,
XLOOKUP直接查找第一个满足条件的行并返回对应E列值,无需额外的INDEX+MATCH组合,更简洁。
方案3:INDEX+MATCH+COUNTIF
=IFERROR(INDEX($E$1:$E$5,MATCH(TRUE,COUNTIF(OFFSET($A$1:$D$1,ROW($A$1:$D$5)-MIN(ROW($A$1:$D$5)),0,1,4),G1)>0,0)),"Not Found")
- 原理:
OFFSET逐行提取A-D列的单行区域,COUNTIF判断该行是否包含目标值,MATCH定位行号后返回对应E列值; - 旧版Excel需按 Ctrl+Shift+Enter 执行。
内容的提问来源于stack exchange,提问作者Qhairunnisa Syed
相关产品推荐
相关产品推荐

