ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] LOOKUP向量用法帮助文件的确错误(更新并上传附件:对LOOKUP向量用法的简单探讨)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-9-30 21:38 | 显示全部楼层 |阅读模式
本帖最后由 hjj0451 于 2012-2-9 15:29 编辑

未命名.jpg
打开LOOKUP帮助文件,关于其向量形式的描述有(见上图):
LOOKUP(lookup_value,lookup_vector,result_vector)
Lookup_vector    为只包含一行或一列的区域。Lookup_vector 的数值可以为文本、数字或逻辑值。
............
Result_vector    只包含一行或一列的区域,其大小必须与 lookup_vector 相同

在实际使用中,LOOKUP_VALUE和RESULT_VALUE实际可以是:一个为行向量(大小为1*N)、一个为列向量(大小为N*1)
如下式,结果正确为2,第二参数为行向量,第三参数为列向量,我们不能说行向量与列向量大小相同:
  1. =LOOKUP("b",{"a","b","c"},{1;2;3})=2
复制代码
甚至,如此整列引用,一样能返回预想的正确值:
  1. =LOOKUP("B",{"a","b","c"},ROW(A:A))=2
复制代码
在LOOKUP帮助文件的实例中,也没见有一个为行向量一个为列向量的例子,因此帮助文件的“Result_vector    只包含一行或一列的区域,其大小必须与 lookup_vector 相同”是值得商榷的。
另外,借用3楼杏花雨老师的例子:
  1. =LOOKUP("A",{"a","b","c"},{1,2,3,4,5,6})=1
复制代码
,向量个数不同,方向相同。(补:LOOKUP忽略大小写)
  1. =LOOKUP("a",{"a","b","c"},{1;2;3;4;5;6})=1
复制代码
,向量个数不同,方向亦不相同
  1. =LOOKUP("a",{"a","b","c"},{1,2,3;4,5,6})=#N/A
复制代码
,返回错误
  1. =LOOKUP("d",{"a","b","c"},{1,2,3,4,5,6})=3
复制代码
,向量个数不同,方向相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
  1. =LOOKUP("d",{"a","b","c"},{1;2;3;4;5;6})=3
复制代码
,向量个数不同,方向亦不相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
  1. =LOOKUP("e",{"a","b","c"},{1;2;3;4;5;6})=3
复制代码
,向量个数不同,方向亦不相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
再看看,第二个向量是否要升序排列:
  1. =LOOKUP("b",{"f","b","e"},ROW(A:A))=2
复制代码
也不用升序排列,一样能找到b对应的2。
  1. =LOOKUP("f",{"z","b","e","f"},{8;2;3;4;5;7;9;-1;0})=4
复制代码
也不用升序排列,一样能找到f对应的4。
对于下面,大家熟知,返回最后一个:
  1. =LOOKUP("z",{"y","b","e","t","f"},{8;2;3;4;5;7;9;-1;0})=5
复制代码
但是,对于下面的乱序且不满足查找值大于所有被查找值,也许是按”二分法“,却返回了意外的结果:
  1. =LOOKUP("y",{"z","b","e","t","f"},{8;2;3;4;5;7;9;-1;0})=5
复制代码
在第一个向量的个数比第二个小的情况下一样可行:
  1. =LOOKUP(2,ROW(1:3),CHAR(COLUMN(DK:IV)))="t"
复制代码
  1. =LOOKUP(2,ROW(1:3),{"c","v","d","k","o"})="v"
复制代码
  1. =LOOKUP(5,ROW(A1:A3),{"c","v","d","k","o"})="d"
复制代码
第一个向量降序的情况下,也一样:
  1. =LOOKUP(5,7-ROW(A1:A3),{"c","v","d","k","o"})=“v"
复制代码
  1. =LOOKUP(9,7-ROW(A1:A3),{"c","v","d","k","o"})="d"
复制代码
但查找向量( lookup_vector)是一维、结果向量(Result_vector)是二维的话则是不行的:
  1. =LOOKUP(9,7-ROW(A1:A3),{"c","v","d","k","o";"k","n","y","p","y"})=#N/A
复制代码
  1. =LOOKUP(2,{1,2,3},{4,6;5,7;3,4})=#N/A
复制代码
反之,查找向量二维,结果向量一维是可行的:
=LOOKUP(2,{1,2,3;4,5,6},{4,6,5})=6
=LOOKUP(5,{1,2,3;4,5,6},{4,6,5})=5,相当于=LOOKUP(5,{1,2,3},{4,6,5})=5,也就是查找向量自动忽略比结果向量多余的"维",第二行失去功能,然后再象上面那样进行查找。但结果向量维数比查找向量维数多的话,LOOKUP就不知道选取哪个了。

