ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 奇怪的发现lookup 0分法的规率(学习与讨论)

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-11 10:15 | 显示全部楼层
jsxjd 发表于 2013-8-11 09:47
C列公式的用法,违反了参数约定:
要点  数组中的数值必须按升序排序:...、-2、-1、0、1、2、...、A-Z、FAL ...

我明白你的意思,但此函数有其它用法,比如[lookup(2,]这种二分法,可以处理乱顺数据,
我说的也是此类问题
如果一定要升序排序的话,那么=-LOOKUP(,-LEFT(A1,ROW($1:16)))为什么可以返回正确结果咧?(附件1中白色部分参数都可以返回正确结果)

TA的精华主题

TA的得分主题

发表于 2013-8-11 10:28 | 显示全部楼层
笑着...两年过去 发表于 2013-8-11 10:15
我明白你的意思,但此函数有其它用法,比如[lookup(2,]这种二分法,可以处理乱顺数据,
我说的也是此类问 ...

16: 8(无效),4(12无效) 正好定位到 -0.22 ,-0.22<0,应该继续向后搜索,但后面是无效数据,所以返回 -0.22
违反规则,是有代价的,结果具有不稳定性。

TA的精华主题

TA的得分主题

发表于 2013-8-11 10:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
笑着...两年过去 发表于 2013-8-11 10:15
我明白你的意思,但此函数有其它用法,比如[lookup(2,]这种二分法,可以处理乱顺数据,
我说的也是此类问 ...

具体结果取决于 lookup 的算法。返回0的情况,应该是两分过程正好定位到了 1、2(该两位置是0),由于完全相等,不再继续搜索匹配。

TA的精华主题

TA的得分主题

发表于 2013-8-11 10:37 | 显示全部楼层
本帖最后由 jsxjd 于 2013-8-11 10:40 编辑
笑着...两年过去 发表于 2013-8-11 10:15
我明白你的意思,但此函数有其它用法,比如[lookup(2,]这种二分法,可以处理乱顺数据,
我说的也是此类问 ...


楼主可能没注意到,
楼主的示例公式为:=LOOKUP(2,-1/LEFT(A16,ROW($1:19)),LEFT(A16,ROW($1:19)))
其中的 -1/LEFT(A16,ROW($1:19))  在示例中有效数据是按升序排列的。
以下公式会返回什么呢?
=LOOKUP(2,{1,3,5,2,6})
=LOOKUP(2,{4,2,5,6})

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-11 10:46 | 显示全部楼层
jsxjd 发表于 2013-8-11 10:31
具体结果取决于 lookup 的算法。返回0的情况,应该是两分过程正好定位到了 1、2(该两位置是0),由于完全 ...

你说的两分过程是个啥意思咧?0.22元,left(1:19)得出来的是{0;0;-0.2;-0.22;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},和left(1:19)算出来的比参数为18时多2个#VALUE!,两分的话,右边不看只看左边了,左边你再分也不会是0啊
这个应该不算是二分法,或许有其他解释,我学识太浅,解释不了啊

TA的精华主题

TA的得分主题

发表于 2013-8-11 10:51 | 显示全部楼层
本帖最后由 wangjguo44 于 2013-8-11 10:55 编辑

我在学习有关lookup帖子的时候,记得一位大师(忘了是谁)提醒过,在含有错误信息的查找需要的东西,务必注意,查找值一定要大于查找范围里的可能的最大数,这可能是他研究二分法的结果、或者实践中得到的教训吧
本例中=-LOOKUP(,-LEFT(A3,ROW($1:6)))查找值是0(省略了写出来),而-LEFT(A3,ROW($1:6))也含有0,没有达到查找值一定要大于查找范围里的可能的最大数的要求,如果改成=-LOOKUP(1,-LEFT(A3,ROW($1:6)))就没问题了。
至于原理,不好意思,我也不明白,是不是lookup二分法时,其内部并不是把“错误信息”当作“错误”而绕过去,而也是作为某一种数来处理?(从二进制01角度来看,可能所有的字符都和“数”有关吧)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-11 10:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jsxjd 发表于 2013-8-11 10:37
楼主可能没注意到,
楼主的示例公式为:=LOOKUP(2,-1/LEFT(A16,ROW($1:19)),LEFT(A16,ROW($1:19)))
其 ...

不大明白你的意思,
好吧,是我理解能力不够好,我可以理解成:直接给你两个结果 or 把大师们分析的二分法演算过程搬过来咧?

TA的精华主题

TA的得分主题

发表于 2013-8-11 11:06 | 显示全部楼层
jsxjd 发表于 2013-8-11 09:47
C列公式的用法,违反了参数约定:
要点  数组中的数值必须按升序排序:...、-2、-1、0、1、2、...、A-Z、FAL ...

在lookup的规范里(帮助里也写得明明白白)数值必须按升序排列,但是在实践中有两点是帮助中没有提到的例外:
1、当查找值大于查找范围里所有数时,它将返回范围里最后一个数(即使乱序);
2、当查找范围里含有错误信息,它将返回范围里小于等于查找值的最后一个数。(从今天的笑着老师的帖子看,这个“等于”不能用)

点评

js哥说的对,发现这个东西的时候,我都不知道怎么描述它,只能点滴说说,嘿嘿  发表于 2013-8-11 11:14
您折煞我了,后生小辈可担待不起老师称谓,您用EXCEL的时候我还没出世,叫我笑笑就可以了。  发表于 2013-8-11 11:11
有的中文文档是三脚猫翻译的,会有很多问题。  发表于 2013-8-11 11:09

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-11 11:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wangjguo44 发表于 2013-8-11 11:06
在lookup的规范里(帮助里也写得明明白白)数值必须按升序排列,但是在实践中有两点是帮助中没有提到的例 ...

  以前看lookup二分法的时候,大师们也提到过参数1和2比较可靠,0是不稳定的。发帖目的只为更好的理解lookup函数

TA的精华主题

TA的得分主题

发表于 2013-8-11 11:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-5 17:16 , Processed in 0.055724 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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