如何调整Vlookup公式跳过#N/A值,返回首个非错误匹配结果?
解决VLOOKUP遇#N/A时返回首个非错误结果的方案
方法1:INDEX + MATCH 组合公式
使用该组合可精准定位首个匹配Sheet1!A列值且Sheet2!B列非#N/A的记录,公式输入到Sheet1!B2单元格:
=INDEX(Sheet2!$B$2:$B$100,MATCH(TRUE,INDEX((Sheet2!$A$2:$A$100=Sheet1!A2)*(NOT(ISNA(Sheet2!$B$2:$B$100))),0),0))
公式逻辑拆解:
(Sheet2!$A$2:$A$100=Sheet1!A2):生成布尔数组,标记Sheet2中A列与当前行A值匹配的行NOT(ISNA(Sheet2!$B$2:$B$100)):生成布尔数组,标记Sheet2中B列非#N/A的行- 两个数组相乘:得到同时满足"值匹配"和"非错误"的行(TRUE转1,FALSE转0)
- 外层
INDEX将结果转为一维数组,MATCH找到第一个TRUE的位置,最终INDEX返回对应B列内容
方法2:SUMPRODUCT 组合公式
通过SUMPRODUCT定位首个符合条件的行偏移量,搭配INDEX返回结果,公式输入到Sheet1!B2单元格:
=INDEX(Sheet2!$B$2:$B$100,SUMPRODUCT(MIN(IF((Sheet2!$A$2:$A$100=Sheet1!A2)*(NOT(ISNA(Sheet2!$B$2:$B$100))),ROW(Sheet2!$A$2:$A$100)-ROW(Sheet2!$A$2)+1))))
公式逻辑拆解:
- 同样用
(Sheet2!$A$2:$A$100=Sheet1!A2)*(NOT(ISNA(Sheet2!$B$2:$B$100)))筛选双条件行 ROW(Sheet2!$A$2:$A$100)-ROW(Sheet2!$A$2)+1:计算行号相对于Sheet2!A2的偏移量MIN取最小偏移量(即首个符合条件的行),SUMPRODUCT将数组结果转为单个数值,最终INDEX返回对应B列内容
注意事项
- 旧版Excel(2019及之前)输入公式后需按
Ctrl+Shift+Enter作为数组公式执行;新版Excel支持动态数组,直接回车即可。 - 下拉填充公式时,Sheet2的区域引用需保持绝对引用(带$符号),避免引用范围偏移。
内容的提问来源于stack exchange,提问作者vjr2109
相关产品推荐
相关产品推荐

