ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] [函数用法讨论系列17] 关于易失函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-5-30 15:16 | 显示全部楼层
谢谢楼主分享!

TA的精华主题

TA的得分主题

发表于 2006-5-30 17:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

经我测试,在使用A1:INDEX()、INDEX():INDEX()这种结构时,INDEX表现为半易失性函数(或工作簿级易失性函数),即:在工作表中按F9键或编辑单元格时不会引起整个工作簿的重新计算,而重新打开工作簿则会重新计算。
而OFFSET则表现为完全易失性函数(或工作表级易失性函数),不仅表现为重新打开工作簿时会重新计算,而且在工作表中按F9键或编辑单元格时会引起整个工作簿的重新计算。

经测试,OFFSET的计算速度比INDEX慢(但文件比用INDEX的小),重新打开工作簿时OFFSET计算完成后还有一定时间的停顿才能让用户编辑工作簿,而INDEX计算完成后用户马上可以编辑工作簿。

附:测试文件(注:由于B、C列填满整列时文件太大,所以上传的文件数据只到20000行,大家可以改变引用范围或用整列试试)

l6ROO1Se.rar (136.44 KB, 下载次数: 104)

结论:用A1:INDEX()、INDEX():INDEX()这种结构替代OFFSET是值得大力推广的!
[此贴子已经被作者于2007-10-21 13:19:08编辑过]

kZpGLitI.rar

141.23 KB, 下载次数: 110

TA的精华主题

TA的得分主题

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

谢谢aichong兄的测试。我只是猜想,还没付诸实践。[em04]看来又可以坐享其成了,嘻嘻。

TA的精华主题

TA的得分主题

发表于 2006-5-30 18:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-5-31 08:32 | 显示全部楼层

至于row() column()微軟將它們列入可能和today()一樣,因為不知你到底是如何來編輯工作表(插入單元格等),所以將它們列入易失函數,每次f9重新計算下!不知可不可以這樣理解,涉及到当前值时就都将它们归为易失函数!

或也可以这样理解:A2=ROW()相当于A2=ROW(A2),如果按循环的定义来说,在A2中引用了A2,是不是也应该算循环引用?所以应该要每次重复计算?

不知道可否这样理解?

[此贴子已经被作者于2006-5-31 8:32:55编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-31 08:41 | 显示全部楼层
以下是引用[I]fukan[/I]在2006-5-31 8:32:17的发言:[BR]

至于row() column()微軟將它們列入可能和today()一樣,因為不知你到底是如何來編輯工作表(插入單元格等),所以將它們列入易失函數,每次f9重新計算下!不知可不可以這樣理解,涉及到当前值时就都将它们归为易失函数!

或也可以这样理解:A2=ROW()相当于A2=ROW(A2),如果按循环的定义来说,在A2中引用了A2,是不是也应该算循环引用?所以应该要每次重复计算?

不知道可否这样理解?

这个理解恐怕不对。 因为微软并没有把ROW()列为易失函数,而是ROWS()和COLUMNS()

TA的精华主题

TA的得分主题

发表于 2006-9-17 22:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

在约翰沃肯巴赫的《EXCEL2003公式与函数应用宝典》那本书上有提到易失函数,共12种

TA的精华主题

TA的得分主题

发表于 2006-10-9 09:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-9 21:58 | 显示全部楼层

谢谢

刚刚查了易失函数

发现了你的帖子

谢谢指教

TA的精华主题

TA的得分主题

发表于 2007-1-17 13:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用aichong在2006-5-30 17:41:49的发言:

经我测试,在使用A1:INDEX()、INDEX():INDEX()这种结构时,INDEX表现为半易失性函数(或工作簿级易失性函数),即:在工作表中按F9键或编辑单元格时不会引起整个工作簿的重新计算,而重新打开工作簿则会重新计算。
而OFFSET则表现为完全易失性函数(或工作表级易失性函数),不仅表现为重新打开工作簿时会重新计算,而且在工作表中按F9键或编辑单元格时会引起整个工作簿的重新计算。

经测试,OFFSET的计算速度比INDEX慢(但文件比用INDEX的小),重新打开工作簿时OFFSET计算完成后还有一定时间的停顿才能让用户编辑工作簿,而INDEX计算完成后用户马上可以编辑工作簿。

附:测试文件(注:由于B、C列填满整列时文件太大,所以上传的文件数据只到20000行,大家可以改变引用范围或用整列试试)

结论:用A1:INDEX()、INDEX():INDEX()这种结构替代OFFSET是值得大力推广的!

谢谢测试, 现在如果可能我必定将INDEX取代OFFSET进行到底.

下面的函数同样也可以产生可变列的数组(可变行可以用同样的方法):

=INDEX(INDEX(数据!$B:$B,MATCH("条件字符",数据!$A:$A,)),):INDEX(INDEX(数据!$1:$65536,,COUNTA(INDEX(数据!$1:$65536,MATCH("条件字符",数据!$A:$A,),))),MATCH("条件字符",数据!$A:$A,))

[此贴子已经被作者于2007-1-17 14:08:44编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 22:56 , Processed in 0.044595 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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