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

时间:2013-02-19 01:04:46

标签: excel spreadsheet vlookup

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

  

= IFERROR(INDEX(rangeOfDesiredValues,(1 / SUMPRODUCT((rangeOfSerials = $ D 2 O)(rangeOfApps = cfgAppID)(rangeOfAccessIDs = cfgAccessID)* ROW(rangeOfDesiredValues))^ - 1)), “”)

目前我正在使用SUMPRODUCT来做相当于多列作为标准的VLOOKUP。通常只适用于数字结果,但由于我需要查找文本,因此我将SUMPRODUCT与ROW和INDEX结合使用。

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

(1 / result)^-1

这样,0的结果成为错误,其他结果保持不变。我将它提供给IFERROR,以便错误成为空白。

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

1 个答案:

答案 0 :(得分: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),"")

在多次匹配的情况下,它与以前的版本略有不同 - 它会为您提供最后匹配,而不是该场景中的第一个匹配(但我假设您最多只有一个匹配,如上所述)。

最后,如果您不介意使用辅助列,则可以大大简化公式。只需使用“helper”列来连接用短划线分隔的三个标准列,然后就可以使用简单的VLOOKUP或INDEX / MATCH,例如。

=IFERROR(INDEX(rangeOfDesiredValues,MATCH($D20&"-"&cfgAppID&"-"&cfgAccessID,Helper_Column,0)),"")