ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 函数与公式 > VLOOKUP 使用详解

VLOOKUP 使用详解

作者:绿色风 分类: 时间:2022-08-18 浏览:104
楼主
opelwang
VLOOKUP 函数是查找数据中是使用最广泛的一个函数,现将其基本用法,进阶学习,高级使用整理一下。
供新手学习使用。

    
vlookup函数详解22.rar
2楼
opelwang
 针对VLOOKUP函数中第四个参数:1不能省略,0才可以省略,但返回的不是精确值,而是匹配值.
 但教材中有一个1和-1参数,相信大家很少用了吧,这里作个简单的说明:

1.当要查找的值列有两个或以上对应的数值时,按升序排列,1作为第四个参数,取最大值,如图:

   
 

2.当要查找的值列有两个或以上对应的数值时,按降序排列,-1作为第四个参数,取最小值如图:


   
 

   我是在实践中偶然一次发现通过排序能取最大或最小值的特点,现与大家分享.
   如有疑问,欢迎跟贴讨论!
3楼
gouweicao78
【更正】:一般来说,省略是指第4参数连同其前面的逗号都不写的情况,比如:VLOOKUP(C1,A:B,2)就是VLOOKUP(C1,A:B,2,1)的省略写法。
因此,1是可以省略的,而0则不可以省略,只能简写:VLOOKUP(C1,A:B,2,)就是VLOOKUP(C1,A:B,2,0)的简写方法。

例子中用了较多shangyu版主原有的东西,不过,有一个创新很不错:-1的用法

我也曾说过shangyu的VLOOKUP入门确实很经典,很难超越。
4楼
opelwang
感谢gouweicao78

-1与1的用法是在实践中得来的,其实这个函数教程确实是用了部分他人的例子,不过目的不在此.

目的在于是将这个函数的用法与精髓整理到一起,供新手学习,高手在一起相互讨论.

请大家不要误解.
5楼
breezy
做得不错,不过<实例>表中好像有一个EH的图片LOGO哦,建议去掉.
6楼
opelwang
感谢提醒,已经去掉.在一楼更新.
7楼
gouweicao78
不好意思,要再次更正了:
-1的用法,并非opel-wong兄所言的那样。呵呵。
8楼
opelwang
愿闻其详,可否上传个实例来证明.
9楼
apolloh
关于-1和1的说法应该只是个特例,可以用下面这组数据测试一下,查找B对应的值

B        45
B        543
C        345
D        3534
B        4534
E        4
10楼
opelwang
 关于-1作为最后一个参数,排序后返回最小值已经被gouweicao78  版主推翻,不成立.
 
 给大家造成的困扰,在这里说声抱歉!

 关于1作为最后一个参数,排序后返回最大值,我个人测试成立.如附件,请大家给予测试.谢谢!

  
Book1.rar
11楼
apolloh
1的说法,也不成立。请测试下面的数据。不过你的钻研精神值得鼓励。继续努力!

B        45
B        3453453
C        345
D        3534
B        55
E        4

建议读一下草版的lookup的查找策略,也许会有些启发。
12楼
gouweicao78
更正一下Apolloh的说法,呵呵
:Lookup的查找策略是onkey先写的,对于Lookup的“二分法”查找策略的论证、更正及模拟器才是我写的,之后Willin2000兄又进一步完善了流程图。
对opel-wong兄:
首先,肯定您对函数用法的钻研精神,以及此帖对于更多人员理解VLOOKUP第4参数的借鉴作用,建议加技能分。

其次,对于VLOOKUP的第4参数:
1、VLOOKUP第4参数省略或者为1、TRUE(即近似匹配用法),此函数与LOOKUP的查找策略与LOOKUP相同。
1、根据函数的帮助,本身近似匹配用法要求第2参数table-arry(即被查的数据表)的首列必须升序,否则不能返回正确的数值。原文如下:

  1. 如果 range_lookup 为 TRUE,则 table_array 的第一列中的数值必须按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;否则,函数 VLOOKUP 不能返回正确的数值。如果 range_lookup 为 FALSE,table_array 不必进行排序。


