excel 中基于数组的求和公式

array based sumif in excel by formula

所以我试图在 excel 中找到一些替代 sumifs 的方法,其中每个条件都需要在 2D 范围而不是 1D 范围内检查。

例如,在下面的 table 中,我想要 A12 ("IJ") 出现在范围 A2:C8 (P)、B12 中的行的 V 列值的总和("NM") 出现在 D2:F8 (S) 范围内,C12 ("XX") 出现在 G2:I8 (A)

范围内

我正在尝试找到涉及 array-based 公式(没有 VBA)的解决方案。 例如在 below-given 公式中, SUMPRODUCT((B2:B8'=A12)*J2:J8) 会给出一个 array-based 计算如下

SUMPRODUCT({TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE}*{22;79;45;67;43;72;52}) 
= SUMPRODUCT({22;0;45;0;0;72;0})
=139

当只有一个条件需要检查时很容易但是像sumifs一样,我打算检查多个条件,但是一旦我添加其他条件,数组就会变成多维并给出错误的答案。

示例:

SUMPRODUCT((A2:C8=A12)*(D2:F8=B12)*J2:J8) 分解为

=SUMPRODUCT(
{FALSE,TRUE,FALSE;FALSE,FALSE,FALSE;FALSE,TRUE,FALSE;FALSE,FALSE,FALSE;FALSE,FALSE,FALSE;FALSE,TRUE,FALSE;FALSE,FALSE,FALSE}*
{TRUE,FALSE,FALSE;FALSE,FALSE,FALSE;TRUE,FALSE,FALSE;FALSE,FALSE,FALSE;FALSE,FALSE,FALSE;TRUE,FALSE,FALSE;FALSE,FALSE,FALSE}
*J2:J8)  

在后台发生的事情是(第 3 行的示例)

SUMPRODUCT( ({FALSE, TRUE ,FALSE} * {TRUE,FALSE,FALSE}) * 45 )

= SUMPRODUCT({FALSE,FALSE,FALSE} *45 )

=0


SUMPRODUCT(({FALSE,TRUE ,FALSE} + {TRUE,FALSE,FALSE}) * 45 )

= SUMPRODUCT({TRUE,TRUE,FALSE} *45 )

= 90

#expected answer =45

有人可以帮助我了解哪里出了问题或遗漏了什么吗?

如果有任何其他方式,欢迎提出建议。

请注意这是一个虚拟数据,实际数据非常大,每个header (P,S,A)分别有10列值,行数也很大。

试试这个...

=SUMPRODUCT( ((A2:A8=A12)+(B2:B8=A12)+(C2:C8=A12)) * ((D2:D8=B12)+(E2:E8=B12)+(F2:F8=B12)) * ((G2:G8=C12)+(H2:H8=C12)+(I2:I8=C12)) * J2:J8 )

要使 SUMPRODUCT 起作用,布尔数组的形状需要与您希望有条件求和的数组的形状相匹配。

J2:J8 是七行高乘一列宽。

上面的公式根据您的三个标准范围创建了一个由 1 和 0 组成的数组,并将其调整为七行高,一列宽。

此时,SUMPRODUCT 可以执行正常操作,因为条件数组与求和数组的维数相匹配 J2:J8