ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 关于罗版的 Lookup高级应用 案例的困惑

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-25 09:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:LOOKUP
你看看草版的讲解,在精华里有他的讲解。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-25 09:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhc19620430 发表于 2011-12-25 09:51
这个首先要看 row($1:6),它获取的是一组数组{1,2,3,4,5,6},如果A列数据是10位,如:1234567890,那这个 ...

感谢老师一语点醒梦中人!
您说的这些我都理解,关键是这一句我忽略了,—— LEFT()提取的都是"文本"... ...

TA的精华主题

TA的得分主题

发表于 2011-12-25 12:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2楼解释没错。

TA的精华主题

TA的得分主题

发表于 2011-12-25 13:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 小花鹿 于 2011-12-25 13:47 编辑

我来试着解释一下,不很科学,仅供参考:
-LEFT(A1,ROW(1:6)) 得到的结果是:
{-1;-12;-128;#VALUE!;#VALUE!;#VALUE!}
在这个结果中,数据是按升序排列的,你可能会说,这不是睁眼说瞎话吗?明明是-1大,-12次之,-128最小,怎么是升序排列呢?
呵呵,不要这样想,这只是你的一相情愿而已,你认为是降序排列,这没错,只要学过正负数的都知道是降序排列,可是LOOKUP并不这样认为,它有自己的为人处事原则,这个原则就是它认为第二参数中的一组数据肯定是升序排列的。
当你把上面的这组数据放在LOOKUP的第二参数的位置时:
LOOKUP说:噢,你这组数据是升序排列的,-1最小,-12较大,-128最大。
你说:LOOKUP你瞎啊,明明是-1最大,-12较小,-128最小,你怎么说是升序排列呢?
LOOKUP说:你只要把这组数据放这里,我就认为它是升序排列的。
你说:你傻啊,没眼啊,看不见啊?
LOOKUP说:我就是认为它是升序排列的,你能拿我怎么样?气死你。
你:无语............

既然死心眼的LOOKUP固执已见,我们也没办法,只能按照它的规矩来办。
下面就是查找了,具体的查找过程就是二分法,在这里一两句说不清,有关讨论很多,可以自己研究。
查找值为0,那就用0和上面的数据比较,比较的结果是没有一个是0,而且都比0小,那么在这些都比0小的数据中哪个是最大的呢?你可能会毫不犹豫的说,当然是-1最大了,错,按照LOOKUP的规矩应该是-128最大,因为LOOKUP认为数据是升序排列的,既然升序排列,那么理所当然的应该是排在后面的数要大于排在前面的数,也就是越往后越大,最后一个数最大,所以,小于等于0的最大值应该是-128,而不是-1。

结论:LOOKUP始终把第二参数看成是升序排列的,不管实际的排列顺序是怎样的,小数在前,大数在后,最后一个肯定是最大的,因些,如果我们把第一参数设置的足够大,就一定能够找到第二参数的最后一个值。

点评

虽然这样的设想方法可以方便记忆,但需要说明,真实的原因还是遵循二分法的结果,我在21楼详细解释了一下  发表于 2014-3-13 15:04
解释非常生动,这是一个小技巧,LOOKUP当它是升序的,大家就利用了这个特性,呵呵  发表于 2011-12-26 11:04

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-25 23:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-26 00:17 | 显示全部楼层
=LOOKUP(5,{"zhong",5,0})
=LOOKUP(5,{-110,5,-1000,"abc"})
=LOOKUP(5,{100,5,1000})
只要5的位置不动,其他的随便改,永远返回5,去搜搜二分法的原理啊

TA的精华主题

TA的得分主题

发表于 2011-12-26 01:29 | 显示全部楼层
关于LOOKUP查找原理的理解,可以参考这篇帖子:

菜鸟的LOOKUP查找之二分法顿悟:http://club.excelhome.net/thread-807304-1-1.html

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-26 15:05 | 显示全部楼层
LOOKUP函数是个很实用的函数,但也不是那么容易就掌握的,呵呵

TA的精华主题

TA的得分主题

发表于 2011-12-26 15:15 | 显示全部楼层
小花鹿 发表于 2011-12-25 13:20
我来试着解释一下,不很科学,仅供参考:
-LEFT(A1,ROW(1:6)) 得到的结果是:
{-1;-12;-128;#VALUE!;#VAL ...

解释的太妙了,以前的困惑消除了,呵呵

TA的精华主题

TA的得分主题

发表于 2012-1-9 15:11 | 显示全部楼层
公示写成下面的也行,这是不是更好理解些呢?

=LOOKUP(9E+307,1*LEFT(A2,ROW(INDIRECT("1:"&LEN(A2)))))
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-20 04:04 , Processed in 0.048214 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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