【发布时间】:2020-06-29 03:56:28
【问题描述】:
所以我试图在 excel 中找到一些 sumifs 的替代方法,其中每个条件都需要在 2D 范围而不是 1D 范围中检查。
例如,在下表中,我想要 A12 ("IJ") 存在于范围 A2:C8 (P)、B12 ("NM") 存在于范围内的行的 V 列中的值的总和D2:F8 (S) 和 C12 ("XX") 出现在 G2:I8 (A) 范围内
我正在尝试找到一个涉及基于数组的公式(没有 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 列中的值,行数也非常大。
【问题讨论】:
-
BIG DATA 的数组公式要求解决性能问题。这不是您的公式中断的原因,而只是提醒一下。 VBA 将是一个更好的途径。
-
在您的示例图片中,您真正想要的总数是 117 而不是 88,对吧?
-
@Excel Hero,是的,我知道但对使用 VBA 有限制,其次,在图片中没有检查三个条件,即 A (G:I) 的偶数范围也被检查用于计算。
-
这三个条件的V之和为117:P=IJ, S=NM, A=XX
-
@Excel Hero .. 是的,你是对的 .. 对不起,我的错.. 目前无法编辑它.. 但会进行更正