2、对于其首列不是升序的情况,其实近似匹配用法本身就已没有使用的价值。但作为函数原理的深层次探讨,不管其首列是否升序,近似匹配用法都是遵循“二分法”的,根本不管第2列(或VLOOKUP第3参数指定的列)是否排序。

opel-wong兄所提供的2种情况的示例,均是“首列升序”的情况,适用下面这个原则(帮助文件原文)
  1. 如果函数 VLOOKUP 找不到 lookup_value,且 range_lookup 为 TRUE,则使用小于等于 lookup_value 的最大值。


也就是说——生产部、销售部不管多少个,只要升序排列后(生产部<销售部),例子中的lookup_value即VLOOKUP第1参数是“生产部”——A列升序排列后,小于等于lookup_value的最大值也就是最后一个“生产部”所在位置。

因此,B列也升序的话,则最后一个就是你说的“最大值”,降序就是“最小值”,你再试试看B列的数值乱序排列呢,是不是还总返回最后一个“生产部”的值?呵呵!


如果A列不升序排列,比如稍稍打乱一下,生产部仍然放在一起,但A列已经不是升序排列,如图:

 

此时,就不一定能返回最后一个“生产部”对应的记录了,而是遵循“二分法”的原理。

【结论】VLOOKUP函数第4参数,为0、FALSE或简写剩下逗号则精确匹配,返回第一个满足条件的记录,无满足条件者,返回#N/A错误;
为TRUE或非0数值(常用1,也可以用-1,等)或完全省略,则近似匹配,返回结果是根据“二分法”原理运算的。

【参考】关于二分法,可参考:
[原创]Lookup函数二分法模拟器
13楼
林夕瑜
呵呵,学习了
14楼
opelwang
受教了!非常感谢gouweicao78  版主的指正!

看来还需要继续努力,钻研学习。

希望此贴给我带来收益的同时,也让更多人受到启发!
15楼
opelwang
已经更正了一楼的附件。
16楼
ljx63426
这个涵数好实用,但运用中还是不太会用,呵呵!!
17楼
LYG1868lyg
哈哈,学习了!
18楼
windowsxpsp
下载下来,
有些不理解,但照搬倒是用上了
19楼
wuni_cn
急用这贴,感谢版主,辛苦了
20楼
lrlxxqxa
很不错的过程,即使错了也都是有价值的,感谢各位!
21楼
xyh9999
我觉得应该在教程中增加一个说明Table_array 参数可以是数组的例子,比如:
=VLOOKUP("星期五",{"星期一",1;"星期二",2;"星期三",3;"星期四",4;"星期五",5;"星期六",6;"星期日",7;"星期天",7},2,FALSE)  可以返回5
不然大家还以为就只能引用表格中的范围呐.
22楼
chunqueyiyi
嗯,不错蛮好东西。
23楼
cartor
vlookup的1和-1在实际中确实用得很少,今天长见识学习了!
24楼
胜利路动迁
请教:在一个excel里,有一列身份证号码,如果我新建另一个excel,里边同样有一列身份证号码,但新建的这列excel表里有许多身份证号码和第一列excel里的身份证号码相同,如何对这两个excel进行比较,把多出来的这些身份证号找出来?让表格只显示多出来的这些身份证号码。谢谢**
25楼
normdist
提供一个思路,你可以照自己要求改进:
假设原始序列号码是1234,5678,9101,7685(在A1:A4列),新序列号码是1234,5679,9101(在C1:到C3列)。
选择一个三行一列空白范围,输入=isna(match(C1:C3,A1:A4,0))*1,然后Ctrl+Shift+Enter,输出一个三行一列的0-1数列,其中1元素对应和原始序列不相同的号码。
26楼
小宣诳诳
谢谢。分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap