目前使用INDEX,ROW,SUMPRODUCT和IFERROR来简化Excel公式

有没有人有任何精彩的想法来简化这个困难的公式? 当你看到它时不要惊慌,我会尽力解释。

= IFERROR(INDEX(rangeOfDesiredValues,(1 / SUMPRODUCT((rangeOfSerials = $ D20) (rangeOfApps = cfgAppID) (rangeOfAccessIDs = cfgAccessID)* ROW(rangeOfDesiredValues))^ – 1)),“”)

目前我正在使用SUMPRODUCT做一个VLOOKUP的多个列作为标准的等价物。 通常这只适用于数字结果,但是因为我需要查找文本,所以我将SUMPRODUCT与ROW和INDEX结合使用。

不幸的是,当没有find单元格时,我的SUMPRODUCT返回0.这将导致公式返回不正确的单元格而不是空白。 出于这个原因,我通过这个计算运行结果:

(1 / result)^-1 

这样0的结果成为错误,其他结果保持不变。 我把这个喂给IFERROR,这样错误就变成了空白。

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

当你想要find一个单独的值时,最好避免使用SUMPRODUCT这样的多条件求和function(如果有多于一行匹配所有三个条件,那么显然会给你一个错误的结果或错误,我假设你期望一个匹配至多在这里?)。 如果您在工作表中插入任何行, ROW函数也可能会有问题…..

有几种方法可以工作。 对于一个单一的公式,使用MATCH是最常见的 – MATCH将只给出正确的位置或错误,所以没有零值的问题。 这看起来像这样:

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

这是一个“数组公式”,需要用CTRL+SHIFT+ENTER ……input,或者你可以用一个额外的INDEX函数把它变成一个常规公式

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

第三个select是使用不需要“数组input”的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)),"")