vlookup函数
在讲我的面试第一题之前,我先说说这个经典的查找函数。
我以这个虚拟例子举例,左边的是源数据。第一列是编号,第二列是姓名。每一个编号对应着一个姓名,而且编号是1-8的顺序。
现在我们需要将右边补全,但是编号是乱序的。如果一个个找也不是不可以,但是数据量太多的话就晕了。这个时候,就要有请我们的经典查找函数--vlookup登场了O(∩_∩)O
讲这个函数前我要先插一嘴,就是使用excel进行函数操作,需要在单元格前输入等于号(=),否则的话你只是在单元格中输入英文单词,没什么卵用^_^。
而且,输入“=”,“vlookup”,“()”这些,是需要使用英文字符的噢。
那么现在开始讲这个函数的参数,这个vlookup有4个参数--查找值、数据表、列序数、匹配条件。(ps:什么叫函数的参数,可以自行百度噢,好好学习,天天向上)。先把单元格I2的函数填出来,再下拉填充就可以了。
首先是查找值
所谓查找值,就是通过这个值来匹配对应结果值的单元格。在这里就是H2
其次是数据表。
我们需要根据数据表,通过查找值来匹配对应的结果。在这里可以用两种表示方式。
第一种
第二种
聪明的你想必已经看出两者的不同了,在这里我卖个关子,后面会说明的。
关于数据表这个参数,我要穿插一嘴。就是说,我们需要根据编号来查找出每个对应的姓名。那么在数据表参数中,原始的编号必须在最左列。
比如像下面这样就不行
然后是列序数
我们根据编号匹配姓名,在源数据中。编号是第一列,姓名是第二列。所以列序数就是2。
那么如果姓名是在源数据的第3列,列序数就是3了(如下图)
最后是匹配条件
这个参数有两种,第一种是精准匹配--填到单元格里的就是0或false;第二种是近似匹配--填到单元格里的就是1或true。
大部分的时候这个参数填0,我在一本关于excel的书籍上看到过填1的一种情况--根据不同的数值进行分类,这里就不展开了。大部分的时候我们匹配肯定都是精确匹配呀,所以无特殊情况,填0就完事了!
函数的参数都填完了以后,就按enter键,结果就出来了
编号6对应的姓名是黑豹,歪瑞谷德。
已有公式函数的单元格,双击该单元格的右下角小方快就可以自动填充了(或者是下拉这个小方格)
点击过后你会发现。。。。。。
啊啊啊,为什么会#N/A这个东西!!!
那么出现这个符号的时候,说明编号2,1,4没有查找到,失败了!
至于说为什么会这样,你还记得我在前面数据表部分说的两种数据表选择的方式不同吗。这就是我之前埋的雷,现在我要开始排雷了:
锁
在excel中,锁的运用非常重要。在我接下来的篇幅和接下来的文章中,会经常运用到这个锁。
那么什么是锁?所谓锁,在excel中就是刀。诶啊呀,师爷真是装糊涂的高手。把dollar,说成了刀!
,喏,锁在excel中就长这样,妥妥的美元啊^_^
锁用在公式函数中,可以锁单元格的行,也可以锁单元格的列,也可以既锁行又锁列。
,,
单元格拖拽右下角的小方格会使行或列变化
若是往下拉,n2变n3;往左拉,n2变m2;往右拉,n2变o2。然而,一旦把n锁住(=$n2),那么无论怎么拉n列都是不变的,行如果变的话2也会变;一旦把2锁住(=n$2),那么无论怎么拉2行都是不变的,列如果变了的话n也会跟着变;把n2整个锁住(=$n$2),无论如何拉拽,n2永远都是n2了。
因此,回到刚刚的结果
在这里,我们需要把数据表A1:B9全部锁住--$A$1:$B$9。这样才能保证j列的结果在下拉的时候数据表这个参数是不变的。
最后的结果也就能出来了
还记得,上面我说过数据表这个参数的另一种方法吗
在这里,我比较推荐使用A:B列来替代$a$1:$b$9。因为垂直匹配的话用列来表示数据源首先方便,其次,不用上锁。
那么到此,vlookup我是讲完了。看到这里也许你会觉得我很啰嗦,包括这个参数包括这个锁。但是我回忆以前中学的时候,信息老师跟我们讲这个excel,我总是搞不清楚这些问题。也许刚刚接触excel总会有各种遗漏,但是慢慢地也就好了。
思考
最后给个思考题启发一下读者,上面我讲过源数据这个参数必须把查找值那一列放在最左面。但如果我们想要进行逆向查找该怎么办呢?比如下面,我们想通过姓名来查找编号,如何做到?
答:方法其实有多种方法,但是我现在先不写了。我将在后续的某个章节给出不同做法。
面试题1--快速匹配一整张表
那么接下来,我将开始讲讲我面试时的第一道题。
保护隐私,我把题目虚拟化了,但是形式都是一样的。通过左边的源数据,匹配出右边的表。可以使用vlookup,但是你会发现这里存在多列,如果每一列都使用一次函数真的会让人会疲惫。如果列数很多,这么干就不现实了。那么有没有在一个单元格使用函数,然后直接拉右下角的小方格就能解决的方法呢?
答案是有的。答案就是vlookup函数和match函数的嵌套。
嵌套
什么是嵌套?简单地说,就是一个函数是另一函数的参数,这就叫函数的嵌套。
match函数
在讲这道面试题之前,我先讲match函数的用法。
match函数是一种定位函数,使用该函数可以知道查找值在查找区域中的位置。而这个查找区域可以是行,也可以是列。
例如:查找数字4,在1-5这一行的位置
第一个参数不必多说,就是数字4所在的单元格。第二个参数就是数字1-5这一行的单元格。最后一个参数又是匹配类型,直接填0就行。不要问我为什么,因为我也不知道(不是)。可以看到,数字4在A1:E1这段单元格中排在第4个,因此答案就是4
再例如:查找4,在1-6这一列中的位置。
也是一样的,数字4在1-6这一列中排在第4个位置
面试题
有了vlookup和match这两个函数,我们就可以使用嵌套手法来做第一道面试题了。
也许你现在还没想到,如何将vlookup和match函数结合。但是没关系,谁也不是一开始就会的。
我们来看k2列,如果我们在这输入一个函数,然后拉到最右面,再往下填充就能匹配出一整个表格了。那有了这个思路,我们如何使用vlookup?在k列我们其实照搬文章开头的公式,就可以匹配出来了,但是现在又需要我们往右填充。
聪明如你是否想到什么了?是的,就是列序数这个参数。从上往下匹配列数不变、行数变,从左往右行数不变、列数变。行数的变化其实无所谓啦,因为前面都是这样过来的。那么列数的变化呢?仔细看看,k-o列,每一列第一行的单元格在a1:f1中的定位和vlookup中列序数这个参数,完全是可以相等的嘛。
比如说武力值那一列,=vlookup(j2,A:F,3,0)。列序数3,是不是就是L1单元格--武力值在A1:F1中的定位,也就是3!
有了这个思路,我们就可以把vlookup函数中列序数这个参数使用match函数嵌套。这样的话在一个单元格的函数公式完成后,我们在答案区域无论如何拉动小方块,数据都会从源数据区域匹配出来。
理论成立,开始实践:
第一个函数也就完成了,接下来我们来分析这个函数
=VLOOKUP(J2,A:F,MATCH(K1,A1:F1,0),0)
源数据A:F没问题,通过j2来匹配没问题,匹配模式为0这说都不用说^_^。重点在于第3个参数,使用match函数的定位来替代数字,这是为了从左往右匹配的时候列序数跟着变动。这个match函数就是姓名在a1:f1中的位置了,也就是2。那么实际上这个函数的效果跟
=VLOOKUP(J2,A:F,2,0)是一样的了,但是需要能任意滑动。
当然现在还不能,如果你问我为什么的话,我会回答一个字--锁
没错,就是锁。如果函数中有些地方不上锁,那么又会出现本章第一部分出现的情况了。
所以把锁添加在=VLOOKUP(J2,A:F,MATCH(K1,A1:F1,0),0)中就完美了。
那么我们一起来分析一下吧!我们遇到上锁问题时如何选择在哪个参数上上锁?我用一句话来概括-----在脑海中上下左右地拉动右下角这个小方格,想象出那些参数变,哪些参数不变。
下面来具体分析:
那么我们第一个函数就是在k2这个单元格中,我们先不往右拉,先往下拉,看看会发生什么情况。
k3的公式就会变成,1、2、4,参数都没毛病,第3个参数出了问题。往下填充的时候我们是希望序列数不变的。所以可单独看MATCH(K1,A1:F1,0)。我们发现match函数中的查找区域应该是固定不变的,因此A1:F1全部上锁。而k1这个参数,行数应该是不变的--我们需要知道编号对应的姓名,而列数是要变化的--需要往右填充。
因此现在的公式变为了=VLOOKUP(J2,A:F,MATCH(K$1,$A$1:$F$1,0),0)
现在我们在往右填充,L3单元格的公式则为=VLOOKUP(K2,B:G,MATCH(L$1,$A$1:$F$1,0),0),那我们看看这个函数,3、4参数没毛病。
坏就坏在整体函数前面的,k2。我们需要通过编号来匹配信息,所以发现j列应该是不变的。因此,k2的公式应该为=VLOOKUP($J2,A:F,MATCH(K$1,$A$1:$F$1,0),0)
有一点我忘了说了,其实在一开始的时候我们就需要将源数据上锁(往水平方向填充会改变列),因为源数据是无论如何不会变的。
综上,最终的公式应为=VLOOKUP($J2,$A:$F,MATCH(K$1,$A$1:$F$1,0),0)
往右拉
向下填充
稍微检查一下发现没毛病,perfect!
末尾
重复
最后,再来做做实验
如果源数据中出现了3个同样的编号3、3、3,而这3个编号对应的姓名不同,郭靖、杨过、钢铁侠。那么在匹配多个3的时候,结果会是怎样?
答案是匹配到的对象是第一个编号3对应的姓名--也就是郭靖。
列序数
假设现在要匹配,但是有很多列比如大于30,如何在不使用match函数的情况下定位它的列序数(总不能一个个数吧,bullshit!)
在vlookup函数中选中列的时候会自动跳出它的列序数,这也是为什么根据哪列查找,哪列就应该放在最左边的原因--
标签:单元格,匹配,函数,--,vlookup,嵌套,查找,参数 From: https://blog.csdn.net/rose__one/article/details/139648199