含MATCH函数的数组公式在源表仅一行时无结果的解决方法
解决单行表下MATCH数组公式返回#N/A的问题
我来帮你彻底搞定这个头疼的问题!先说说为啥会出现这种情况:当你的表tblRCGRouteMasterCoProduct只有一行时,原公式里的三个条件相乘得到的是单个数值(不是数组),而MATCH函数在精确匹配模式下,对单个值的处理逻辑和数组不一样,导致明明条件满足却返回#N/A。
下面给你几个靠谱的彻底解决办法,按需选就行:
方法1:强制将布尔结果转为数组(兼容所有Excel版本)
在每个条件前加上--(两个减号),把布尔值(TRUE/FALSE)强制转换成1/0,同时让Excel把结构化引用当作数组处理——哪怕只有一行也能正常识别:
=MATCH(1;--(tblRCGRouteMasterCoProduct[RoutingCropGroupCode]="BEA") * --(tblRCGRouteMasterCoProduct[RouteName]= "Sample Cleaning (2)") * --(tblRCGRouteMasterCoProduct[LineNumber]= 10);0)
你也可以用N()函数替代--,效果完全一样:
=MATCH(1;N(tblRCGRouteMasterCoProduct[RoutingCropGroupCode]="BEA") * N(tblRCGRouteMasterCoProduct[RouteName]= "Sample Cleaning (2)") * N(tblRCGRouteMasterCoProduct[LineNumber]= 10);0)
方法2:改用XLOOKUP(适用于Excel 365/2021及以后版本)
如果你的Excel支持动态数组,XLOOKUP对单行/单列数组的处理要友好得多,直接就能返回正确的行号,和原MATCH的结果完全一致:
=XLOOKUP(1;(tblRCGRouteMasterCoProduct[RoutingCropGroupCode]="BEA")*(tblRCGRouteMasterCoProduct[RouteName]= "Sample Cleaning (2)")*(tblRCGRouteMasterCoProduct[LineNumber]= 10);ROW(tblRCGRouteMasterCoProduct)-ROW(tblRCGRouteMasterCoProduct[#Headers])+1)
这里用ROW(tblRCGRouteMasterCoProduct)-ROW(tblRCGRouteMasterCoProduct[#Headers])+1来计算表内的相对行号,和MATCH返回的结果完全匹配。
方法3:用IFERROR兜底(快速容错)
如果你只是想快速解决、不想大改公式,可以用IFERROR包裹原公式——当单行表触发#N/A时直接返回1(前提是你确定这一行一定满足条件):
=IFERROR(MATCH(1;(tblRCGRouteMasterCoProduct[RoutingCropGroupCode]="BEA") * (tblRCGRouteMasterCoProduct[RouteName]= "Sample Cleaning (2)") * (tblRCGRouteMasterCoProduct[LineNumber]= 10);0);1)
不过这个方法不如前两种彻底,只适合你确定单行必然符合条件的场景。
内容的提问来源于stack exchange,提问作者J. Vos
相关产品推荐
相关产品推荐

