首页 > 其他分享 >面试第一题,垂直匹配--vlookup和它的嵌套

面试第一题,垂直匹配--vlookup和它的嵌套

时间:2024-06-13 16:31:31浏览次数:9  
标签:单元格 匹配 函数 -- vlookup 嵌套 查找 参数

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

相关文章

  • c 语言之 Duff’s Device
    c语言之Duff’sDevice介绍实现原理例子优点缺点现代使用介绍Duff’sdevice是一种优化循环展开技术,用于提高数据复制或处理的效率。它通过将循环展开和switch-case语句结合在一起,减少了循环控制的开销。这个技术由TomDuff在1983年首次提出,用于在C语言中......
  • 一千题,No.0060(划拳)
    划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请......
  • supOS平台对象模型介绍
    系统的对象模型有对象模板、对象实例和功能集合,对象模型包含基础信息、属性、服务、事件和订阅的基本功能。1、基础信息基础信息主要是描述对象模型的名称、别名、继承的模板(功能集合不继承模板)、功能集合以及详细描述等。对象和属性的操作基于别名,对象别名是全局唯一的;在不......
  • springboot SSM 宠物医院管理系统(源码+论文)
    绪论1.1计算机管理信息系统的发展情况1958年美国首先提出了“管理信息系统”(即MIS:ManagementInformationSystems),从而也引出了另外一个概念——“管理信息系统”。综合其多种定义以及根据在实际中的应用,管理信息系统可以定义为是一个由人、计算机系统等组成的,能进行......
  • 亏钱、踩坑总结的经验之47:带炒股
    小a听朋友说炒股赚钱了,心动了,但是自己不懂,朋友说自己也不懂,但是他有老师,老师说怎么买就怎么买。小a被朋友拉进群,所有人都在鼓吹老师的好,听得久了小a也就信了,于是跟着别人开户买股票。恰逢牛市,小赚几笔。心里开始膨胀不断加仓,熊市来临,最终倾家荡产,朋友也悄悄的把他拉黑跑路了......
  • 对不起来晚了,让你们受苦了!
    故事先看个现代版扁鹊见蔡桓公故事:如何降低灾难的发生,首先是防止潘多拉盒子的打开,再而让潘多拉这个盒子不存在,再再而抹去潘多拉这个词;而不是更快方式捕捉潘多拉盒里出来魔咒!ShortcutusedinApiHugIDEAplugin-ApiHugApiHugIDEApluginhowtouseshortcuts......
  • 【Android面试八股文】为什么Android中要设计为只能在UI线程中去更新UI?Android中子线
    文章目录一、Android为什么不能在子线程更新UI?二、为什么Android中要设计为只能在UI线程中去更新UI?三、如果不在UI线程中更新UI,可能会出现什么问题呢?四、ViewRootImp是在onActivityCreated方法后面创建的吗?五、为什么一开始在Activity的onCreate方法中创建一个子线程访问......
  • 淘宝天猫sku实时监控
    淘宝天猫sku实时监控可以通过以下步骤实现:获取需要监控的商品的SKUID。使用数据抓取工具(如Python的requests库)发送网络请求,获取商品的实时数据。解析返回的数据,提取所需的信息,如商品价格、库存数量等。将提取到的数据与预设的阈值进行比较,如果符合条件,发送提醒信息。设置定时......
  • 【Android面试八股文】我们来聊一聊IdelHandler吧,IdelHandler能干什么?怎么使用?有什么
    文章目录一、简单说说Handler机制二、IdleHandler是什么?怎么用?三、什么时候出现空闲时间可以执行IdleHandler四、IdleHander是如何保证不进入死循环的?五、你知道在Framework中如何使用IdleHander?六、一些其他面试问题Handler机制算是Android基本功,面试......
  • 数据库 android 数据库软件
    Access数据库    Access数据库被集成在Office办公软件中,是世界上最流行的桌面数据库管理系统。Access是一种功能强大且使用方便的关系型数据库管理系统,一般也称关系型数据库管理软件。它可运行于各种MicrosoftWindows系统环境中,由于它继承了Windows的特性,不仅易于使用,而......