2019年8月28日,Microsoft推出了一个新的Excel函数XLOOKUP,具有向后/向前和垂直/水平查找的功能,大有取代VLOOKUP/HLOOKUP/INDEX MATCH函数之势,虽然还处于测试阶段,但也着实火了一把。下面就让我们详细了解这个函数。
XLOOKUP函数语法
XLOOKUP函数的语法如下:
XLOOKUP(lookup_value,lookup_array, return_array, [match_mode], [search_mode])
XLOOKUP函数在lookup_array(某个区域或数组)中查找lookup_value(查找值),返回return_array(某个区域或数组)中对应的项。
其中:
1.参数lookup_value,要查找的值。
2.参数lookup_array,查找的单元格区域或数组。
3.参数return_array,找到的值所在的单元格区域或数组。
4.参数match_mode,可选,查找模式,0代表精确匹配,这是默认值;-1代表精确匹配或者小于但接近查找值的值;1代表精确匹配或者大于但接近查找值的值;2代表通配符匹配。
5.参数search_mode,可选,指定查找顺序。1代表从头到尾进行查找,这是默认值;-1代表从尾到头进行查找;2代表二分查找(按升序排列);-2代表二分查找(按降序排列)。
XLOOKUP与VLOOKUP比较
默认精确匹配
对于VLOOKUP函数来说,必须指定最后一个参数的值为FALSE或0,来确保执行精确匹配查找。而XLOOKUP函数默认精确匹配查找,无需担心忘记指定参数而得到不正确的结果。
插入行列不会中断
XLOOKUP函数使用一个区域来指向结果驻留的区域,而不是静态的数字引用,因此在工作表中插入列时不用担心会破坏查找公式。而在使用VLOOKUP函数时,如果插入列会返回错误的数据。
向后查找
VLOOKUP函数最大的不便之处在于查找列必须是左边的列,而XLOOKUP函数可以向前和向后查找。
水平/垂直查找
XLOOKUP函数可灵活地执行水平和垂直查找,从而不再需要VLOOKUP和HLOOKUP。
返回区域而不是值
XLOOKUP函数的一个非常简洁的功能是返回所查找内容的单元格引用而不是返回值,因此,可以对两个XLOOKUP之间的区域进行求和,例如:
=SUM(XLOOKUP():XLOOKUP())
也可以在一次查找中返回多个单元格。
示例
示例1:垂直查找
如下图2所示,在单元格区域H2:J10中是查找表,现在需要根据列B中的水果代码在查找表中查找水果名称。
使用VLOOKUP函数的公式如下:
=VLOOKUP(B3,$H$2:$J$10,3,FALSE)
结果如下图所示。
注意,使用VLOOKUP函数需要输入4个参数值,需要引用整个查找表,并且静态引用了需要查找/返回的列。
而使用XLOOKUP函数的公式如下:
=XLOOKUP(B3,$H$3:$H$10,$J$3:$J$10)
得到与VLOOKUP函数相同的结果,如下图所示。
与VLOOKUP函数相比,XLOOKUP函数只需要输入3个参数值,仅需要引用正在使用的数据,并且如果要在多个列之间拖动公式,不需要改变静态输入。
示例2:水平查找
如下图4所示,要获取二季度的销售额。使用HLOOKUP函数的公式为:
=HLOOKUP(C7,$B$2:$F$4,3,FALSE)
结果如下图所示。
下面的公式使用XLOOKUP函数,获得相同的结果:
=XLOOKUP(C7,$B$2:$F$2,B4:F4)
结果如下图所示。
示例3:获得INDEX/MATCH函数的效果
通常,我们使用INDEX函数和MATCH函数的组合来实现从右向左的查找。如下图6所示,需要根据水果代码查找水果名称,由于水果代码在查找表的右侧列,因此不可能使用VLOOKUP函数,此时可使用INDEX/MATCH函数组合:
=INDEX($H$2:$J$10,MATCH(B3,$J$2:$J$10,0),1)
结果如下图所示。
现在我们有了XLOOKUP函数,可以使用下面的公式:
=XLOOKUP(B3,$J$2:$J$10,$H$2:$H$10)
很方便地得到相同的结果,如下图所示。
示例4:获得INDEX/MATCH/MATCH函数的效果
以前,我们使用INDEX/MATCH/MATCH函数组合来实现同时在水平和垂直方向上的查找,如下图8所示,要在查找表中查找水果的产地,公式如下:
=INDEX($J$2:$K$10,MATCH($B3,$K$2:$K$10,0),MATCH(D$2,$J$2:$K$2,0))
结果如下图所示。
现在,利用XLOOKUP函数返回单元格区域引用的功能,可以使用下面的公式:
=XLOOKUP($B3,$K$2:$K$10,XLOOKUP(D$2,$I$2:$K$2,$I$2:$K$10))
得到相同的结果,如下图所示。