excel - 简化当前使用 INDEX、ROW、SUMPRODUCT 和 IFERROR 的 Excel 公式

标签 excel spreadsheet vlookup

有没有人有任何绝妙的想法来简化这个困难的公式?看到后不要 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/

相关文章:

excel - 结合使用 COUNTIF 和 VLOOKUP EXCEL

excel - 从 Excel 或 Google 电子表格列中提取关键字

excel - Reporting Services 格式为数字

javascript - 将工作表复制到另一个电子表格 [Google Apps 脚本]

excel - 如何在Excel "vlookup"中搜索多列并从同一行中的另一列返回值?

excel - 以 Column 为变量的 Vlookup

excel - Excel VBA 中的 While 循环问题

excel - 输入框运行时滚动

java - 在 Vaadin 中显示电子表格组件

javascript - 服务错误 : Spreadsheets using isblank()