我们知道,VLOOKUP只能从左往右查找,插入一列就要报错,而XLOOKUP则无此限制,可以横向查询,坚向查询,从右往左,也可以从下往上,甚至行列双向都可以查找。
一、横向查找
当数据是横向排列的,表头在第一行,需要根据表头名称,横向匹配抓取对应的数据,这时便可用到XLOOKUP。
看下图,需要查找D6至D9对应的工号。

公式=XLOOKUP(查找值,查找数组,返回数组,[未找到时提示], [匹配模式], [搜索模式])
前两篇已经详细介绍了XLOOKUP公式的这6个参数,这里不再赘述。
查找值:找谁?找关羽,即D6
查找数组:关羽在哪里?在A1至K1区域里,再加绝对引号,即$A$1:$K$1
返回数组:关羽找到了,要返回什么结果?自然是要返回关羽的工号,也就是在A2至K2区域里,再加绝对引号,即$A$2:$K$2
后面3个参数,这里不用写。
最终公式如下:
=XLOOKUP(D6,$A$1:$K$1,$A$2:$K$2)
在E6单元格输入此公式,再下拉填充,即可查出D6至D9对应的工号。

二、逆向查找
这是VLOOKUP无法直接做到的查找模式,而用XLOOKUP能一步到位,不用改表格,不嵌套函数,直接逆向查询。
看下图,需要查找G2至G6对应的姓名。
在这里,若用VLOOKUP,只能根据姓名查工号,而不能像下图所示,根据工号查姓名。因为源数据姓名在第一列,VLOOKUP只能从左往右查,XLOOKUP则完全没有这个限制。
需要查找G2至G6对应的姓名。

查找值:找谁?找1557062,即G2。
查找数组:1557062在哪里?在C1至C11区域里,再加绝对引号,即$C$1:$C$11
返回数组:1557062找到了,要返回什么结果?自然是要返回1557062的姓名,也就是在A1至A11区域里,再加绝对引号,即$A$1:$A$11
后面3个参数,这里不用写。
最终公式 如下:
=XLOOKUP(G2,$C$1:$C$11,$A$1:$A$11)
在H2单元格输入此公式,再下拉填充,即可查出G2至G6对应的姓名。

三、双向交叉查找
也可以说是行条件+列条件定位查找,这里不得不提到INDEX+MATCH,这组最佳查找组合函数,就是通过定位来查找的,可以说有异曲同工之妙。EXCEL学习之路:INDEX+MATCH,最佳查找组合函数
这里用XLOOKUP进行双向查找时,需要再嵌套一个XLOOKUP。
内层XLOOKUP锁定列数据,外层XLOOKUP锁定行数据,然后两个XLOOKUP嵌套,提取交叉值。
如下图所示,需要批量查找G2至G6分别对应的姓名、单位、奖金和业绩。

先看外层,任务是锁定行数据
第1参数:查找值为G2,再加绝对引用符号$,用这个工号去查,$G锁死了G列,公式往右拖时,永远只看G列的工号,这里输入$G2。
第2参数:查找数组为G2所在的区域,即C2至C11区域,再做绝对引用符号$,行列都锁死,不管公式怎么拖,都只在这一列里找,这里输入$C$2:$C$11。
第3参数:找到行之后,从内层VLOOKUP给的那列数据里,取出对应行的值。
外层公式=XLOOKUP($G2,$C$2:$C$11, 内层XLOOKUP的结果)
再看内层,任务是锁定列数据
第1参数:查找值为H1,用这个表头去查,加绝对引用符号$锁死第一行(表头行),公式往下拖时,永远只看第一行,这里输入H$1
第2参数:查找数组就是H1所在的区域,即第一行的表头行,加绝对引用符号$把行列都锁死,不管公式怎么拖,都只在这一行里查找,这里输入$A$1:$E$1
第3参数:找到列之后,把这一列的所有数据都返回给外层,加绝对引用符号$把行列都锁死,确保数据范围不变,这里输入$A$2:$E$11
如果对绝对引用有疑问的,可参照下图理解。

最终公式如下:
=XLOOKUP($G2,$C$2:$C$11,XLOOKUP(H$1,$A$1:$E$1,$A$2:$E$11))
然后把H2公式向右拉到K2,再选中下拉到K6,就能全部填充数据。

当然,也可以反过来,内层XLOOKUP锁定行数据,外层XLOOKUP锁定列数据。
只要行数据和列数据分别锁定,不管是先列后行还是先行后列,都可以。
至于从下往上搜索,其实就是运用了第6个参数的-1模式,对此有兴趣的朋友可以再看看前面的文章。
竖向搜索也不介绍了,基本上大家查询最多的就是坚向搜索,而且XLOOKUP本身就是默认从上往下搜索。