首页 文章

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

提问于
浏览
1

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

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

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

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

(1 / result)^-1

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

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

1 回答

  • 4

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

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

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

    这是一个"array formula",需要输入 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),"")

    这与多个匹配的情况下的先前版本略有不同 - 它将为您提供 last 匹配而不是该场景中的第一个匹配(但我假设您最多只有一个匹配,如上所述) .

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

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

相关问题