但前面的情况却证明,查找向量与结果向量同维的情况下,LOOKUP允许两者个数不相同,只要在LOOKUP_VECTOR里找到的数在Result_vector里有对应的项即可,而不关心到底谁有几个元素,谁是行还是列。

总结一下,关于LOOKUP(lookup_value,lookup_vector,result_vector):
1. lookup_vector和result_vector允许一个是行(列)向量、一个是列(行)向量,即允许方向不相同;
2. lookup_vector和result_vector允许两个向量个数不相同,只要找到的数有对应值即可返回正确结果;
3. lookup_vector和result_vector不同维,也就是其中有1个不再是向量的时候,有两种情况:
3.1  result_vector为2维且lookup_vector为1维,此时不管找没找到,都返回#N/A.LOOKUP无法辨认是在与Lookup_vector对应的"维"返回,还是在多出的"维"返回;
3.2  result_vector为1维且lookup_vector为2维,此时也能返回正确结果,此时相当于查找向量忽略了比结果向量多的行/列,按向1、2的原则进行查找。
3.3  result_vector为2维且lookup_vector为2维,即两者都不再是向量,此时也符合3.1的情况,返回#N/A
4. 待补充。

5.关于LOOKUP二分法参见http://club.excelhome.net/forum.php?mod=viewthread&tid=113915



看来此帮助文件“Result_vector只包含一行或一列的区域,其大小必须与 lookup_vector 相同”后半段的确是一厢情愿。
从LOOKUP向量用法帮助文件谈LOOKUP向量用法(new).rar (95.38 KB, 下载次数: 215)




评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-9-30 22:16 | 显示全部楼层
老师这样的才算得上是深入研究,严谨的求知精神值得学习。{:soso_e163:}{:soso_e163:}

TA的精华主题

TA的得分主题

发表于 2011-9-30 22:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
也不是很清楚,这个函数一直都是迷迷糊糊
比如
=LOOKUP("e",{"a","b","c"},{1,2,3,4,5,6})

点评

这个发现还是很有意义的,可以改成: =LOOKUP("e",{"a","b","c"},ROW(A:A))  发表于 2011-10-1 11:16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-30 22:51 | 显示全部楼层
本帖最后由 hjj0451 于 2011-10-1 09:18 编辑
杏花雨V翟 发表于 2011-9-30 21:22
也不是很清楚,这个函数一直都是迷迷糊糊
比如
=LOOKUP("e",{"a","b","c"},{1,2,3,4,5,6})

谢谢杏花雨老师补充,让我得到进一步补充。

TA的精华主题

TA的得分主题

发表于 2011-10-1 03:49 | 显示全部楼层
这个问题顶起来,我总感觉lookup函数和text函数-样非常深奥,总是难以清晰理解,所以实际工作中极少使用这两个函数,尤其是lookup函数

TA的精华主题

TA的得分主题

发表于 2011-10-1 09:32 | 显示全部楼层
先占个脚,回头慢慢品偿这道美“味”!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-1 11:03 | 显示全部楼层
本帖最后由 hjj0451 于 2011-10-1 11:08 编辑

有待讨论和各位老师指正及补充。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-1 13:41 | 显示全部楼层
本帖最后由 hjj0451 于 2011-10-3 23:47 编辑

未命名1.jpg
未命名.jpg
从LOOKUP向量用法帮助文件谈LOOKUP向量用法(new).rar (304 Bytes, 下载次数: 63)

TA的精华主题

TA的得分主题

发表于 2011-10-2 18:48 | 显示全部楼层
楼主你发现的Lookup函数的非正规用法现象,确实存在。

但是,不能因此说帮助文件要求:
【Result_vector    只包含一行或一列的区域,其大小必须与 lookup_vector 相同。】

这个要求会是错误的。

因为,按照帮助文件的要求去使用Vlookup函数,才能得到正确的结果。

否则,错误地使用函数即使有时候得到了希望的结果,
但不能或者无法保证每次都得到正确结果的话,

这样去写程序或者编写报表,出了错是要害人的。


TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-2 19:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2011-10-2 17:48
楼主你发现的Lookup函数的非正规用法现象,确实存在。

但是,不能因此说帮助文件要求:

非常感谢老师的指点,你的见解很深刻。
错误或者非常规现象、软件非开发时没有预见的结果,只要为我所用,知其”可以为“和”不可以为“,这也许是使用盗版软件的实用主义用户可以获取的额外使用价值。当然这个帖子还没有到这一程度,只是学习和交流。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-28 23:39 , Processed in 0.056514 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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