ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[函数讨论系列9] Match(,0/()),match在乱序数据列中的查找原理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-23 11:50 | 显示全部楼层
QUOTE:
以下是引用springli在2007-1-23 11:24:59的发言:
是二分法呀,大家可以讨论

早已讨论:

Lookup的查找策略 onkey
http://club.excelhome.net/viewthread.php?tid=113915

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2007-2-3 23:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2007-2-3 23:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-8-6 10:09 | 显示全部楼层
以下是引用yanjie在2005-8-6 9:36:54的发言:

经过我检验,公式=MATCH(2,1/(A1:IU1<>"")) 对错误值例如:#N/A无效!

确实是这样的。chenjun在这个帖子的10楼说过的:http://club.excelhome.net/viewthread.php?tid=73035

因为1/(#N/A)仍然是#N/A,

而我们在MATCH的第一参数指明要查找的是数值型,#N/A就被排除在外了

TA的精华主题

TA的得分主题

发表于 2005-8-6 08:05 | 显示全部楼层
以下是引用onkey在2005-8-5 23:27:21的发言:

LOOKUP,VLOOKUP和MATCH的查找机制请看本人发表的贴子:

http://club.excelhome.net/viewthread.php?tid=113915

看了ONKEY的两个帖子和三个流程图,实在是佩服。

我本人(恐怕也包括论坛上的绝大多数人)理论水平=0,只是在黑暗中摸索、学一些技巧的东西,只能学到一些excel的“用法”,由于缺乏理论的指导,一涉及更深入的东西,就只能瞎打瞎撞。

希望onkey能常来,给我辈菜鸟多多点拨,带领我们走出黑暗。

TO aplloh版主:

我认为,三张流程图胜过我们这些帖子的千言万语。由于onkey的总结,函数讨论系列[8]和[9]两个帖子应该可以退出“讨论系列”了。

[此贴子已经被作者于2005-8-6 8:07:48编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-25 14:17 | 显示全部楼层
以下是引用czzqb在2005-7-20 13:18:21的发言:

apolloh版主的这个说法我还要再学习。

但我认为把版主的话反过来,肯定是对的:要想“找到最后一个值的位置”,“只有查找值大于所有该列所有数据(不同类型的数据忽略)”

所以才有下面这样两个公式:

MATCH(9.99999999999999E+307,A:A)

MATCH(REPT("龠",255),A:A)

在这方面与LOOKUP()的原理一致

TA的精华主题

TA的得分主题

发表于 2005-7-20 13:18 | 显示全部楼层
以下是引用apolloh在2005-7-20 12:32:25的发言: MATCH(0,0/(A1:IU1<>"")) 出错,看来不是浮点运算问题,而是match在乱序情况下在存在查找值一样大小的数值列表中,查找数据是不被支持的,只有查找值大于所有该列所有数据(不同类型的数据忽略)才支持,并能找到最后一个值的位置。

apolloh版主的这个说法我还要再学习。

但我认为把版主的话反过来,肯定是对的:要想“找到最后一个值的位置”,“只有查找值大于所有该列所有数据(不同类型的数据忽略)”

所以才有下面这样两个公式:

MATCH(9.99999999999999E+307,A:A)

MATCH(REPT("龠",255),A:A)

[此贴子已经被作者于2005-7-20 16:11:50编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-20 12:26 | 显示全部楼层

TA的精华主题

TA的得分主题

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

我的看法:apolloh版主在29楼所说有点问题,所以导致30楼的疑问。

“在升序的情况下,由于一旦找到最后一个小于或等于查找值的元素,那么后面的元素一定比查找值大,也就不会往下找”,这句话只说对了一半。

在参数默认的情况下,系统认为你的数据是升序的。如果查找到第一个等于查找值的元素,那么下一个元素当然不小于这一个,所以它就停止在第一个等于查找值的元素上,否则继续向下查。如果到了最后一个,还没有等于的,它就认为最后一个是全部数据里最大的也就是满足公式的小于查找值的元素。

这样在公式=MATCH(1,0/(A1:IU1<>""))里第一参数只要比零大一点点就可以,同理=MATCH(2,1/(A1:IU1<>"")) 里2也可以换成1.00001之类

TA的精华主题

TA的得分主题

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

我的意思是match先查找“等于”的数,有相等的,查找停止;没有就一直查下去,一直到最后一个,并且把最后一个不等于的认为是最大的不等于--而这就是结果。

所以如果把帮助里“查找小于或等于 lookup_value 的最大数值”改为“查找等于,或小于lookup_value 的最大数值”就好理解一些。

我没看明白版主还有什么意思?

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 05:05 , Processed in 0.043837 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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