SUMIFS函数滚一边去,我才是Excel真正的求和之王!
条件计数用COUNTIFS,条件求和用SUMIFS,不过两者有一些局限性,比如二维数据源使用不了,也无法嵌套函数。而SUMPRODUCT刚好能弥补这些局限。
下面,卢子通过一些实际案例来详细说明。
1.统计每个名称对应的金额=SUMPRODUCT(($A$2:$A$14=F2)*$B$2:$D$14)

语法:
=SUMPRODUCT((条件区域=条件)*求和区域)
2.统计每个名称对应人员的金额=SUMPRODUCT(($A$2:$A$14=$F2)*($B$1:$D$1=G$1)*$B$2:$D$14)

语法:=SUMPRODUCT((条件区域1=条件1)*(条件区域2=条件2)*求和区域)
也就说,除了可以单条件求和,也可以多条件求和。
3.统计每个名称对应的金额,A列的名称里面含有人员
这里的名称都是2位字符,因此可以用LEFT提取2位。
=SUMPRODUCT((LEFT($A$2:$A$40,2)=F2)*$B$2:$B$40)

这种是碰巧,实际上很多时候名称的字符数是不确定的,比如有的是2位,有的是3位,4位。
4.统计每个名称对应的金额,名称字符数不确定
FIND就是判断名称有没在A列出现,如果出现就是数字,不出现就是错误值。ISNUMBER就是判断是不是数字。=SUMPRODUCT((ISNUMBER(FIND(F2,$A$2:$A$40)))*$B$2:$B$40)

语法:
=SUMPRODUCT((ISNUMBER(FIND(简称,全称)))*求和区域)
简称也可以说是字符少的,全称也可以说是字符多的。
5.统计多个发票号的总金额=SUMPRODUCT((ISNUMBER(FIND($A$2:$A$10,D2)))*$B$2:$B$10)

跟案例4差不多,区别在于简称是A列,而全称是D列。FIND的2个参数可以是单元格,也可以是区域,前提是简称在第1参数,全称在第2参数。
6.条件计数语法说明
前面的5个案例都是条件求和,只要改一个地方,就可以将求和变成计数。
=SUMPRODUCT(($A$2:$A$14=F2)*1)

将求和区域变成1,就是计数,就这么简单。
条件求和=SUMPRODUCT((条件区域=条件)*求和区域)
条件计数:=SUMPRODUCT((条件区域=条件)*1)
SUMPRODUCT函数其实并不难,都是固定语法,懂得修改几个参数就行,学好了能解决超级多的问题。
- 0000
- 0000
- 0009
- 0005
- 0001