方法总比困难多:10种方法解多列条件求和问题!
下图左表是数据源,记录的是各手机品牌在周一、周二、周三的销售数据。求各品牌在这三天的销售总和,结果如右表所示。
对于这个问题,小伙伴们会怎么解决呢?条件区域只有1列,求和的数据却有3列。嗯~嗯?让我想想,有了!可以分别计算周一、周二、周三的销售总和,最后再把它们加起来。
=SUMIF(B:B,G3,C:C)+SUMIF(B:B,G3,D:D)+SUMIF(B:B,G3,E:E)
相信很多小伙伴都会想到这种方法,假如求和的数据列有很多呢?要一列一列的计算吗?是否太麻烦了?下面就来说说其他的方法。
第1种,在H3单元格输入下面的公式,按ctrl+shift+enter。
=SUM(IF(B$3:B$19=G3,C$3:E$19))
第2种,在H3单元格输入下面的公式,不用三键。
=SUMPRODUCT((B$3:B$19=G3)*C$3:E$19)
=SUMPRODUCT((B$3:B$19=G3)*MMULT(C$3:E$19,{1;1;1}))
=SUMPRODUCT((B$3:B$19=G3)*(C$3:C$19+D$3:D$19+E$3:E$19))
=SUM(MMULT((B$3:B$19=G3)*C$3:E$19,{1;1;1}))
第5种,在H3单元格输入下面的公式,不用三键。
=SUM(SUMIF(B:B,G3,OFFSET(B:B,,{1,2,3})))
这个公式用的是offset的多维引用,可以让sumif的1列条件,分别对3列数据求和,得到的结果有3个值,最后用sum对这3个值求和。
第6种,在H3单元格输入下面的公式,不用三键。
=SUM(SUMIF(B:B,G3,INDIRECT("c"&{3,4,5},)))
这个公式用的是indirect的多维引用,和第5种是一样的思路。
第7种,在H3单元格输入下面的公式,不用三键。
=SUM(SUMIF(B:B,G3,INDIRECT({"c","d","e"}&1)))
这个公式还是用的indirect的多维引用,只不过sumif的第3参数只引用了一个单元格。sumif的第3参数有延展性。
第8种,在H3单元格输入下面的公式,不用三键。
=SUM(DSUM(A$2:E$19,{3,4,5},G$2:G3))-SUM(H$2:H2)
这个公式用的是数据库函数dsum,由于dsum的第3参数是动态扩展的区域,所以计算后面品牌的销售总和时,要把前面其余品牌的销售总和减掉。
第9种,在H3单元格输入下面的公式,不用三键。
=SUMPRODUCT(COUNTIF(G3,B$3:B$19)*C$3:E$19)
这个公式用countif来判断B$3:B$19的区域是否等于G3的品牌,等于的返回1,不等于的返回0。写到这里,让我想到了还可以用查找函数来判断是否相等,比如find,match等。
第10种,选中H3:H8,在编辑栏输入或粘贴下面的公式,按ctrl+shift+enter。
=MMULT(MMULT(N(G3:G8=TRANSPOSE(B3:B19)),C3:E19),{1;1;1})
这个公式是区域数组的用法,所以不用考虑相对引用还是绝对引用的问题。而且用了两个mmult,相对来说比较复杂。想要深入学习的小伙伴可以研究一下。
最后,我想说的是,方法总比困难多。只要你肯学,我相信你还能想出第11种,12种······甚至更多的方法。让我们一起学习excel函数。如果觉得对你有所帮助,可以打赏一下。
https://pan.baidu.com/s/1H9tlo3knhBD2FQCk0ajp1A