【Lookup从入门到精通,一学就会!】

office应用 徐 自远 574℃

【Lookup从入门到精通,一学就会!】

1479002024-9980-110e00070de3e489fb07

Vlookup和lookup两函数只相差一个字,但境遇却是天壤之别,Vlookup广受欢迎大行其道,lookup却鲜有人问津。之所以出现这样的情况主要是由于 Vlookup函数的易用性及Lookup这个心机婊的小怪癖,导致lookup函数一直被Vlookup函数压制,迟迟不能被大众所接受。其实Lookup函数在很多方面比Vlookup更优秀呢,下面我们将由易到难的讲解lookup函数和它那些经典的瞬间。

  • 入门篇

Lookup是查找引用公式的一种,主要功能是从单行(单列)区域或者从一个数组中查找某个值,并返回相应的值。它有两种用法:

  1. 向量形式:在单行区域或单列区域(称为“向量”)中查找值,然后返回第二个单行区域或单列区域中相同位置的值。
  2. 数组形式;在数组的第一行或第一列中查找指定的值,然后返回数组的最后一行或最后一列中相同位置的值。

下例中我们就分别采用了两种方式来计算排名第3的销售员和销量。

1479002024-3035-111200024e7626409a9d

注意:lookup是个有强迫症的处女座,房子太乱了它是不会认真工作的。所以查找数据区域必须是按升序排列的才能得出正确的结果,如果不按升序排列是得不到正确值的,如果真的得到正确值,那恭喜你可以去买张彩票了。

下图公式没变,只是调整了一下数据行的顺序,就得出莫名其妙的结果,如下:

1479002024-6480-111200024e77309e0289

  • 初级篇

有些同学受不了lookup臭脾气(非要查找数据按升序排列)。觉得这些功能明明用Vlookup就可以实现,为什么要了解lookup函数呢,那是因为lookup函数可以实现一些vlookup实现不了的功能。譬如vlookup没法直接逆序查找(即从右到左的查找)但lookup可以,而且,通过构建一个自定义向量,我们可以实现精确查找。看下面的例子:

1479002024-5260-106b000633809119870d

公式的计算原理如下:我们要找杀敌最多的武将,正常的做法是首先用MAX函数找出最大杀敌数,然后在杀敌数列中查找这个值,然后,返回武将列中对应位置的武将。但是因为杀敌数列中的数据并不是升序排列的,因此,我们没法取得正确值。

这个时候我们就需要做些变通了,我们需要构建一个查找向量,在本例中我们用公式“0/(C3:C14=MAX(C3:C14))”构建一个向量。这个公式的意思是,如果单元格值等于最大值,结果就为TRUE,TRUE作为被除数的时候会被转化为1,这样1/true就等于0,如果单元格值不为最大值,结果就是FALSE,FALSE作为被除数的时候会被转化为0,这样0/false就会显示错误值,这样就构建了一个由0和错误值构成的向量数组,如下:

1479002024-8115-106b0006337f50a1db18

Lookup在向量中查找的时候会忽略掉错误值,这样整个向量中就只有一个0值是有效的,就不存在排序的概念了,我们通过在向量中查找0值,最后找到杀敌最多的武将就是赵云了。

第二个公式的原理也是一样,用公式“0/(C3:C14=1000)/(D3:D14=800)”,创建一个向量,将同时满足杀敌数等于1000,自损数等于800的赋值为0,将不能同时满足条件的赋上错误值,构建一个由0和错误值构成的数组,如下:

1479002024-4258-11130004b91b9c4695ef

最后Lookup会忽略错误值,找到杀敌一千自损八百的武将为吕布。

这两个公式就是lookup函数的典型用法,归纳起来就是“=Lookup(0,0/(条件1)/(条件2)/(条件*),目标区域)”,可以用单条件也可以用多条件。

  • 中级篇

除了可以逆序查找之外,Lookup相比Vlookup有优势的地方是Lookup相比Vlookup查询效率更高,Vlookup查询数据采用遍历法,而lookup采用二分法查询数据。

怎么更解这个呢?譬如说,现在有一个从1-100的数列,要找到100。Vlookup从1开始找一直找到100,找100次;而Lookpu会从数据中间开始找,先找51,51比100小,再接着找75,还是小再找87…,反正就是每次从剩下的数据中间开始找,lookup通过7次就可以找到100。看起来好像也没什么,但是,当你表格里有几百上千个Vlookup函数的时候再看看吧,那是卡的想哭啊。

刚才讲到二分法了,其实利用Lookup函数的二分法,我们可以实现一些特殊的功能哦,例如:

1479002024-8679-1110000685e8b87b6475

公式的计算原理是:座是一个编码较大的字符,当我们输入公式“=Lookup(”座”,A:A)的时候会返回A列最后一个文本,这是因为Lookup是采用二分法查找数据,并且默认数据是按升序排列的,越往后越大。所以,如果查找值大于数据列中的所有数据,Lookup会一直向后查找直到找到最后一个值。

如果要查询一列中最后一个数值是多少,我们可以用公式“=Lookup(2^16,A:A)”,公式原理也是一样,2^16也是一个特别大的数。

在本例中我们就是利用Lookup返回选区中最后一个值的特性,为每个单元格建立一个可变选区,选区的最后一个单元格为当前单元格的上一格,这样就实现了自动填充的效果。

  • 高级篇

利用LOOKUP以上特性与其他函数进行结合可以实现很多特殊的目的,例如,我们有一张表格提供了不同级别武将的带兵数。然后有一个武将的介绍表格,包含武将的名字和级别,如何将武将的带后数添加到武将的介绍表格?这时候我们就可以通过Lookup和Find函数来解决,如下:

1479002024-3137-110f0005f14eb72c992f

公式的计算原理如下:首先用公式“0/FIND($F$3:$F$6,B3,1)”建立一个向量数组,Find函数会在B3单元格的文本中依次查找是否包含F3:F6的内容,如果有会返回位置值,否则近回错误值,再用0/除以位置值和错误值,得到一个由0和错误值构成的数组。再通过查找0值找到包含对应武将的带兵数。后面再加一个IFERROR进行错误判断,如果Lookup没有找到对应的武将级别,会返回错误值,也就是说如果计算出错,说明当前武将属于其他级别武将,我们可以看到像吴国都督周瑜,在这个文本中不包含级别表中的任何级别,这时Lookup就会出错,周瑜属于其他级别武将,我们用IFERROR将其他级别数武将带兵数赋予他。

利用LOOKUP和FIND组合我们还可以为简称找到对应的全称,如图:

1479002025-4050-106b000633837433a343

公式很长,看起来很费劲的样子,但知道公式的原理后,其实就很好理解了,最好是自己亲自动手操作一遍,这些技巧就都是你的了。

http://m.toutiao.com/group/6352014683323302145/?iid=6234134244&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share

 

转载请注明:徐自远的乱七八糟小站 » 【Lookup从入门到精通,一学就会!】

喜欢 (0)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号