ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: gdliyy

[原创]关于用SUMPRODUCT取代SUM数组公式的想法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2005-2-24 08:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:SUMPRODUCT
good~~!

TA的精华主题

TA的得分主题

发表于 2005-2-24 16:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这篇真的是太经典啦!谢谢楼主!

[em10]

TA的精华主题

TA的得分主题

发表于 2005-2-24 16:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-2-25 10:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-2-25 22:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

多谢,举一反三,我学会了我的问题解决方式,多谢

TA的精华主题

TA的得分主题

发表于 2005-3-1 14:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢版主了,正在学习这个函数.....

TA的精华主题

TA的得分主题

发表于 2005-5-8 13:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-5-12 10:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用gdliyy在2004-3-11 19:22:00的发言:

大家用过数组公式的都可能知道,对于多条件求和或计数,我们一般都采用这种数组公式来计算。如: 对于1个明细数据(见例),我们需要求该班男、女生各科成绩大于各科平均分的人数,这个问题不难,大家一般都会用sum()来多条件求值就行了(注:数组公式): =SUM(($C$3:$C$428=$K3)*(D$3:D$428>=AVERAGE(D$3:D$428))) 确实这是解决问题的一种方法,但往往对于初用数组公式的朋友常常会遗忘(或不知道)用(Ctrl+shift+Enter)组合键来结束编辑(论坛中常常有类似的提问)。 出于这个原因,我想到能否用SUMPRODUCT()函数来代替常用SUM()多条件求和公式呢?结果答案是肯定的。 把上面的公式稍做修改,请见: =SUMProduct(($C$3:$C$428=$K3)*1,(D$3:D$428>=AVERAGE(D$3:D$428))*1) 而且直接用Enter来结束,函数仍然可以正确计算结果。 原因在于:SUMPRODUCT()函数本身就支持数组间运算(相同维数的数组相乘后再加总),因此我们毋须用数组公式组合键来结束。 另:提醒大家一点,如果大家试图将公式改为: =SUMProduct(($C$3:$C$428=$K3),(D$3:D$428>=AVERAGE(D$3:D$428))) 公式不能得出正确结果。

如果多个条件这样并列写入,系统默认是用AND关系(即相乘)来运算,但是SUMPRODUCT不支持逻辑值数组常量间相乘(也算是小遗憾吧:)),因此请一定要将逻辑值转换成数值才行。 大家可能觉得麻烦,因此我建议使用缩写公式,实际上是将多个数组参数变为一个数组,也就可以避免不同维数数组间相乘而带来的错误麻烦了。 =SUMProduct(($C$3:$C$428=$K3)*(D$3:D$428>=AVERAGE(D$3:D$428))) 同理:我们如果需要求出所有男生中总分大于平均总分的所有总分,我们也可以用公式: =SUMPRODUCT(($C$3:$C$428=$K13)*(I$3:I$428>=AVERAGE(I$3:I$428)),I$3:I$428) 如果数组的维数相同,建议使用这种方法,如果直接相乘出现错误,可能是I列出现非数值字符,用逗号分隔后,系统可以自动忽略非数值型数据的。

对于条件求和的应用,大家可以结合下面的实例(又是借来的实例)来理解(但对于使用该函数,运算速度是否有提高,还待各位朋友验证),希望对大家有帮助,谢谢! 最后再提醒大家一点:并不是所有用SUM()+数组公式(如公式内部加入IF来判断的)都可以用SUMPRODUCT()函数来代替的,该帖只是告诉大家另一种思路或另一种想法。

不过,有几个提法不是很认同,SUM(IF())的方式,也可以用Sumproduct(()*())的方式来替代。

你提到的数组维数相同,这个说法有误,应该是数组尺寸相同,数组的维数是指一维,二维,三维数组等,Excel函数只能处理1维和2维数组,Vba可以处理三维。而尺寸是指数组的大小,即行列数。

举例,=SUMPRODUCT(A1:B4,C1:D6),两个参数都是二维的,但不同行数就不行了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-12 13:17 | 显示全部楼层
以下是引用apolloh在2005-5-12 10:16:00的发言:

不过,有几个提法不是很认同,SUM(IF())的方式,也可以用Sumproduct(()*())的方式来替代。

你提到的数组维数相同,这个说法有误,应该是数组尺寸相同,数组的维数是指一维,二维,三维数组等,Excel函数只能处理1维和2维数组,Vba可以处理三维。而尺寸是指数组的大小,即行列数。

举例,=SUMPRODUCT(A1:B4,C1:D6),两个参数都是二维的,但不同行数就不行了。

呵呵~~~谢谢指正,原来是想表达这个行列数的意思的,只是当时表达错误!

但对于第1个提法我还是有不同的意见: 1、如我之前讨论的问题中的例子:=Sum(if(A1:C10="A",B1:D10)*E1:E10),在这个例子中,显然B1:D10中可能含有文本,所以不能直接相乘,必须用IF加以判断,在这样的核心表达式不修改的情况下,不管你是用Sum还是用Sumproduct来外套,都必须用三键来结束的;但是当我们合理地运用一下Sumproduct的优势,公式稍修改也可回车结束的。 2、但对于这样的一些公式,当IF条件用来屏蔽错误值的时候,那你用Sumproduct()来单键结束来代替也是无效的,必须使用数组公式三键结束。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2005-5-12 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议加精华方便将来新手查找哦.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 07:15 , Processed in 0.047031 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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