Excel - 将 SUMPRODUCT 公式概括为数组公式

Excel - Generalizing a SUMPRODUCT formula as an array formula

亲爱的 Whosebug 会员,

感谢一些 MrExcel 成员 (link) 的大力帮助,我创建了以下 SUMPRODUCT 公式。该公式的目标是 select 基于四个条件的大型查找 table 结果:CATEGORY(分类)、VALUE1(数字)、VALUE2(数字)、VALUE3(数字)。

输入数据

查找 table 如下所示: LOOKUPTABLE

希望的结果

我正在尝试制作的 table 如下所示: WISHED RESULT

当前解

作为结果的公式,我使用以下公式(例如,对于左上角的结果单元格):

B8 = SUMPRODUCT(MAX(
(LOOKUPTABLE[CATEGORY]=$A8)
*(LOOKUPTABLE[VALUEFROM1]<=IF(B="";LOOKUPTABLE[VALUEFROM1];B))
*(LOOKUPTABLE[VALUETO1]>=IF(B="";LOOKUPTABLE[VALUETO1];B))
*(LOOKUPTABLE[VALUEFROM2]<=IF(B="";LOOKUPTABLE[VALUEFROM2];B))
*(LOOKUPTABLE[VALUETO2]>=IF(B="";LOOKUPTABLE[VALUETO2];B))
*(LOOKUPTABLE[VALUEFROM3]<=IF(B="";LOOKUPTABLE[VALUEFROM3];B))
*(LOOKUPTABLE[VALUETO3]>=IF(B="";LOOKUPTABLE[VALUETO3];B))
*(LOOKUPTABLE[RESULT])))

(此公式还考虑了 VALUE1 或 VALUE2 或 VALUE3 可能为空的特殊情况)

结果如下: FINAL RESULT

大table有更好的解决方案吗?例如。数组公式?

这很好用,但是一旦我向结果 table 添加更多行(通过添加类别 D-P),我向 table 添加更多列(大约 40),然后我添加更多行到查找 table(直到 30,000),这些公式变得更慢。因此,我想为整个结果 table 编写一个数组公式。如果这不可能,那么如果我可以为每个类别提供一个数组公式,我会很高兴。

我尝试了什么(我是如何失败的)

我尝试使用下面的数组公式,但它并没有像我希望的那样工作,因为它 returns N/A:

{=SUMPRODUCT(MAX(
(Table35[CATEGORY]=$A8:$A10)
*(Table35[VALUEFROM1]<=IF(B:F="";Table35[VALUEFROM1];B:F))
*(Table35[VALUETO1]>=IF(B:F="";Table35[VALUETO1];B:F))
*(Table35[VALUEFROM2]<=IF(B:F="";Table35[VALUEFROM2];B:F))
*(Table35[VALUETO2]>=IF(B:F="";Table35[VALUETO2];B:F))
*(Table35[VALUEFROM3]<=IF(B:F="";Table35[VALUEFROM3];B:F))
*(Table35[VALUETO3]>=IF(B:F="";Table35[VALUETO3];B:F))
*(Table35[RESULT])))}

此外,我为每个类别尝试了以下数组公式,但它不起作用,因为它对类别的整行给出了相同的结果:

{=SUMPRODUCT(MAX(
(LOOKUPTABLE[CATEGORY]=$A8)
*(LOOKUPTABLE[VALUEFROM1]<=IF(B:F="";LOOKUPTABLE[VALUEFROM1];B:F))
*(LOOKUPTABLE[VALUETO1]>=IF(B:F="";LOOKUPTABLE[VALUETO1];B:F))
*(LOOKUPTABLE[VALUEFROM2]<=IF(B:F="";LOOKUPTABLE[VALUEFROM2];B:F))
*(LOOKUPTABLE[VALUETO2]>=IF(B:F="";LOOKUPTABLE[VALUETO2];B:F))
*(LOOKUPTABLE[VALUEFROM3]<=IF(B:F="";LOOKUPTABLE[VALUEFROM3];B:F))
*(LOOKUPTABLE[VALUETO3]>=IF(B:F="";LOOKUPTABLE[VALUETO3];B:F))
*(LOOKUPTABLE[RESULT])))}

你有什么建议吗?

你有什么想法,我该如何解决这个问题?

非常感谢您提出任何建议!

在这种情况下不需要使用 SUMPRODUCTMAX,因为您只是从 table 中查找。我建议仅使用 INDEX/MATCH 方法而不使用 SUMPRODUCT.

请参阅下面的示例,我没有将其作为基准 table 但我仍然使用了您的数据并注意到我得到了与您相同的结果。

请注意,这仍然是一个数组公式。不确定这是否会解决您的效率问题。可能是这样,但底线是您仍然有很多条件需要检查。选择哪一行匹配的唯一方法是比较每列的条件以查看是否出现匹配。