我有三列数据 - 一个总和列(A
)以及构成总和的两列(B
和C
)。有时,只填写B
和列中的一列;偶尔和列都为空白。C
B
C
我想要对列进行求和A
(即总计),仅有的B
当列和/或中有数据时C
。因此,我希望以下内容能够奏效:
=SUMPRODUCT(--((B2:B10<>"")+(C2:C20<>"")),A2:A10)
但问题是,如果 B 列和 C 列中都有数据,则形成的数组(B2:B10<>"")+(C2:C10<>"")
总和将为 2,并且前面的操作--
不会将其转换为 a TRUE
(例如{1,1,0,1,0,1,1,1,0} + {1,0,1,1,0,1,1,0,1} = {2,1,1,2,0,2,2,1,1}
),然后将最终数组与列中的值相乘A
,从而将值 1、4、6 和 7 加倍。
这看起来有点奇怪!我该如何让它正常运行?!
答案1
你可以做这样的事情:
=SUMPRODUCT($A$2:$A$11*($B$2:$B$11&$C$2:$C$11<>""))
这个想法是,只有当和都是空白时,B
和的连接才是空白。C
答案2
啊哈-我需要这个SIGN
功能:
=SUMPRODUCT(A2:A10,SIGN((B2:B10<>"")+(C2:C10<>"")))
我仍然觉得很奇怪,就 SUMPRODUCT 而言,TRUE + TRUE = 2。并且 2 在--
发挥作用时不仅仅被计算为 TRUE。
答案3
我认为您可能要考虑=SUMIFS()
功能。
您的条件可以重写为:
- 条件 1:B 列已填写,C 列为空白;或
- 条件 2:B 列为空白,C 列已填写;或
- 情况3:B列和C列均已填写。
由于这 3 个条件是互相排斥的,因此复杂度SUMPRODUCT
本质上是=SUMIF(Condition 1)+SUMIF(Condition 2)+SUMIF(Condition 3)
。重写为SUMIFS
:
=SUMIFS(A2:A10,B2:B10,"<>",C2:C10,"")+SUMIFS(A2:A10,B2:B10,"",C2:C10,"<>")+SUMIFS(A2:A10,B2:B10,"<>",C2:C10,"<>")
从性能角度来看,SUMPRODUCT
如果有大量行需要汇总,则此解决方案可能比使用更好。