分类:查找与引用函数
VLOOKUP函数是Excel中最常用的函数之一(另外一个是IF函数),在Excel中还有与之作用类似的HLOOKUP以及LOOKUP,在Excel 2021和Office 365中还有超级强大的XLOOKUP函数。因为作用类似,我们就放在一起来介绍了。
VLOOKUP的作用是根据在查找区域中找到等于查找值的数据行,并根据指定的列号返回对应的值。
语法如下:
VLOOKUP(查找值,查找区域,返回值所在列号,查找方式)
其中,
查找值 => 用来查找的条件,可以是任意类型的数值:比如整数,小数,文本,日期,逻辑值等。
查找区域 => 用来进行查找的数据源,需要返回的数据也在这个数据源之中。需要注意的是,查找区域的第一列必须是查找值进行比较的列。
返回值所在列号 => 如果查找到相应的行,需要返回的值所在的列号。
查找方式 => 有两种查找方式:精确匹配和近似匹配。用逻辑值表示:TRUE或者1表示近似匹配,FALSE或者0表示精确匹配。
下面这个简单的例子说明了VLOOKUP函数的工作原理:
关于VLOOKUP函数,需要强调以下两点:
1. 查找值只能在查找区域的第一列出现
2. 由于VLOOKUP函数是在竖直方向上查找,所以,第二个参数(查找区域)一般都是用绝对引用。
精确匹配 vs 近似匹配
上面的例子我们使用的是精确匹配。所谓精确匹配,就是只有在查找区域第一列中找到跟查找值完全相同的数据才算匹配成功。这里的完全相同指的是从数据到数据类型都一样。
近似匹配指的是在不能进行精确匹配的场景中,比如个人所得税的计算或者提成计算中:
我们有一个提成的规定在I4:K10区域,要计算每个人的提成(G列),需要先得到每个人对应的提成比例(D列)。
此时,可以使用VLOOKUP函数的近似匹配:
=VLOOKUP(C5,I5:K10,3,1)
注:这个场景在实际中非常常见,不要在这种场景中使用IF函数。
近似匹配的原理和要求
精确匹配的执行方式是在查找区域的第一列进行自上而下的搜索,直到匹配成功或者超出查找区域。
近似匹配的执行方式是折半查找。
如果希望明白折半查找的详细原理,可以上网搜一下。其实,用简单的话说,就是:
在查找区域第一列的所有数据中,找到所有比查找值小的数据,然后在其中找到最大的那个值,就是匹配成功的结果行:
从这个原理可以看出,查找区域必须按照第一列从小到大进行排序。
VLOOKUP的使用技巧
作为最常用的Excel函数之一,VLOOKUP有很多实用的使用技巧。具体请参见下面的文章:
HLOOKUP函数跟VLOOKUP函数类似,它的作用是在查找区域的首行中找到等于查找值的的,然后返回该列中指定行的数据。
语法如下:
HLOOKUP(查找值,查找区域,返回值所在行号,查找方式)
下图展示了HLOOKUP的工作原理,跟VLOOKUP差不多:
同样,HLOOKUP也只在查找区域的第一行进行查找。
我们一直不建议大家使用HLOOKUP函数。这么做的原因是希望减轻大家的学习负担(能少用一个函数就少用一个函数😀)。
当然,也是因为在实际工作中基本上都可以用VLOOKUP函数解决问题。像上面的例子,其实有点生造的嫌疑:一般来说更容易知道姓名所在的列,需要使用公式查找的其实是行号才对!
只有查找区域是这样的情况,才可能需要使用HLOOKUP进行列号的查找:
但是,这样的表不符合我们在标准模式中对数据表的要求。如果你的表是这种格式,建议修改成我们前面例子中的格式,否则,你会遇到很多其他的麻烦事。
LOOKUP也是用来进行查找的函数。与VLOOKUP和HLOOKUP相比,LOOKUP更加灵活一些。
LOOKUP的语法如下:
LOOKUP(查找值,查找区域,返回区域)
注:这里的查找区域是指单列或单行区域,返回区域也是单列或单行区域。在微软的官方介绍中,用的是查找向量和返回向量。
示例1
=LOOKUP(C4,F3:F9,G3:G9)
在这个公式中,查找值是C4单元格中的值,在查找区域F3:F9,返回的值是G3:G9的对应值。
由于查找区域和返回区域是分开的两个参数,所以LOOKUP函数没有“查找值必须位于查找区域第一列”的限制,可以轻松实现“反向查找”:
除了像VLOOKUP函数一样实现垂直方向的查找外,还可以像HLOOKUP函数一样,实现水平方向的查找:
在上面的例子中,我们的查找区域和返回区域是匹配的:要么都是单列区域,要么都是单行区域。其实可以不一致的:
跟VLOOKUP函数和HLOOKUP函数不同,LOOKUP不支持精确匹配,只使用近似匹配。这就要求查找区域必须从小到大排序,否则就可能出错:
或者得到错误的结果:
LOOKUP的总结
LOOKUP函数在网上得到很多“高手”的推崇。我还是建议大家尽可能不使用这个函数,因为一般人不容易驾驭,反而增加学习负担。
不仅仅是我这样建议,微软也是这么建议的:
LOOKUP函数还支持数组(VLOOKUP和HLOOKUP函数也支持),很多高手爱用,但是微软还是建议不要用:
所以,听微软的,尽量不用吧。如果你觉得VLOOKUP函数不好用,那么可以用XLOOKUP函数。
XLOOKUP是Office 365或者Excel 2021中才有的函数,功能非常强大。
我们先来看一下语法:
XLOOKUP(查找值,查找区域,返回区域,[匹配不成功时的返回值],[匹配模式],[搜索模式])
注:查找区域和返回区域中的区域可以换成数组。
其中,后三个参数是可选的,前三个参数我们都很熟悉。
“反向查找”
如果只看前三个参数,
XLOOKUP(查找值,查找区域,返回区域)
和LOOKUP是一样的:
LOOKUP(查找值,查找区域,返回区域)
XLOOKUP第四个参数是: [匹配不成功时的返回值],这个参数起到了原来IFERROR+VLOOKUP的作用:
匹配模式
XLOOKUP函数的第五个参数是:[匹配模式]。
这个参数定义了XLOOKUP使用的匹配类型,一共有四种:
0 - 精确匹配。
如果没有找到,就返回#N/A,或者返回[匹配不成功时的返回值](如果已经定义)。缺省时采用的就是这种匹配模式,这一点也与VLOOKUP不同。VLOOKUP函数缺省采用的是近似匹配,导致很多初学者经常犯错。
-1 - 精确匹配,或者下一个较小的项。
这种方式其实就是VLOOKUP近似匹配规则。在所有值中,找到所有小于等于查找值的的数据,然后找其中最大的一个。
1 - 精确匹配,或者下一个较大的项。
这种方式跟上一种相反:在所有值中,找到所有大于等于查找值的数据,然后找其中最小的一个。
2 - 通配符匹配。
如果这个参数被设置为2,表示查找值中含有通配符:*,?,~都有特殊含义:
第五个参数是0,不是通配符匹配,所以找不到“张无忌*”的匹配项
第五个参数是2, 是通配符匹配,所以将“张无忌*”匹配成张无忌。
这一点跟VLOOKUP不同。在VLOOKUP函数中,只要出现“*”,“?”,都算通配符。
搜索模式
XLOOKUP函数的第六个参数是[搜索模式]。
这个参数定义了XLOOKUP函数所用的搜索算法。一共有四个选项:
1 - 从前往后进行搜索
这就是传统的VLOOKUP精确匹配进行搜索的算法。
-1 - 从后往前进行搜索
传统上,VLOOKUP不支持这种搜索方式,这就导致VLOOKUP只能返回匹配成功的第一个值。而XLOOKUP可以返回匹配成功的最后一个值。
2 - 按照升序执行二进制搜索
实际上就是我们在VLOOKUP部分介绍过的,VLOOKUP函数采用近似匹配时采用的折半查找算法。要求查找区域(列或行)按照升序配列的。
XLOOKUP函数将搜索模式和匹配模式分开,可以在近似匹配的时候,选择是采用二进制搜索还是遍历搜索,比VLOOKUP函数更加灵活。
-2 - 按照降序执行二进制搜索
跟上面的选项算法一样,只是需要将查找区域(列或行)按照降序排列
返回区域
VLOOKUP函数返回的是存储在单元格中的数据,但是XLOOKUP返回的是一个“引用”,即单元格区域,例如,我们可以使用下面的公式:
=AREAS(XLOOKUP(C4&"*",F4:F9,E4:E9,,2))
计算XLOOKUP公式返回结果中的连续区域的个数。
可以使用公式:
=OFFSET(XLOOKUP(C4&"*",F4:F9,E4:E9,,2),1,0)
用OFFSET来得到XLOOKUP公式返回区域偏移后的单元格。
更多的XLOOKUP案例请参见:青出于蓝的Excel函数:XLOOKUP
还需要再次强调一下,如果条件允许,尽可能使用XLOOKUP函数。如果没有相应的版本,就使用VLOOKUP函数。尽可能少用HLOOKUP和LOOKUP函数,减轻学习负担😀。
Excel+Power Query+Power Pivot+Power BI
自定义函数 底部菜单:知识库->自定义函数
面授培训 底部菜单:培训学习->面授培训
也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。
联系客服