ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 22052|回复: 16

[转帖] 多条件加总和多条件计数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-8-12 15:05 | 显示全部楼层 |阅读模式
http://www.biaogewang.com/tech.php?id=20100809

SUMPRODUCT是一个很特别的函数。它原本的用途是把两个或以上数组对应的数值相乘后把乘积相加。 可是更多时候,我们会把它用作多条件加总/多条件计数。就是在2007版中,Excel增加了SUMIFS(多条件加总)和 COUNTIFS(多条件计数)两个函数,用SUMPRODUCT 还是有SUMPRODUCT的优势。
首先,SUMPRODUCT在定义条件的时候,由于是直接用等式或其他比较公式作为条件, 比SUMIFSCOUNTIFS更灵活。
第二,学会用SUMPRODUCT去做多条件加总/多条件计数后, 会更容易理解SUMPRODUCT的其他用途,如"RANKIF"(条件排序), 或多条件VLOOKUP等。
另外,(也可能是习惯的问题)SUMPRODUCT直接用公式作为条件,看上去更直观。
我们先看看用SUMPRODUCT简单替代SUMIF/COUNTIF
AB
1a1
2c2
3A3
4b4
5a5


比如说,针对左边两列数值,我们需要加总所有第一列是 "a" 或 "A" 对应第二列的值(1+3+5)。 直接用SUMIF,公式就是:
=SUMIF(A1:A5,"a",B1:B5)
A1:A5是条件范围,"a"是条件的要求数值,B1:B5是加总范围。
如果用SUMPRODUCT,公式就是:=SUMPRODUCT((A1:A5="a")*1,B1:B5)

AB各元素公式结果1 a1(A1="a")*112 c2(A2="a")*103 A3(A3="a")*114 b4(A4="a")*105 a5(A5="a")*11

公式里的第一个数组(A1:A5="a")*1反映了条件,我们把这数组中五个元素分别在左边表格的第三列中列出。
第一个元素是(A1="a")*1A1="a"会返回 “TRUE” , SUMPRODUCT会把所有非数值的元素忽略,以我们要把 “TRUE” / “FALSE” 变成数值 1 或 0。
一般使用的方法是把条件乘以1,也可以在前面加两个负号。 比如(A1="a")*1(A2="a")*1 ... 或
--(A1="a")--(A2="a") ...
这样,第一个数组返回的,就是右边表格中第四列的值。SUMPRODUCT((A1:A5="a")*1,B1:B5) 实际上就是 “1*1 + 0*2 + 1*3 + 0*4 + 1*5” ,等于符合条件的的就加总,不符合条件的的就不加。

实际上SUMPRODUCT并不一定要求两个或以上的数组,一个数组也是可以的。所以有时候写公式的时候,会直接把要乘的都放第一个数组里:
=SUMPRODUCT((A1:A5="a")*B1:B5)
我自己的习惯是把条件都放在第一个数组,把加总的放在第二个数组,方便自己纠错的时候分析。
要注意的是,条件前后必须用(),不然,由于乘号的优先顺序比较高, A1:A5="a"*B1:B5就会被视同为A1:A5=("a"*B1:B5),公式自然就报错了。
要做COUNTIF,跟上面SUMIF的方式很类似, 只需要把*B1:B5改成*1就可以了。如下:
=SUMPRODUCT((A1:A5="a")*1)
SUMPRODUCTSUMIFSCOUNTIFS更灵活, 是因为SUMPRODUCT的条件是用公式定义的。比如说在上面的例子中,如果只需要加小写的"a",不加大写的"A", 用SUMIF就只能加辅助列,计算那个单元格是小写的"a";用SUMPRODUCT就可以一步到位了:
=SUMPRODUCT(EXACT(A1:A5,"a")*B1:B5)
理解了上面单个条件加总/计数,要设计多条件加总/多条件计数,实际上就是用:
=SUMPRODUCT((条件一)*(条件二)*(条件三),加总范围)
ABC
1Aa1
2Bc2
3Ba3
4Cb4
5Aa5


比如要把A列=A,B列=a 对应的C列数字加总:
=SUMPRODUCT((A1:A5="A")*(B1:B5="a"),C1:C5)
要计算A列=A,B列=a 的个数:
=SUMPRODUCT((A1:A5="A")*(B1:B5="a"))
只要多于一个条件,就不用 *1 或者 -- 了。

TA的精华主题

TA的得分主题

发表于 2010-8-12 16:42 | 显示全部楼层

sumproduct的多用途

sumproduct除了帮助中用途之外,还可以代替rank 排序,代替sumif做多条件加总,代替 countif做多条件计数。

TA的精华主题

TA的得分主题

发表于 2010-8-12 16:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了,谢谢

TA的精华主题

TA的得分主题

发表于 2010-8-12 16:53 | 显示全部楼层
总结的好,天天在用,但是没好好总结一下。

TA的精华主题

TA的得分主题

发表于 2010-8-23 15:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-11-15 04:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 galz01 于 2010-8-12 16:42 发表
sumproduct除了帮助中用途之外,还可以代替rank 排序,代替sumif做多条件加总,代替 countif做多条件计数。

请问sumproduct如何做多条件计数,举个最简单例子:
          A列奶站  B列蛋白  C列乳糖
1            1号         3             4
2            2号         4             5
3            1号         3             3
4            3号         4             2
5            1号         4             5
6            2号         2             3
7            2号         4             2   
8            3号         3             2
9            1号         2             3
10          3号         5             2         

比如求1号奶站合格奶源的数量(假定条件:蛋白和乳糖都大于2)
如何用sumproduct或countif来求这个多条件计数?多谢!

TA的精华主题

TA的得分主题

发表于 2010-11-15 04:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-11-15 07:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-11-15 15:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-2-1 10:34 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 17:40 , Processed in 0.051557 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表