ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 由SUMIF与sumproduct的速度比较展开联想,实现同一功能的不同公式如何选择?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 11:41 | 显示全部楼层
原帖由 cflood 于 2010-5-12 10:09 发表
公式应该这样才对
=SUMIF($P$2:$P$3643,$S2,D$2:D$3643)
=SUMPRODUCT(($P$2:$P$3643=$S2)*D$2:D$3643)
似乎是sumproduct快一些


修改公式后的数据:

=SUMPRODUCT(($P$2:$P$3643=$S2)*D$2:D$3643)               
0.375        0.734        0.672
0.344        0.656        0.641
0.328        0.719        0.672
        0.656       
=SUMIF($P$2:$P$3643,$S2,D$2:D$3643)               
1.172        1.188        1.141
1.188        1.219        1.078
1.414        1.141        1.094

如果测试代码和方法正确,可看出两个公式速度相差近一倍。SUMPRODUCT比SUMIF快。

[ 本帖最后由 lhx120824 于 2010-5-12 12:47 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-5-12 12:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-12 13:11 | 显示全部楼层
SUMPRODUCT的速度比SUMIF还快,这是我没有想到的。过去一直以为SUMIF更快,没有测试过。
感谢楼主的测试

利用楼主的附件顺便测试了一下SUMIF的整列引用:
=SUMIF($P:$P,$S2,D:D)
测试结果是:和 =SUMIF($P2:$P3643,$S2,D2:D3643) 这个公式的运算速度相同。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 13:19 | 显示全部楼层
原帖由 晚枫 于 2010-5-12 13:11 发表
SUMPRODUCT的速度比SUMIF还快,这是我没有想到的。过去一直以为SUMIF更快,没有测试过。
感谢楼主的测试

利用楼主的附件顺便测试了一下SUMIF的整列引用:
=SUMIF($P:$P,$S2,D:D)
测试结果是:和 =SUMIF($P2:$P ...

是的,我没修改的整列引用公式和修改后的部分引用公式对SUMIF的速度没有影响。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 14:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再研究一列中提取不重复值的公式:
公式一(辅助列法):
=IF(COUNTIF($e2:e$2,e2)=1,MAX(d1:d$1)+1,"")
=IF(ISNA(VLOOKUP(ROW(1:1),$d$2:$e1000,2,0)),"",VLOOKUP(ROW(1:1),$d$2:$e1000,2,0))
公式二(   ):
=INDEX(e:e,SMALL(IF(MATCH(机构,机构,)=ROW(机构)-1,ROW(机构),4^8),ROW(1:50)))&""
公式三(   ):
=INDEX(机构,MATCH(,COUNTIF($e$1:e1,机构),))
猜猜以上的三个公式哪个速度最快,哪个速度最慢?

TA的精华主题

TA的得分主题

发表于 2010-5-12 14:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 14:39 | 显示全部楼层
我也需要研究好后才能解决。要把测试的数据对比拿出来才行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 15:03 | 显示全部楼层
首先猜测一个,辅助列的方法最快。
公式一(辅助列法):
=IF(COUNTIF($e2:e$2,e2)=1,MAX(d1:d$1)+1,"")
=IF(ISNA(VLOOKUP(ROW(1:1),$d$2:$e1000,2,0)),"",VLOOKUP(ROW(1:1),$d$2:$e1000,2,0))

TA的精华主题

TA的得分主题

发表于 2010-5-12 15:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
个人觉得还是SUMIF,据说SUMPRODUCT是属于数组类的,所以运行较慢

TA的精华主题

TA的得分主题

发表于 2010-5-12 15:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-23 19:27 , Processed in 0.041912 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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