1

有没有人有任何绝妙的想法来简化这个困难的公式?看到后不要惊慌,我会尽力解释的。

=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 中,这样错误就会变成空白。

有谁知道如何使这个更整洁?我无法在我的任何电子表格中创建新列。

4

1 回答 1

4

最好避免使用多条件求和函数,例如SUMPRODUCT当你想找到一个值时(如果有不止一行匹配所有三个条件,它显然会给你一个不正确的结果或错误,我假设你期望一个匹配大多数在这里?)。ROW如果您在工作表中插入任何行,函数也可能会出现问题.....

有几种方法可以奏效。对于单个公式,使用MATCH是最常见的 -MATCH只会给出正确的位置或错误,因此零值没有问题。看起来像这样:

=IFERROR(INDEX(rangeOfDesiredValues,MATCH(1,(rangeOfSerials=$D20)*(rangeOfApps=cfgAppID)*(rangeOfAccessIDs=cfgAccessID),0)),"")

那是一个“数组公式”,需要用CTRL+SHIFT+ENTER......输入,或者您可以使用像这样的额外 INDEX 函数将其变成常规公式

=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)),"")

于 2013-02-19T10:18:53.830 回答