ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] LOOKUP精确查找重复"0"值时的规律?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-10-8 22:25 | 显示全部楼层 |阅读模式
对lookup的二分法查找一直有些疑问,像下面的公式:
=LOOKUP(0,{0;#DIV/0!;0;0;0;0;#DIV/0!;0},{1;2;3;4;5;6;7;8})
这个结果为什么等于6呢?

lookup不是默认升序(不管有没有排序),以二分法来定位查找区域吗,  并且还忽略错误值,  那么应该是在{0;0;0;0;0;0}这6个按升序排列的0值(可以按升序对待吧?)进行二分法查找,

如果这样的话,应该是从中间的第4或第5个0值来定位,查找的值又是0值,属于精确查找   那么最后的结果应该是4或5,不应该是6啊?

就算是查找相同值中最后一个的话也不对啊,应该是8,怎么也不可能是6?

这个二分法到底是怎么二分的? 搞糊涂了,坛子里的高手云集,有谁能解释一下呢 谢谢~

TA的精华主题

TA的得分主题

发表于 2013-10-8 22:37 | 显示全部楼层
參見
http://club.excelhome.net/thread-509072-1-1.html
中的流程圖(原圖好像是出自 http://club.excelhome.net/thread-113915-1-1.html的某處)
當LOOKUP找到符合的時候,會往後找同樣符合的,直到最後一個符合
因此第一次就找到位置4的0,接下來會往後找,位置5也是0,位置6也是0,位置7就不是零
因此返回最後一個符合的(也就是位置6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-8 22:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Bodhidharma 发表于 2013-10-8 22:37
參見
http://club.excelhome.net/thread-509072-1-1.html
中的流程圖(原圖好像是出自 http://club.excelh ...

不是找到符合的值就停下来吗?怎么还会继续向后找?
还有,lookup不是忽略错误值吗,位置7是错误值,应该忽略掉继续向后找到最后位置的0啊

点评

楼主,将前面的0改为1试试结果,或者再将查找值中的0全部改为-1试试  发表于 2013-10-8 22:48
楼主,将前面的0改为1试试结果,或者再将查找值中的0全部-1试试,看看结果  发表于 2013-10-8 22:47

TA的精华主题

TA的得分主题

发表于 2013-10-8 22:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tshaer 发表于 2013-10-8 22:43
不是找到符合的值就停下来吗?怎么还会继续向后找?
还有,lookup不是忽略错误值吗,位置7是错误值,应该忽略 ...

呃…請好好研究一下流程圖,這個有點複雜,不要太快下定論

LOOKUP.jpg



TA的精华主题

TA的得分主题

发表于 2013-10-8 22:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你的这个用法本来就有问题,应该是
=LOOKUP(1,{0;#DIV/0!;0;0;0;0;#DIV/0!;0},{1;2;3;4;5;6;7;8})

TA的精华主题

TA的得分主题

发表于 2013-10-8 22:51 | 显示全部楼层
本帖最后由 Bodhidharma 于 2013-10-8 22:57 编辑
Bodhidharma 发表于 2013-10-8 22:46
呃…請好好研究一下流程圖,這個有點複雜,不要太快下定論

大致說明一下流程:
一開始left=1,right=8,往下
往下posi=int((1+8)/2)=4,往下
type都是數字,繼續往下
A(posi)=0,X也=0,再往下
posi(4)<right(8),在往下
A(posi+1)=A(5)=0(X),再往下
posi=posi+1=4+1=5,繞一圈
之後會再繞一圈,posi=6
此時A(posi+1)=A(7)=錯誤值<>0
因此返回A(posi)=A(6)=6
補充說明:找到就停下來,是精確查找的行為,LOOKUP是模糊查找,不是這樣運作的
另外所謂的「忽略錯誤值」並不是直接將錯誤值刪掉重新排序,而是上面流程圖中紅色的部分,是一個複雜的過程…

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-8 23:37 | 显示全部楼层
Bodhidharma 发表于 2013-10-8 22:46
呃…請好好研究一下流程圖,這個有點複雜,不要太快下定論

哦 这个真的是好难理解...
还在慢慢啃,希望能弄懂 呵呵
谢谢提供这个函数的详解帖子~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-8 23:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mautour 发表于 2013-10-8 22:50
你的这个用法本来就有问题,应该是
=LOOKUP(1,{0;#DIV/0!;0;0;0;0;#DIV/0!;0},{1;2;3;4;5;6;7;8})

哦 我知道是不应该这样用的,不过我是想弄清楚当是0值时lookup的查找规律

TA的精华主题

TA的得分主题

发表于 2013-10-9 08:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tshaer 发表于 2013-10-8 23:38
哦 我知道是不应该这样用的,不过我是想弄清楚当是0值时lookup的查找规律

http://club.excelhome.net/thread-1045038-2-1.html,看看这个帖子,希望能对你有点帮组

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-9 09:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
人贵于自省 发表于 2013-10-9 08:45
http://club.excelhome.net/thread-1045038-2-1.html,看看这个帖子,希望能对你有点帮组

看帖子有点糊涂了..
现在对于当二分法进行到最后时  能否用个简单的例子说明一下?
比如这个例子:
=LOOKUP(3,{1;1;7},{"a";"b";"c"})
按照二分法的话,应该比较3与中间值1   3>1,所以应该向右找,那就是7,可是7>3找不到小于等于3的值  , 那么结果应该是#N/A
可是运算结果为什么是"b"?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 23:46 , Processed in 0.050907 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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