Table of contents
该教程展示了在Excel中进行二维查找的几个不同的公式。 只要看一下备选方案,选择你最喜欢的就可以了:)
当你在Excel电子表格中搜索某样东西时,大多数时候你会在列中垂直查找或在行中水平查找。 但有时你需要在行和列中查找。 换句话说,你的目标是在某行和某列的交汇处找到一个值。 这被称为 矩阵查询 (aka 二维的 或 双向查询 ),这个教程展示了如何以4种不同的方式来做它。
Excel INDEX MATCH MATCH公式
在Excel中进行双向查询最常用的方法是使用INDEX MATCH MATCH。 这是经典的INDEX MATCH公式的一个变体,你在其中再添加一个MATCH函数,以便同时获得行和列的数字。
INDEX ( 数据数组 , MATCH ( vlookup_value , 查找_列_范围 , 0), MATCH ( hlookup值 , 检索_row_range , 0))作为一个例子,让我们做一个公式,从下表中拉出某年某种动物的数量。 首先,我们定义所有参数。
- 数据数组 - B2:E4 (数据单元格,不包括行和列的标题)
- Vlookup_value - H1(目标动物)
- 查找_列_范围 - A2:A4(行标题:动物名称) - A3:A4
- Hlookup_value - H2 (目标年)
- 查找_行_范围 - B1:E1 (列标题:年份)
把所有的参数放在一起,你会得到这个双向查找的公式。
=index(b2:e4, match(h1, a2:a4, 0), match(h2, b1:e1, 0)
这个公式如何运作
虽然第一眼看上去有点复杂,但这个公式的逻辑真的很直接,很容易理解。 INDEX函数根据行和列的数字从数据阵列中检索一个值,两个MATCH函数提供这些数字。
INDEX(B2:E4, row_num, column_num)
这里,我们利用MATCH(lookup_value, lookup_array, [match_type])的能力来返回一个 相对位置 的 查找_值 在 lookup_array .
因此,为了得到行号,我们在行头(A2:A4)中搜索感兴趣的动物(H1)。
匹配(h1, a2:a4, 0)
为了得到列号,我们在列标题(B1:E1)中搜索目标年份(H2)。
匹配(h2, b1:e1, 0)
在这两种情况下,我们通过设置第3个参数为0来寻找完全匹配。
在这个例子中,第一个MATCH返回2,因为我们的vlookup值(北极熊)是在A3中找到的,也就是A2:A4中的第二个单元格。 第二个MATCH返回3,因为hlookup值(2000)是在D1中找到的,也就是B1:E1中的第三个单元格。
鉴于上述情况,该公式简化为:。
index(b2:e4, 2, 3)
并返回数据数组B2:E4中第2行和第3列的交点的一个值,即D3单元格中的一个值。
双向查找的VLOOKUP和MATCH公式
在Excel中进行二维查找的另一种方法是使用VLOOKUP和MATCH函数的组合。
VLOOKUP( vlookup_value , 表_数组 , MATCH( hlookup_value , 检索_row_range , 0), FALSE)对于我们的样本表,该公式具有以下形状。
=vlookup(h1, a2:e4, match(h2, a1:e1, 0), false)
在哪里?
- 表_数组 - A2:E4(数据单元格,包括行头)。
- Vlookup_value - H1(目标动物)
- Hlookup_value - H2 (目标年)
- 查找_行_范围 - A1:E1(列标题:年)。
这个公式如何运作
公式的核心是配置为精确匹配的VLOOKUP函数(最后一个参数设置为FALSE),它在表格数组(A2:E4)的第一列中搜索查找值(H1),并从同一行的另一列中返回一个值。 为了确定从哪一列返回一个值,你使用同样配置为精确匹配的MATCH函数(最后一个参数设置为0)。
匹配(h2, a1:e1, 0)
MATCH在列头(A1:E1)中搜索H2中的值,并返回找到的单元格的相对位置。 在我们的例子中,目标年份(2010)在E1中被找到,它在查找数组中排在第5位。 因此,数字5进入了 col_index_num VLOOKUP的参数。
vlookup(h1, a2:e4, 5, false)
VLOOKUP从这里出发,在A2中找到与之完全匹配的查找值,并从同一行的第5列中返回一个值,也就是E2单元。
重要提示!为使该公式正常工作。 表_数组 (A2:E4)的VLOOKUP和 lookup_array 的MATCH(A1:E1)必须具有相同的列数,否则MATCH传递给 col_index_num 将是不正确的(不会对应于该列在 表_数组 ).
XLOOKUP函数可以在行和列中查找
最近,微软在Excel中又推出了一个函数,旨在取代所有现有的查找函数,如VLOOKUP、HLOOKUP和INDEX MATCH。 在其他方面,XLOOKUP可以查看特定行和列的交点。
XLOOKUP( vlookup_value , vlookup_column_range , XLOOKUP( hlookup_value , hlookup_row_range , 数据数组 ))对于我们的样本数据集,公式如下。
=xlookup(h1, a2:a4, xlookup(h2, b1:e1, b2:e4))
注意:目前XLOOKUP是一个测试版功能,只对参加Office Insiders计划的Office 365订户可用。
这个公式如何运作
该公式使用XLOOKUP的能力来返回整个行或列。 内部函数在标题行中搜索目标年份,并返回该年的所有数值(在这个例子中,是1980年的数值)。 这些数值将进入 return_array 外层XLOOKUP的参数。
xlookup(h1, a2:a4, {22000;25000;700})
外部XLOOKUP函数在列头中搜索目标动物,并从return_array中返回相同位置的值。
双向查询的SUMPRODUCT公式
SUMPRODUCT函数就像Excel中的一把瑞士刀--它可以做很多超出其指定用途的事情,特别是在评估多个标准时。
要查询两个标准,在行和列中,使用这个通用公式。
SUMPRODUCT( vlookup_column_range vlookup_value ) * ( hlookup_row_range hlookup_value ), 数据数组 )为了在我们的数据集中进行双向查找,公式如下。
=sumproduct((a2:a4=h1) * (b1:e1=h2), b2:e4)
下面的语法也可以工作。
=sumproduct((a2:a4=h1) * (b1:e1=h2) * b2:e4)
这个公式如何运作
在公式的核心部分,我们将两个查找值与行和列的标题进行比较(H1中的目标动物与A2:A4中的所有动物名称比较,H2中的目标年份与B1:E1中的所有年份比较)。
(a2:a4=h1) * (b1:e1=h2)
这就产生了两个TRUE和FALSE值的数组,其中TRUE代表匹配。
{false;false;true} * {false,true,false,false}。
乘法运算将TRUE和FALSE的值胁迫成1和0,并产生一个4列3行的二维数组(行之间用分号隔开,每列数据用逗号隔开)。
{0,0,0,0;0,0,0,0;0,1,0,0}
SUMPRODUCT函数将上述数组中的元素乘以B2:E4中相同位置的项目。
{0,0,0,0;0,0,0,0;0,1,0,0} * {22000,13800,8500,3500;25000,23000,22000,20000;700,2000,2300,2500}
因为乘以0得到的是0,所以在第一个数组中只有对应于1的项目存活。
SUMPRODUCT({0,0,0,0;0,0,0,0;0,2000,0,0})
最后,SUMPRODUCT将所得数组的元素相加,并返回一个2000的值。
注意:如果你的表有多个同名的行或/和列标题,最后的数组将包含一个以上的数字,而不是0,所有这些数字将被加起来。 结果,你将得到一个满足两个条件的值的总和。 这就是SUMPRODUCT公式与INDEX MATCH MATCH和VLOOKUP的不同之处,后者返回第一个找到的匹配。
带有命名范围的矩阵查询(明确的交叉点)。
在Excel中进行矩阵查询的另一个惊人的简单方法是使用命名范围。 下面是方法。
第1部分:命名列和行
命名表格中每一行和每一列的最快方法是这样的。
- 选择整个表(在我们的例子中是A1:E4)。
- 关于 公式 选项卡,在 定义的名称 组,点击 从选择中创建 或按Ctrl + Shift + F3快捷键。
- 在 从选择中创建名称 对话框,选择 第一行 和 左栏。 并单击 "确定"。
这将根据行和列的标题自动创建名称。 然而,有几个注意事项。
- 如果你的列和/或行的标题是数字或包含Excel名称中不允许的特定字符,那么将不会创建这样的列和行的名称。 要查看创建的名称列表,请打开名称管理器(Ctrl + F3)。 如果缺少一些名称,请按照《如何在Excel中命名一个范围》中的解释手动定义它们。
- 如果你的一些行或列的标题包含空格,空格将被替换成下划线,例如。 极地_熊 .
对于我们的示例表,Excel只自动创建了行名。 列名必须手动创建,因为列头是数字。 为了克服这个问题,你可以简单地在数字前面加上下划线,例如 _1990 .
结果,我们有以下命名的范围。
第2部分:制作一个矩阵查询公式
要在给定的行和列的交叉点上拉出一个值,只需在一个空单元格中输入下列通用公式之一。
行_名称 列_名称或反之亦然。
列_名称 行_名称例如,要得到1990年蓝鲸的数量,公式简单如是。
=Blue_whale _1990
如果有人需要更详细的说明,以下步骤将引导你完成这一过程。
- 在你希望出现结果的单元格中,输入等号(=)。
- 开始输入目标行的名称,例如。 蓝鲸(Blue_whale 在你输入几个字符后,Excel将显示所有符合你输入的现有名称。 双击所需的名称,在你的公式中输入它。
- 在行名后面,输入一个 空间 ,其作用为 交叉运算符 在这种情况下。
- 输入目标列名称( _1990 在我们的案例中)。
- 只要输入了行和列的名称,Excel就会在你的表格中突出显示相应的行和列,你按回车键就可以完成公式。
你的矩阵查询已经完成,下面的截图显示了结果。
这就是如何在Excel中进行行和列的查询。 感谢你的阅读,希望下周能在我们的博客上见到你!
可用的下载
二维查询样本工作簿