ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-16 22:11 | 显示全部楼层
czzqd在帖子
[求助]如何在单元格中取一列数中最后一个非零的数值?
的14楼指出:
http://club.excelhome.net/viewth ... 3Ddigest&page=2

介绍一下bosco_yip 对相关公式的测速结果:

=LOOKUP(2,1/(A1:A10<>""),A1:A10) - 为效率较低的函数公式 - 公式一 : LOOKUP(9.99999999999999E307,A:A) - 公式二 : LOOKUP(2,1/(A1:A65535<>””),A1:A65535) - 公式一 要比公式二, 速度效率快约500倍

==========

INDEX(A1:A10,MAX(IF(A1:A10<>"",ROW(A1:A10)))) - 亦是效率较低的函数公式 - 公式一 : LOOKUP(9.99999999999999E307,A:A) - 公式三 : INDEX(A:A,MAX(IF(A1:A65535<>””,ROW(A1:A65535)))) - 公式一 要比公式三, 速度效率快约396倍

[ 本帖最后由 lhx120824 于 2010-7-16 22:13 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-28 01:53 | 显示全部楼层
有关函数的效率比较我会不断加入的。
以下的两个数组公式
=INDEX($A:$A,SMALL(IF($B$37:$B$58=$D37,ROW($A$37:$A$58),4^8),COLUMN(A:A)))&""
=OFFSET($A$36,SMALL(IF($B$37:$B$58=$D48,ROW($A$37:$A$58),4^8),COLUMN(A:A))-1,)&""
差别在哪里?

[ 本帖最后由 lhx120824 于 2010-7-28 01:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-7-28 07:47 | 显示全部楼层
原帖由 lhx120824 于 2010-7-28 01:53 发表
有关函数的效率比较我会不断加入的。
以下的两个数组公式
=INDEX($A:$A,SMALL(IF($B$37:$B$58=$D37,ROW($A$37:$A$58),4^8),COLUMN(A:A)))&""
=OFFSET($A$36,SMALL(IF($B$37:$B$58=$D48,ROW($A$37:$A$58),4^8),COL ...


就公式本身而言,这两个公式的运算速度应该没有什么差别,就是有,也很小很小。
问题是第二个公式使用了易失函数,前一个没有。  易失函数的使用会对整个表格的运算速度有较大的影响。所以在可能的情况下,还是避免使用为好。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-30 10:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 晚枫 于 2010-7-28 07:47 发表


就公式本身而言,这两个公式的运算速度应该没有什么差别,就是有,也很小很小。
问题是第二个公式使用了易失函数,前一个没有。  易失函数的使用会对整个表格的运算速度有较大的影响。所以在可能的情况下,还是 ...

你说的问题很重要,既然使用时有“易失”的问题,况且第二个函数需要五个参数,起始点和偏移的量不易把握,这也是应该在使用中应注意的问题,那就何不使用第一个?

[ 本帖最后由 lhx120824 于 2010-8-28 09:23 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-8-26 22:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-8-28 09:18 | 显示全部楼层
还没用过这么庞大的数据呢。。哈哈。。顶了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-8-28 09:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
=MATCH("一二三四五",TEXT(ROW(A:A),"[dbnum1]0"),)数组
惊心的是大数组(row(1:65536),公式短,但速度慢。

比较一下 wshcw的:
一至九的转换:
=MID(SUM(FIND(TEXT(ROW($1:$9),"[dbnum1]0"),"一二三四五六七八九")/10^ROW($1:$9)),3,9)

看来公式中引用的区域范围的大小对速度的影响也是一个重要的因素。

参看讨论的帖子:
“一二三四五”如何用公式转化成“12345”
http://club.excelhome.net/thread-617752-3-1.html

[ 本帖最后由 lhx120824 于 2010-8-28 09:36 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-8-28 23:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我以前做过802.16 e下的LDPC。QQ:280105847.我加lz了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-9-5 21:20 | 显示全部楼层
晚枫在帖子
逆向查询有多少种方法
http://club.excelhome.net/viewth ... 26amp%3Btypeid%3D40
的5楼中提供的:

IF({1,0}和CHOOSE是最慢的
OFFSET和INDRIRECT次之,
LOOKUP速度也不见得快
只有INDEX+MATCH是最快的
如果B列能够排序,那么MATCH就可以采用近似匹配,速度更快

TA的精华主题

TA的得分主题

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

本版积分规则

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

GMT+8, 2024-11-22 16:38 , Processed in 0.041071 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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