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 15:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
测试结果       
1、辅助列法 d2=IF(COUNTIF($e2:e$2,e2)=1,MAX(d1:d$1)+1,"")
         f2=IF(ISNA(VLOOKUP(ROW(1:1),$d$2:$e1000,2,0)),"",VLOOKUP(ROW(1:1),$d$2:$e1000,2,0))

1、辅助列       
0.141       
0.156       
0.156       
0.156       
       
       
2、 =INDEX(姓名,SMALL(IF(ROW(姓名)-1=MATCH(姓名,姓名,0),ROW(姓名)-1,""),ROW(1:1)))       
4.625       
4.563       
4.438       
       
3、=INDEX(E:E,SMALL(IF(MATCH(机构,机构,)=ROW(机构)-1,ROW(机构),4^8),ROW(1:100)))&""       
row(1:100)        row(1:50)
4.563        4.531
4.547        4.547
4.484        4.656
       
row(1:1000)       
4.563       
4.516       
4.656       
       
公式四=INDEX(机构,MATCH(,COUNTIF($e$1:e1,机构),))       
出现错误,有待解决。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 15:52 | 显示全部楼层
从测试结果看出辅助列法与其他几种公认的提取不重复值公式相比简直不是一个档次的。
提取不重复值测试附件
提取不重复列测试.rar (43.85 KB, 下载次数: 106)

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

TA的精华主题

TA的得分主题

发表于 2010-5-12 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢分享......

TA的精华主题

TA的得分主题

发表于 2010-5-12 16:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主的测试很认真。谢谢

TA的精华主题

TA的得分主题

发表于 2010-5-12 16:42 | 显示全部楼层
与想象不同,的确是sumproduct快些,不过优势没那么明显,我是用随机数字试的,第一次sumproduc耗时5.938秒,随后稳定在2.25秒,sumif则是3.594和2.391

TA的精华主题

TA的得分主题

发表于 2010-5-12 16:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 lhx120824 于 2010-5-12 15:47 发表
2、 =INDEX(姓名,SMALL(IF(ROW(姓名)-1=MATCH(姓名,姓名,0),ROW(姓名)-1,""),ROW(1:1)))        
4.625        
4.563        
4.438        
        
3、=INDEX(E:E,SMALL(IF(MATCH(机构,机构,)=ROW(机构)-1,ROW(机构),4^8),ROW(1:100)))&""        
row(1:100)        row(1:50)
4.563        4.531
4.547        4.547
4.484        4.656


这个测试结果有误吧?
第三个公式是多单元格数组公式,怎么可能和第二个公式一个速度?
【你是按多单元格数组公式输入的吗?如果不是,那当然和公式2的速度一样】

[ 本帖最后由 晚枫 于 2010-5-12 16:51 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 17:00 | 显示全部楼层
原帖由 晚枫 于 2010-5-12 16:47 发表


这个测试结果有误吧?
第三个公式是多单元格数组公式,怎么可能和第二个公式一个速度?
【你是按多单元格数组公式输入的吗?如果不是,那当然和公式2的速度一样】

都是按数组公式输入的,有其他方法更好,希望有不同的意见,才能有比较。争论才能明朗。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 17:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 gouyuanpei 于 2010-5-12 16:42 发表
与想象不同,的确是sumproduct快些,不过优势没那么明显,我是用随机数字试的,第一次sumproduc耗时5.938秒,随后稳定在2.25秒,sumif则是3.594和2.391

你让数据量增大,越多越明显。

TA的精华主题

TA的得分主题

发表于 2010-5-12 17:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 lhx120824 于 2010-5-12 17:00 发表

都是按数组公式输入的,有其他方法更好,希望有不同的意见,才能有比较。争论才能明朗。


ROW(1:00),应该是表示100个单元格组成一个区域数组公式(选定100个单元格,一起按下三键),而不是写完一个按三键再向下拉。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-12 17:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 晚枫 于 2010-5-12 17:09 发表


ROW(1:00),应该是表示100个单元格组成一个区域数组公式(选定100个单元格,一起按下三键),而不是写完一个按三键再向下拉。

我按你的方法试了试,根据需要改成row(1:250),选定一列的250个单元格,按F2后粘贴公式,再按三键,的确很快填满单元格,我对这个公式就不知怎么来测试速度值了。谢谢你的指点。让我对数组又加深了理解。

[ 本帖最后由 lhx120824 于 2010-5-12 17:28 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-23 11:43 , Processed in 0.035039 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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