ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 寸有所长,尺有所短。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-10-15 18:16 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有一个现象:在比较大的数据区域(十几万行*几百列)用笨拙繁琐的公式比书写较短的公式求值的运算速度要快的多!
尺寸与公式.zip (10.64 KB, 下载次数: 48)
举例如附件中,在表1查找某个的值,而返回表2中相同位置的值。由于本人函数学的不精,不能直接求得查找值的行、列标。

分别在$X$6;$Z$6中用了两个公式查找“a87”这个值在表2中所对应的值(相同位置的值):
         
1,$X$6=SUMIF($A$1:$T$15,$V$6,'2'!$A$1)
            
2,$Z$6=SUMIF(OFFSET($A$1:$T$1,LOOKUP(MID($V$6,1,1),{"a","b","c"},{4,9,14}),0,-5),$V$6,OFFSET('2'!$A$1,LOOKUP(MID($V$6,1,1),{"a","b","c"},{0,5,10}),,,))

第2个公式要比第1个公式快很多!这是因为第2个公式将区域划分成若干小区域再选择计算的结果。

由于数据量大要求公式运算快捷,请问众位好手有没有更好的公式(最好不用SUMIF函数)来计算此类问题。

有没有能直接求出被查找值的行、列标的公式?

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 18:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
先谢谢各位好人!敬候您的佳音。

TA的精华主题

TA的得分主题

发表于 2010-10-15 18:40 | 显示全部楼层
长公式比短的快有很多,但是楼主说第二个会比第一个快?另外,楼主的意图不是很明确,先写两个:1、=MIN(IF(A1:T15=V6,'2'!A1:T15));2、=INDIRECT("2!"&TEXT(MIN(IF(A1:T15=V6,ROW(A1:T15)*1000+COLUMN(A1:T15))),"r0c000"),)都是数组!

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 19:02 | 显示全部楼层
十分感谢zljkd007!

你的第2个公式有可能速度快些,
但您的第一个公式如果下拉1000行,一般电脑就会死机的!

TA的精华主题

TA的得分主题

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

回复 4楼 yyhhhbb 的帖子

不知道你是怎么看出公式的快慢的?你原来的那两个公式,第二个公式计算的倒数第二步就是第一个公式,也就是说第二个公式要先计算好几步才能到第一个公式,会比第一个快?我给你的公式,第二个恐怕也不会比第一个快吧! 另外,就从你的附件上来看,我完全不知道你拉1000行要干嘛?

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 19:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
=MIN(IF($A$1:$T$15=$V6,'2'!$A$1:$T$15))这个公式比=SUMIF($A$1:$T$15,$V6,'2'!$A$1)可能要快!

不好意识!不知道有没有能先求条件值的行列标的公式,然后用INDEX来求结果值!
我觉得这样计算的速度能最快。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 19:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-10-15 19:14 | 显示全部楼层
=INDIRECT("2!R"&CEILING((FIND(V6,PHONETIC(A1:T15))-1)/60,1)&"C"&MOD((FIND(V6,PHONETIC(A1:T15))-1)/3,20)+1,0)
经测试这个快一些!

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-15 19:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这可是几上千万的数据查询

附件只是举例

TA的精华主题

TA的得分主题

发表于 2010-10-15 19:19 | 显示全部楼层
原帖由 yyhhhbb 于 2010-10-15 19:16 发表
这可是几上千万的数据查询

附件只是举例

上千万的数据,函数就快不了,你还是弄VBA吧!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-9 04:37 , Processed in 0.026376 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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