【问题标题】:Excel SUMPRODUCT and dynamic text conditionsExcel SUMPRODUCT 和动态文本条件
【发布时间】:2021-01-28 18:38:32
【问题描述】:

我正在尝试对具有某些动态条件的行进行汇总。我有这样的行:

A 只能是一个值,K 可以有多个 OR 值。最后要对M求和。

我尝试使用适用于 A 列但不适用于 K 列的 SUMPRODUCT()。我正在寻找的是这样的:

=SUMPRODUCT(--(!$A$2:$A$20000="AA")*--(!$K$2:$K$20000="AA" OR "BB")*$M$2:$M$20000)

我知道我可以先 ="AA" 然后 ="BB" 但我需要 "AA" 和 "BB" 是基于其他单元格的动态。并且参数的数量是不同的。我试过 {"AA";"BB"} 但我知道这不起作用,因为匹配需要在同一行中。

能实现吗?

非常感谢!

【问题讨论】:

    标签: excel sumproduct


    【解决方案1】:
    =SUMPRODUCT(($A$2:$A$20000="AA")*(($K$2:$K$20000="AA")+($K$2:$K$20000="BB"))*$M$2:$M$20000)
    

    请注意:

    • 由于您是对数组进行乘法/加法运算,因此无需包含双一元的
    • 我不知道为什么您的示例公式中有 !
    • 要返回TRUE;FALSEOR 数组,我们添加。

    你的 cmets 仍然没有清楚地解释你正在做什么动态。

    但要为K 列创建动态OR,包括测试A 列和求和列M,您可以执行以下操作:

    对于 K 列,我们假设您可能的 OR 分别输入在 F2:F10 范围内

    =SUMPRODUCT(MMULT(--($K$2:$K$20000=TRANSPOSE($F$2:$F$10)),--(ROW($F$2:$F$10)>0))*($A$2:$A$20000="AAA")*$M$2:$M$20000)
    

    矩阵乘法将产生19,999 条目的单列,如果不匹配,则匹配OR0 中的任何一个时为1。

    有关此应用程序中 MMULT 函数的信息,请参阅 How to do a row-wise sum in an array formula in Excel?

    在上面的公式中,OR范围内的“空白”(F2:F10)也会匹配K列的空白条目。所以可以想象,如果K和F有空白,col有AAA A 和 M 列中可能返回错误结果的值。

    为避免这种可能性,我们可以使用动态公式来调整 F 列的大小,我们将在其中输入 OR 值:

    =INDEX($F$2:$F$10,1):INDEX($F$2:$F$10,COUNTA($F$2:$F$10))
    

    将仅返回 col F 中非空白的值(假设列中没有空白)

    所以:

    =SUMPRODUCT(MMULT(--($K$2:$K$20000=TRANSPOSE(INDEX($F$2:$F$10,1):INDEX($F$2:$F$10,COUNTA($F$2:$F$10)))),--(ROW(INDEX($F$2:$F$10,1):INDEX($F$2:$F$10,COUNTA($F$2:$F$10)))>0))*($A$2:$A$20000="AAA")*$M$2:$M$20000)
    

    鉴于此数据:

    最后一个公式将返回值5M2,M3,M7 的总和)

    【讨论】:

    • 是的,但问题是“AA”和“BB”在范围或数组中是动态的,因此可能还有“CC”和“DD”......不应该在那里,它是工作表参考的一部分。
    • @KasperSommer 只需在存储变量时将这些常量替换为单元格引用。
    • 谢谢,@ron-rosenfeld,但是你将如何使这部分动态化:(($K$2:$K$20000="AA")+($K$2:$K$20000="BB ").........+($N$2:$N$20000="nn"))?
    • @KasperSommer 请更具体地说明您可能使用的参数和参数。除了你使用“动态”这个词(我不确定它在这种情况下是什么意思)之外,我看到的唯一明确的解释是"A can be only one value, K can have multiple OR-values. In the end M is to be summed."
    • 如果我不清楚,我很抱歉。关键是,我不知道 K 可以有多少 OR 值。这就是为什么将每个条件设置为 ="AA" 而下一个 ="BB" 不起作用的原因 - 因为在某些情况下还会有 ="CC" 并且可能是 ="DD"。这基于范围或数组。这也是我在原帖中声明I know I can do ="AA" and then ="BB" 的原因。仅仅硬编码这两个条件是不行的。
    【解决方案2】:

    将 SUMIFS 与 SUMPRODUCT 包装器一起使用:

    =SUMPRODUCT(SUMIFS($M$2:$M$20000,$A$2:$A$20000,"AA",$K$2:$K$20000,{"AA","BB"}))
    

    【讨论】:

    • 我认为这非常接近我的需要。但是,我在添加多个条件数组时遇到问题,例如: =SUMPRODUCT(SUMIFS($M$2:$M$20000,$A$2:$A$20000,"AA",$K$2:$K$20000,{"AA"," BB"}, $N$2:$N$20000,{"DD","EE"}, $O$2:$O$20000,{"MM","NN"})) - 它应该与每个条件和OR 在每个数组中。
    • 你需要像 Ron 那样做。 sumif 只允许水平两个数组和一个垂直数组。
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多