Excel 中 VLOOKUP() 函数小结

应用场景:

数据仓库上游源系统的数据库表变更,现在需要拆分一部分数据出来,单独放到一张新表中。假设原表为A,新表为B,B表和A表结构大部分一样,只有字段的前缀不同,那么我们如何找出到底有哪些字段不同呢?显然,如果A表只有10个字段,B表少了2个字段,那么我们很容易找出来,用眼睛看就行了。如果A表有200个字段,B表有195个字段,那怎么办呢?

思路:现在,现在用眼睛看是不行的。我们可以这样做,通过主键字段来进行查找(主键先进行预处理,截取前缀后面的部分),使用VLOOKUP来找出每个字段的不同。那么,VLOOKUP如何使用呢?这就触及到我的知识盲区了。作为一个几乎近10年不用Excel的程序猿,作为一个8年的JAVA程序猿,算了不吐槽了.....    翻一翻我自己的技术栈,劳资现在竟然在搞数据仓库,你能信?

基础一:利用VLOOKUP函数返回班级名称

现在我举个栗子:利用VLOOKUP函数返回班级名称。

假设红色方框中部分(I1~I12)原先无值,我们如何批量的从左侧部分(A1~D12)通过学号来补全这部分呢?

可以这样做:先用VLOOKUP求出I1的值,然后往下拖动复制,这样就能补全全部的值了。那么,如何先补全I1的值呢?

1. 选中I1,输入=VLOOKUP,Excel会自动提示,如图所示:

2. VLOOKUP参数:lookup_value 表示用哪部分查找、table_array表示查找的区域(我们可以理解为一个二维数组)、

                                col_index_num要查找的信息在二维数组水平偏移量(就是在这个数组中那一列),最后一列可以自己看提示(近似还是精确)

3.该例子中,最后的输入是:

猛一看,好像是对的,但是你向下拖动复制的时候,看看结果:

看一看,是不是有很多没有找到?原因在哪?我们看看I5的函数表达式,A5:D16?什么鬼?是不是Excel太自作聪明了.... 看来我们要给它限定死区域才行。看看这样写:

这次我们用了绝对地址,用$符给限定死,F5是可以根据选中行的不同自动累加,但是$A$1:$D$12就不会再变了,我们会一直在这个区域查找。所以,现在用VLOOKUP找到I1后,我们直接往下拖动复制就可以了。

基础二:利用vlookup返回多列数据

如果我们现在只有学号,我要补全姓名、性别、班级呢?

聪明的你可能会觉得这很简单,我重复写3次vlookup不就行了吗?恩,你很聪明,那么如果我有100个属性都要补全你,所以你准备写100次?有没有觉得自己智障?

如何才能不做智障?顺便地,我们把题目再复杂化一下:

我们看看规律VLOOKUP($F14,$B$1:$E$12,COLUMN(C1)-1,FALSE)。

column()函数返回列数,但是函数要的不是这个,要的是在二维数组中水平偏移量,所以减1才是偏移量(第二列);

剩下的应该不用说了吧,自己体会~~~

展望:

下一次介绍Excel中的字符串截取。

 

posted on 2018-09-24 23:59  一生不可自决  阅读(2884)  评论(0编辑  收藏  举报

导航