由于众所周知的原因,这几个月心里挺闹腾。俗话说“除了生死之外都是小事”,那我这几个月一直被大事所困,也就没有时间考虑更新公众号这种小事。(吼吼,都是借口)
好了,不扯犊子,今天来说说号称Excel中函数之王的vlookup函数。
前言
之所以今天想说这个,是因为前两天想嘚瑟一下自己的excel的水平,但貌似翻车了,所以就把这货拿出来又复习了一遍。
先来说说我认识这个函数的过程。
话说很久很久以前,那时候刚参加工作,经常会遇到一个很棘手的问题,就是有一组数据表示一些监测设施的监测数据,需要把这些数据转到地图上用来绘制等值线图,但是这些设施的坐标信息存在另外一张excel表或数据库中,那如何把这些坐标信息对应的复制过来呢?
现在的小伙伴看到这个问题可能觉得这也太easy了,根本称不上是问题,但当年我上学的时候计算机普及率不高,另外在学校也没好好学,当时觉得这个问题太难了。如果只有十个八个数据我就Ctrl+F,一个一个查找再Ctrl+C、Ctrl+v就解决了,可是我往往遇到的是几千个数据,OMG。
话说当年咱也是个很要强的同学,自己动手解决了这个问题,而且掌握了至少10种方法来解决这个问题。主要的几种方法是:复制到access等数据库中用select语句、VBA写两个循环、Pyhton中Pandas库中的merge函数、excel中的vlookup函数……
这几种方法各有优缺点,以前很喜欢用VBA,写一个sub(),只要两个循环就能解决这个问题,而且看到数据一条一条拷贝过来的过程,很有成就感。但这种方法其实效率太低了,数据量大的话这个过程就有点慢,后来就用的少了。
vlookup函数就方便多了,只要在单元格中写一个函数,只有四个参数设定好,一下就出来了,再用自动填充,整列数据都搞定了。
vlookup详解
vlookup这个函数在数据查找中可以说是一个名副其实的万能函数,号称excel函数中的万金油。这个函数有很多种打开方式,它既可以正向查找,逆向查找,还可以多条件查找。总之,玩法多多,只有想不到,没有做不到。
语法
=VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])
翻译一下
=VLOOKUP(查找值,数据表,列序数,[匹配条件])
继续翻译
=VLOOKUP(找什么,在哪找,第几列,完全一样还是差不多就行?)
参数解释
第一个参数lookup_value:查找的值。就是前面的那个问题中的有监测数据的表中的监测设施名称;
第二个参数table_array:查阅值所在的区域。就是前面那个问题中包含监测设施坐标数据的数据区域;
第三个参数col_index_num:区域中包含返回值的列号。就是前面问题中坐标数据列在第二个参数选定的区域中的列号;
第四个参数range_lookup(可选):匹配调减。为0时代表精确查找(必须完全一致);为1时代表模糊查找(缺省也默认模糊查找,如果找不到精确匹配值,则返回小于“查找值”的最大数值)。
举个栗子
举个前述问题的缩小版的栗子,如下图:
A~D列是总表数据(脑补一下这里有一眼望不到头的所谓海量数据),H列是需要匹配的设施列表,I~K列是需要从总表中复制过来的信息。
- 复制一列数据
假设只需要复制第I列数据。在I2单元格中输入:"=VLOOKUP(H2,2:15,2,0)”,然后向下填充,这列数据就都复制过来了,如下图:
这里需要注意的是,由于向下填充过程中,查找区域会发生变化,公式中第二个参数需要用“$”把查找区域固定下来。
2.复制多列数据 假设需要同时复制I~K列,共三列数据。
先在I2单元格中输入:=VLOOKUP(AD,这里第一个参数需要用”把列固定下来,另外就是第三个参数不是直接给出列号,而是用COLUMN(B1)代替,就是用一个嵌套的COLUMN函数,动态的查找相对应的列。结果如下图:
好了,小伙伴们,是不是很简单,工作效率是不是又提升了一大截。
Ok,为了心血管的健康,早睡早起!