ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

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

用lookup快一点,还是match快一点呢??

TA的精华主题

TA的得分主题

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

所求结果不同,不好比,不过这两个都够快的。

TA的精华主题

TA的得分主题

发表于 2005-7-19 21:45 | 显示全部楼层

本人初学EXCEL,版主能不能讲具体点,原理是什么?谢谢。

TA的精华主题

TA的得分主题

发表于 2005-7-19 22:34 | 显示全部楼层
=MATCH(2,1/(A1:IU1<>""))

除法运算的时候存在小数点精度问题,所有常比正确值要小一些。

请apolloh版主指教

={A1:IU1<>""}

得到的是一个真或假,0或1的一个数组。

当用1除以这个0或1的数组我就搞不懂是什么意思了,1/1答案是1,1/0无意义。

“除法运算的时候存在小数点精度问题,所有常比正确值要小一些。”这句话的意思是不是用1/1时其实答案是一个非常接近1的一个小数,而当1/0时的答案是一个非常接近0的负小数?

即使是这样,那么1/1的答案也应该都是一样的,而match()函数省略第三个参数match_type时默认为1,按帮助中的解释为:"如果 match_type 为 1,函数 MATCH 查找小于或等于 lookup_value 的最大数值。Lookup_array 必须按升序排列:...、-2、-1、0、1、2、...、A-Z、FALSE、TRUE。"

那么这样的话,找到的应该是第一个非空的单元格啊,为什么会找到最后一个呢?

请版主指教!

[此贴子已经被作者于2005-7-19 22:37:18编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-19 22:56 | 显示全部楼层

TO lbpp:

因为前面没有完全符合查找的数值2,所以公式必须继续查找,而该函数必须按升序排列,所以就默认最后一个数值是最符合条件了(个人想法,仅供参考)。

=LOOKUP(1,0/(1:1<>""),COLUMN(1:1))

就不用按三键了。

TA的精华主题

TA的得分主题

发表于 2005-7-20 09:29 | 显示全部楼层

match第三个参数省略或1时和lookup具有相同的查找原理

不论数据是否排序,其查找目标是,最后一个小于或等于查找值的那一个元素。

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

在乱序的情况下,比如此例

=MATCH(2,1/(1:1<>""))

如果单元格不为空,1/ture=1,如果单元格为1/false=#div!0,

首先match在查找时忽略与第一个参数不同数据类型的数值,也就是说错误值被排除在外

那么此时的所有数据都是1,当然只有最后一个1能满足定义“最后一个且小于等于查找值的那一个元素”

再如lookup(1000,A:A), 如果,它找到的是A列中最后一个小于等于1000的数,对于不是最后一个或大于1000的数就不会是其的计算结果了。

[此贴子已经被作者于2005-7-20 9:31:46编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-20 09:38 | 显示全部楼层
以下是引用apolloh在2005-7-6 12:58:58的发言:

是除法的小数点浮点问题

=MATCH(1,0/(A1:IU1<>"")) 这样就行了,只用比match的第一个参数只要比被除数大1就不会出错了。

现在看来不是这个原因了,因为就算小了match也应该再往下找找到最后一个才是。具体什么原因第一个参数需要大些,目前还弄不明白。

TA的精华主题

TA的得分主题

发表于 2005-7-20 10:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
呵呵,你没理解我的意思!

TA的精华主题

TA的得分主题

发表于 2005-7-20 10:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-7-20 10:49 | 显示全部楼层

嗯,我弄明白你的意思了,谢谢!

不过还有不对的情况

在查找近似值,且在第一个等于查找值的值之后有比其值大的值的情况,match和lookup是先找第一个等于查找值的值,如果没有的话再找最后一个小于查找值的值。

如果第一个等于查找值之后,没有比其大的值,则返回最后一个值。

情况还是很复杂,很难找出绝对的规律。

如果不是这样,而按你的说法,30楼找到的是第一值不为空的单元格。

[此贴子已经被作者于2005-7-20 11:09:55编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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