它不只是求乘积之和,它是个披着求和外套的条件计算怪兽。
很多人理解错了
刚听到SUMPRODUCT这个名字,以为是"求乘积的和"。
没错,这是它的基本功能。但如果你只用到这个,你只发挥了它10%的威力。
它真正的身份是:数组公式终结者。
基础用法:求乘积之和
假设你有数量和单价,想算总价:
| 产品 | 数量 | 单价 |
|---|---|---|
| A | 10 | 20 |
| B | 5 | 30 |
| C | 8 | 15 |
=SUMPRODUCT(B2:B4, C2:C4)
计算过程:(10×20) + (5×30) + (8×15) = 200+150+120 = 470
不用辅助列,一步到位。
进阶用法1:多条件计数
需求:统计"技术部"且"工资>15000"的人数
传统做法:COUNTIFS,或者用辅助列。
SUMPRODUCT写法:
=SUMPRODUCT((B2:B10="技术部")*(C2:C10>15000))
原理:
(B2:B10="技术部")返回 {TRUE, FALSE, TRUE, ...}(C2:C10>15000)返回 {TRUE, TRUE, FALSE, ...}TRUE*TRUE = 1,其他组合都是0- 最后求和就是符合条件的个数
进阶用法2:多条件求和
需求:求"技术部"的"年终奖"总和
=SUMPRODUCT((A2:A100="技术部")*(D2:D100))
或者加上更多条件:
=SUMPRODUCT((部门列="技术部")*(年份=2024)*(奖金列))
注意: 条件用括号包起来,这是语法!
进阶用法3:实现类似SUMIFS但更强的功能
SUMIFS有个坑:条件区域和求和区域必须一样大。
SUMPRODUCT没这个限制,而且支持数组运算。
实战:计算加权平均分
| 科目 | 分数 | 权重 |
|---|---|---|
| 数学 | 90 | 0.4 |
| 英语 | 85 | 0.3 |
| 物理 | 88 | 0.3 |
=SUMPRODUCT(B2:B4, C2:C4) / SUM(C2:C4)
结果:(90×0.4 + 85×0.3 + 88×0.3) / (0.4+0.3+0.3) = 87.9
进阶用法4:按月份统计(日期处理)
需求:统计2024年3月的销售额
=SUMPRODUCT((YEAR(A2:A100)=2024)*(MONTH(A2:A100)=3)*(B2:B100))
不需要辅助列,不需要透视表,一个公式搞定。
进阶用法5:跨表多条件查找
这个就比较骚了...
假设你有两个表,要根据多个条件匹配数据:
=SUMPRODUCT((表1!A:A=查找值1)*(表1!B:B=查找值2)*(表1!C:C))
注意: 这个返回的是求和结果,如果确定只有一条匹配数据,就可以当查找用。
为什么用SUMPRODUCT而不是数组公式?
| 特性 | SUMPRODUCT | 传统数组公式 |
|---|---|---|
| 输入方式 | 直接回车 | 需要Ctrl+Shift+Enter |
| 可读性 | 较好 | 容易看花眼 |
| 兼容性 | 全版本支持 | 部分老版本不支持 |
| 性能 | 大数据稍慢 | 差不多 |
性能警告
SUMPRODUCT好用是好用,但别滥用:
- 整列引用会卡死:
(A:A=条件)这种写法数据量大的时候Excel会无响应 - 建议用具体范围:
(A2:A1000=条件)
我常用的模板
# 多条件计数
=SUMPRODUCT((条件1)*(条件2)*(条件3))
# 多条件求和
=SUMPRODUCT((条件1)*(条件2)*求和列)
# 加权平均
=SUMPRODUCT(数值列, 权重列)/SUM(权重列)
# 按日期统计
=SUMPRODUCT((YEAR(日期列)=年份)*(MONTH(日期列)=月份)*数值列)
一句话总结
SUMPRODUCT = 条件计数 + 条件求和 + 加权计算 + 日期处理,一个函数干四个函数的活。
下次有人让你统计这统计那,直接甩个SUMPRODUCT公式,深藏功与名。
这函数我当年学的时候也觉得怪怪的,用熟了之后发现是真香。现在写报表基本离不开了。