通过公式

时间:2020-03-18 03:21:08

标签: arrays excel sumifs

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

例如,在下表中,我希望在A2:C8(P),B12(“ NM”)范围内存在A12(“ IJ”)的行的V列中的值之和D2:F8(S)和C12(“ XX”)存在于范围G2:I8(A)

enter image description here

我正在尝试找到一种解决方案,该解决方案涉及基于数组的公式(无VBA)。 例如,在以下给出的公式中, SUMPRODUCT((B2:B8'=A12)*J2:J8)将给出如下基于数组的计算

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)  

背景是什么(例如第三行)

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

有人可以帮助我了解我要去哪里或我想念什么吗?

如果还有其他方法,则总是欢迎提出建议。

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

1 个答案:

答案 0 :(得分:2)

尝试一下...

=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高7行,宽1列。

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

到那时,SUMPRODUCT可以正常进行,因为条件数组与求和数组J2:J8的尺寸匹配。