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-9-14 17:00 | 显示全部楼层
在一楼又进行了部分更新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-17 07:52 | 显示全部楼层
kankan1030在
寸有所长,尺有所短http://club.excelhome.net/thread-637293-2-1.html
中的关于速度的回复:

1、=INDIRECT("2!R"&CEILING((FIND(V6,PHONETIC(A1:T15))-1)/60,1)&"C"&MOD((FIND(V6,PHONETIC(A1:T15))-1)/3,20)+1,0)   
速度:18.76S
2、=SUMIF(OFFSET($A$1:$T$1,LOOKUP(MID($V6,1,1),{"a","b","c"},{4,9,14}),0,-5),V6,OFFSET('2'!$A$1,LOOKUP(MID($V6,1,1),{"a","b","c"},{0,5,10}),,,))
速度:24.93S
3、=SUMIF($A$1:$T$15,$V6,'2'!$A$1)
速度:26.93S
4、=INDIRECT("2!"&TEXT(SUM((A1:T15=V6)*(ROW(A1:T15)*1000+COLUMN(A1:T15))),"r0c000"),0)
速度:28.33S
5、=MIN(IF($A$1:$T$15=$V6,'2'!$A$1:$T$15))
速度:40.52S

以上公式测试环境相同,均为运算十万次所需的时间。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-17 07:57 | 显示全部楼层
gouweicao78在
寸有所长,尺有所短http://club.excelhome.net/thread-637293-3-1.html
中的关于速度的回复:


Excel 2003,最多65536行。
公式运算之快慢,一般无法一眼就看出。只能说对比某两个类似的公式,在算法上有的是明确的。
例如:=LOOKUP(1,0/(A1:A10000="X"),B1:B10000)
这个公式虽然是普通公式,但实际上先运行了10000次的数组比较运算,后面才是Lookup查找。如果A列升序排列,则直接:=LOOKUP("X",A:B)——这个速度就要快得多。

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2010-10-17 21:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-13 21:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-26 14:49 | 显示全部楼层
何获取某一区域中最后一个非空值,例如A1:A10区域中
公式速度測試比較  :

所用公式 :
001 - LOOKUP(9.99999999999999E307,A:A)
002 - LOOKUP(2,1/(A1:A65535<>””),A1:A65535)
003 - INDEX(A:A,MAX(IF(A1:A65535<>””,ROW(A1:A65535))))

測試方法 : 用60000个數據, 每公式運行500 次


測試結果 :
公式……….MicroSecs/公式
001……………..143.20
002……………..71,755.80
003……………..56,645.03

總結 :
001公式最快
001公式比002公式快, 速度快約500倍
001公式比003公式快, 速度快約396倍

全取最后数值或文本公式为 :

=INDEX(A:A,MAX(MATCH({"龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠龠",9.99999999999999E+307},A:A)))

这亦比公式2 和公式3, 快约200倍


结论来源:
http://www.officefans.net/cdb/vi ... ghlight=&page=1

[ 本帖最后由 lhx120824 于 2011-1-26 14:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-11-26 23:06 | 显示全部楼层
平时工作中数据都很少的,速度都很快的,学习了做个记号,以后碰到好调整下,谢谢!。{:soso_e112:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-6 19:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-5-29 23:32 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-5 21:01 , Processed in 0.037189 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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