在Excel中进行二维查找的INDEX MATCH MATCH

  • Share This
Michael Brown

该教程展示了在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部分:命名列和行

    命名表格中每一行和每一列的最快方法是这样的。

    1. 选择整个表(在我们的例子中是A1:E4)。
    2. 关于 公式 选项卡,在 定义的名称 组,点击 从选择中创建 或按Ctrl + Shift + F3快捷键。
    3. 从选择中创建名称 对话框,选择 第一行 左栏。 并单击 "确定"。

    这将根据行和列的标题自动创建名称。 然而,有几个注意事项。

    • 如果你的列和/或行的标题是数字或包含Excel名称中不允许的特定字符,那么将不会创建这样的列和行的名称。 要查看创建的名称列表,请打开名称管理器(Ctrl + F3)。 如果缺少一些名称,请按照《如何在Excel中命名一个范围》中的解释手动定义它们。
    • 如果你的一些行或列的标题包含空格,空格将被替换成下划线,例如。 极地_熊 .

    对于我们的示例表,Excel只自动创建了行名。 列名必须手动创建,因为列头是数字。 为了克服这个问题,你可以简单地在数字前面加上下划线,例如 _1990 .

    结果,我们有以下命名的范围。

    第2部分:制作一个矩阵查询公式

    要在给定的行和列的交叉点上拉出一个值,只需在一个空单元格中输入下列通用公式之一。

    行_名称 列_名称

    或反之亦然。

    列_名称 行_名称

    例如,要得到1990年蓝鲸的数量,公式简单如是。

    =Blue_whale _1990

    如果有人需要更详细的说明,以下步骤将引导你完成这一过程。

    1. 在你希望出现结果的单元格中,输入等号(=)。
    2. 开始输入目标行的名称,例如。 蓝鲸(Blue_whale 在你输入几个字符后,Excel将显示所有符合你输入的现有名称。 双击所需的名称,在你的公式中输入它。
    3. 在行名后面,输入一个 空间 ,其作用为 交叉运算符 在这种情况下。
    4. 输入目标列名称( _1990 在我们的案例中)。
    5. 只要输入了行和列的名称,Excel就会在你的表格中突出显示相应的行和列,你按回车键就可以完成公式。

    你的矩阵查询已经完成,下面的截图显示了结果。

    这就是如何在Excel中进行行和列的查询。 感谢你的阅读,希望下周能在我们的博客上见到你!

    可用的下载

    二维查询样本工作簿

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.