Excel 2016 中的 SEARCH 函数有问题。我用它在数组(“Description” F1:F17)中查找“JASN”并返回相应的结果(“Result” E1:E17)。这样就行了。
但是,如果“JASN”不存在,则计算结果为零。因此,我想使用公式的搜索部分来捕获此错误。问题是,错误捕获的搜索不会将范围视为数组 - 是的,此公式是作为数组输入的,否则第二个搜索函数将不起作用。
样本数据https://drive.google.com/open?id=1hybzTVQ9tdNPdyItDUf-hC5cZIMUrwJQ
使用搜索功能的工作公式
{=SUMPRODUCT(MAX(ROW($F$1:$F$17)*(ISNUMBER(SEARCH("jasn",$F$1:$F$17)))))}
无法捕捉错误/零结果的公式
{=IF(SEARCH("jasn",$F$1:$F$17)=0,"this sux",INDEX($E$1:$E$17,SUMPRODUCT(MAX(ROW($F$1:$F$17)*(ISNUMBER(SEARCH("jasn",$F$1:$F$17)))))))}
为什么这个公式没有返回与第一个公式中的 SEARCH 相同的结果?
{=搜索(“jasn”,$F$1:$F$17)}
使用 EVALUATE 功能并逐步执行第一个公式,SEARCH 返回多个#value!
和一个“1”——这是正确的。在简化版本中,SEARCH 返回 F1 中的“Description”,没有其他内容。它不会评估 F1:F17 中的整个数组。
为什么在同一范围内使用同一函数(搜索)会得到不同的结果?
答案1
是的,SEARCH 将返回一个数组,但是您需要对该数组执行某些操作,否则它只会返回第一个结果:
=SUMPRODUCT(--(ISNUMBER(SEARCH("jasn",$F$1:$F$17))))=0
jasn
如果在数组中的任何地方都找不到,则返回 TRUE 。
所以:
=IF(SUMPRODUCT(--(ISNUMBER(SEARCH("jasn",$F$1:$F$17))))=0,"Not Found",INDEX($E$1:$E$17,SUMPRODUCT(MAX(ROW($F$1:$F$17)*(ISNUMBER(SEARCH("jasn",$F$1:$F$17)))))))
但是我们可以使用AGGREGATE来避免重复:
=IFERROR(INDEX($E:$E$,AGGREGATE(14,7,ROW($E$1:$E$17)/(ISNUMBER(SEARCH("jasn",$F$1:$F$17))),1)),"Not Found")
并且可以正常输入