什么是交叉查询呢?我们先来看一个例子:
在表格中,我们安排了50名同学组成了一个方阵,这个方阵一共有5列纵队,10排横队。
现在,只要教官喊出排数和列数,相应的同学就要高声答「到」。
比如教官喊道:「第4排第3列」!
「到!」施美丽同学大声喊道。
这就是一个典型的交叉查询问题。
那么,如何在表格中根据行列标题快速查询出结果呢?
通常情况下,大家的第一反应是使用函数嵌套公式来完成。
常用的公式组合有以下四种:难道就没有简单一点的方法吗?
诶嘿,还真有!
只需要两步,不需要复杂的函数公式,一个空格就能搞定。
❶vlookup+match
公式如下:
=VLOOKUP(I3,A2:F11,MATCH(I2,A1:F1,0))
❷index+match
公式如下:
=INDEX(B2:F11,MATCH(I3,A2:A11,0),MATCH(I2,B1:F1,0))
❸offset+match
公式如下:
=OFFSET(A1,MATCH(I3,A2:A11,0),MATCH(I2,B1:F1,0),1,1)
❹indirect+match
公式如下:
=INDIRECT("R"&MATCH(I3,A1:A11,0)&"C"&MATCH(I2,A1:F1,0),FALSE)
是不是觉得头很大?这些公式一个比一个长,一个比一个复杂!
01、批量命名
首先给方阵的每排每列都取一个名字,常规的命名方法是选中对应的行或列,然后在名称框输入一个名字,如下图:
但是,这么多的行和列,逐一设置太麻烦了,我们用更简单的方法:
❶选中整个表格区域(包括行列标题)。
❷点击公式选项卡中的「根据所选内容创建」按钮。
❸确认首行和最左列复选框打勾,点击确定。
这样,我们就完成了批量命名。
在公式选项卡的[名称管理器]中,我们可以查看这些名字和对应的引用区域。
02、编写公式
太神奇了!
相信不用我多说,你也能发现,这个公式究竟有多么简单。
输入等于号,再输入对应的行和列的名称,两个名称之间敲一个空格,公式就写好了。
注意:在函数公式中,和冒号一样,空格也是一种引用符号。与冒号不同的是,冒号引用的是两个单元格之间的区域;而空格,引用的是两个区域相互重合的部分。
好了,到这里,我们已经基本上完成了交叉查询的任务了。
不过还有一点缺憾:现在的行列名,都是手工输入的,离我们最开始展示的效果,还差一点点。
我们再尝试一下,使用单元格引用来输入这个公式:
很遗憾,我们翻车了!
为什么手动输入行列名称可以成功,直接引用单元格内容却失败了呢?
因为手写输入的时候,公式会将这些名称识别为我们命名的区域;而直接引用单元格,公式会把这些名称识别为文本。
所以,这里我们还缺少一个关键要素,它是一个函数,你能猜出来是什么函数吗?
不卖关子了!我们缺少的,正是indirect函数。
indirect函数可以将文本转换为一个指定的引用。
用人话解释,就是indirect函数可以将文本转换为一个地址(前提是地址有效),因为我们一开始就对每行和每列都进行了命名,所以这些地址都是有效的,我们只需要用indirect函数来引用这些地址名称,就可以发挥他们真正的效用了。
所以,这个公式我们还要稍加修改。
非常简单,只需要在两个单元格前面,分别加上indirect函数,就可以了。
怎么样,你学会了吗?
03、写在最后
我们最后再把所有5种交叉查询的方法都列示出来:
❶vlookup+match
公式如下:
=VLOOKUP(I3,A2:F11,MATCH(I2,A1:F1,0))
❷index+match
公式如下:
=INDEX(B2:F11,MATCH(I3,A2:A11,0),MATCH(I2,B1:F1,0))
❸offset+match
公式如下:
=OFFSET(A1,MATCH(I3,A2:A11,0),MATCH(I2,B1:F1,0),1,1)
❹indirect+match
公式如下:
=INDIRECT("R"&MATCH(I3,A1:A11,0)&"C"&MATCH(I2,A1:F1,0),FALSE)
❺批量命名+indirect
公式如下:
=INDIRECT(I2)INDIRECT(I3)
要用哪一种,就由你来决定咯!