有没有人有任何绝妙的想法来简化这个困难的公式?看到后不要 panic ,我会尽力解释的。
=IFERROR(INDEX(rangeOfDesiredValues,(1/SUMPRODUCT((rangeOfSerials=$D20)(rangeOfApps=cfgAppID)(rangeOfAccessIDs=cfgAccessID)*ROW(rangeOfDesiredValues))^-1)),"")
目前我正在使用 SUMPRODUCT 来做相当于以多列作为标准的 VLOOKUP。通常这只适用于数字结果,但由于我需要查找文本,我将 SUMPRODUCT 与 ROW 和 INDEX 结合使用。
不幸的是,当没有找到单元格时,我的 SUMPRODUCT 返回 0。这会导致公式返回不正确的单元格而不是空白。出于这个原因,我通过这个计算运行结果:
(1 / result)^-1
这样0的结果就变成了错误,其他的结果保持不变。我把它输入到 IFERROR 中,这样错误就会变成空白。
有谁知道如何使这个更整洁?我无法在我的任何电子表格中创建新列。
最佳答案
最好避免使用多条件求和函数,如 SUMPRODUCT
当你想找到一个值时(如果有不止一行匹配所有三个条件,它显然会给你一个不正确的结果或错误,我假设你在这里最多期望一个匹配?)。 ROW
如果您在工作表中插入任何行,函数也可能会出现问题.....
有几种方法可以奏效。对于单个公式,使用 MATCH
是最常见的 - MATCH
只会给出正确的位置或错误,因此零值没有问题。看起来像这样:=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,(rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0)),"")
这是一个“数组公式”,需要输入 CTRL+SHIFT+ENTER
......或者你可以把它变成一个带有额外索引函数的常规公式,像这样=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,INDEX((rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0),0)),"")
第三种选择是使用不需要“数组条目”的 LOOKUP=IFERROR(LOOKUP(2,1/(rangeOfSerials=$D20)/(rangeOfApps=cfgAppID)/(rangeOfAccessIDs=cfgAccessID),rangeOfDesiredValues),"")
在多个匹配的情况下,这与以前的版本略有不同 - 它会给你 最后 匹配而不是该场景中的第一个(但我假设您最多只有一个匹配,如上所述)。
最后,如果您不介意使用辅助列,则可以大大简化公式。只需使用“帮助”列连接由破折号分隔的三个条件列,然后您可以使用简单的 VLOOKUP 或 INDEX/MATCH,例如=IFERROR(INDEX(rangeOfDesiredValues,MATCH($D20&"-"&cfgAppID&"-"&cfgAccessID,Helper_Column,0)),"")
关于excel - 简化当前使用 INDEX、ROW、SUMPRODUCT 和 IFERROR 的 Excel 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948140/