📜  Excel 中的 INDEX 和 MATCH函数

📅  最后修改于: 2021-09-23 04:57:34             🧑  作者: Mango

INDEX-MATCH解决了VLOOKUP函数的局限性,并且更易于使用,成为Excel中比较流行的工具。 Excel 中的 INDEX-MATCH函数与 VLOOKUP函数相比有许多优点:

  1. INDEX 和 MATCH 比 Vlookup 更灵活更快
  2. 可以执行水平查找、垂直查找、2 路查找、左查找、区分大小写的查找,甚至基于多个条件的查找。
  3. 在排序数据中,INDEX-MATCH 比 VLOOKUP 快 30%。这意味着在更大的数据集中,速度提高 30% 更有意义。

让我们从每个 INDEX 和 MATCH 的详细概念开始。

INDEX函数

Excel 中的 INDEX函数非常强大,同时也是一个灵活的工具,可以检索范围内给定位置的值。换句话说,它返回由行和列偏移指定的单元格的内容。

句法:

=INDEX(reference, [row], [column])

参数:

  • 参考:要偏移到的单元格数组。它可以是数据表中的单个范围或整个数据集。
  • row [可选]:偏移行数。这意味着如果我们选择一个表格参考范围为“A1:A5”,那么我们要提取的单元格/内容是在多少垂直距离处。在这里,对于 A1 行将是 1,对于 A2 行 = 2,依此类推。如果我们给 row = 4 那么它将提取 A4。由于行是可选的,所以如果我们不指定任何行号,那么它会提取参考范围内的整行。在这种情况下,即 A1 到 A5。
  • column [可选]:偏移列的数量。这意味着如果我们选择一个表格参考范围为“A1:B5”,那么我们要提取的单元格/内容是在多少水平距离处。在这里,对于 A1 行将是 1,列将是 1,对于 B1 行将是 1 但列将是 2,对于 A2 行 = 2 列 = 1,对于 B2 行 = 2 列 = 2,依此类推。如果我们给出 row = 5 和 column 2,那么它将提取 B5。由于列是可选的,所以如果我们不指定任何行号。然后它将提取参考范围内的整个列。例如,如果我们给 row = 2 和 column 为空,那么它将提取 (A2:B2)。如果我们不指定行和列,那么它将提取整个引用表,即 (A1:B5)。

参考表:下表将用作所有 INDEX函数示例的参考表。第一个单元格位于 B3(“食物”),最后一个对角线单元格位于 F10(“180”)。

参考表

示例:以下是索引函数的一些示例。

案例 1:没有提到行和列。

输入指令: =INDEX(B3:C10)                        

情况1

情况 2:仅提及行。

输入命令: =INDEX(B3:C10,2)                  

案例二

案例 3: Rows 和 Columns 都提到了。

输入指令: =INDEX(B3:D10,4,2)                    

案例3

案例 4:只提到了 Columns。

输入指令: =INDEX(B3 : D10 , , 2)                  

案例四

问题INDEX函数:与INDEX函数的问题是,有必要指定数据,我们正在寻找的行和列。假设我们正在处理一个包含 10000 行和列的机器学习数据集,那么搜索和提取我们正在寻找的数据将非常困难。这里出现了匹配函数的概念,它将根据某些条件识别行和列。

匹配函数

它检索一个项目/值在一个范围内的位置。它是 VLOOKUP 或 HLOOKUP 的不太精炼的版本,仅返回位置信息而不返回实际数据。 MATCH 不区分大小写,也不关心范围是 Horizontal 还是 Vertical。

句法:

=MATCH(search_key, range, [search_type])

参数:

  • search_key:要搜索的值。例如,42、“猫”或 I24。
  • range:要搜索的一维数组。它可以是单行或单列。例如->A1:A10、A2:D2 等。
  • search_type [可选]:搜索方法。 = 1(默认)在范围按升序排序时查找小于或等于 search_key 的最大值。
    • = 0 查找范围未排序时的确切值。
    • = -1 查找范围按降序排序时大于或等于 search_key 的最小值。

可以使用 match函数找到行号或列号,并且可以在索引函数使用它,因此如果有关于某个项目的任何详细信息,那么可以通过使用 match 查找项目的行/列来提取有关该项目的所有信息然后将它嵌套到索引函数。

参考表:下表将用作 MATCH函数的所有示例的参考表。第一个单元格在 B3(“食物”),最后一个对角线单元格在 F10(“180”)

参考表 MATCH 函数

示例:以下是 MATCH函数的一些示例 –

情况 1:搜索类型 0,表示完全匹配。

输入命令: =MATCH(“南印度”,C3:C10,0)

案例 1 匹配

情况 2:搜索类型 1(默认)。

输入命令: =MATCH(“南印度”,C3:C10)                           

案例二匹配

情况 3:搜索类型 -1。

输入命令: =MATCH(“南印度”,C3:C10,-1)                             

案例 3 匹配

指数匹配

在前面的示例中,行和列的静态值在 INDEX函数中提供让我们假设没有关于行和列位置的先验知识,然后可以使用 MATCH函数提供行和列位置。这是一种动态搜索和提取价值的方式。

句法:

=INDEX(Reference Table , [Match(SearchKey,Range,Type)/StaticRowPosition],
                         [Match(SearchKey,Range,Type)/StaticColumnPosition])

参考表:将使用以下参考表。第一个单元格在 B3(“食物”),最后一个对角线单元格在 F10(“180”)

参考表 INDEX-MATCH

示例:假设任务是找到 Masala Dosa 的成本。已知第 3 列表示项目的成本,但不知道 Masala Dosa 的行位置。问题可以分为两步——

步骤 1:使用公式找到 Masala Dosa 的位置:

=MATCH("Masala Dosa",B3:B10,0) 

这里 B3:B10 表示“食物”列,0 表示完全匹配。它将返回 Masala Dosa 的行号。

第 2 步:找出 Masala Dosa 的成本。使用 INDEX函数查找 Masala Dosa 的成本。通过在需要Masala Dosa的准确位置的INDEX函数内部替换上面的MATCH函数查询,并且cost的列数为3已知。

=INDEX(B3:F10, MATCH("Masala Dosa", B3:B10 , 0) ,3)

指数匹配

                      

INDEX-MATCH 的两种查找方式

在前面的示例中,“成本”属性的列位置是硬编码的。所以,它不是完全动态的。

案例1:假设对Cost的列数也一无所知,那么可以使用以下公式获得:

=MATCH("Cost",B3:F3,0)

这里 B3:F3 代表标题栏。

情况 2:当通过 MATCH函数提供行值和列值时(不提供静态值),则称为双向查找。可以使用以下公式来实现:

=INDEX(B3:F10, MATCH("Masala Dosa",B3:B10, 0) , MATCH("Cost" ,B3:F3 ,0))

                      

双向查找

左查找

INDEX 和 MATCH 相对于 VLOOKUP函数的主要优势之一是能够执行“左查找”。这意味着可以使用右侧的任何属性提取项目的行位置,并且可以提取左侧的另一个属性的值。

例如,假设购买成本应为 140 卢比的食品。间接地,我们说购买“Biryani”。在这个例子中,成本 140 卢比/- 是已知的,需要提取“食物”。由于成本列位于食品列的右侧。如果应用 VLOOKUP,它将无法搜索成本列的左侧。这就是为什么使用 VLOOKUP 无法获得食品名称的原因。

为了克服这个缺点,可以使用 INDEX-MATCH函数左查找。
步骤 1:首先使用以下公式提取 Cost 140 Rs 的行位置:

=MATCH(140, D3:D10,0)

此处 D3:D10 表示成本列,其中正在执行成本 140 Rs 行号的搜索。

第二步:得到行号后,下一步就是使用INDEX函数使用公式提取Food Name:

=INDEX(B3:B10, MATCH(140, D3:D10,0)) 

这里 B3:B10 代表食品栏,140 是食品项目的成本。

左查找

区分大小写的查找

MATCH函数本身不区分大小写。这意味着如果有食品名称“DHOKLA”并且 MATCH函数与以下搜索词一起使用:

  1. “多克拉”
  2. “多克拉”
  3. “DhOkLA”

All 将返回 DHOKLA 的行位置。但是,EXACT函数可以与 INDEX 和 MATCH 一起使用以执行尊重大小写的查找。

Exact函数: Excel EXACT函数比较两个文本字符串,考虑大写和小写字符,如果相同则返回 TRUE,否则返回 FALSE。 EXACT 区分大小写。

例子:

  1. EXACT(“DHOKLA”,“DHOKLA”):这将返回 True。
  2. EXACT(“DHOKLA”,“Dhokla”):这将返回 False。
  3. EXACT(“DHOKLA”,“dhokla”):这将返回 False。
  4. EXACT(“DHOKLA”,“DhOkLA”):这将返回 False。

示例:假设任务是以区分大小写的方式搜索食物类型“Dhokla”。这可以使用公式来完成 –

=INDEX(C3:C10, MATCH(TRUE , EXACT("Dhokla", B3:B10) ,0))

如果列 B3:B10 中的值与具有相同大小写的“Dhokla”匹配,则 EXACT函数将返回 True,否则将返回 False。现在 MATCH函数将应用于 B3:B10 列并搜索 Exact 值为 TRUE 的行。之后 INDEX函数将在 MATCH函数返回的行处检索列 C3:C10(食物类型列)的值。                 

区分大小写的查找

多条件查找

Excel 中最棘手的问题之一是基于多个条件的查找。换句话说,同时匹配多个列的查找。在下面的示例中,INDEX 和 MATCH函数以及布尔逻辑用于匹配 3 列 –

  1. 食物。
  2. 成本。
  3. 数量。

提取总成本。

示例:假设任务是计算 Pasta 的总成本,其中

  1. 食物:意大利面。
  2. 费用: 60。
  3. 数量: 1。

所以在这个例子中,有三个标准来执行匹配。以下是基于多个条件的搜索步骤-

步骤 1:首先使用以下公式将 Food Column (B3:B10) 与 Pasta 匹配:

"PASTA" = B3:B10 

这会将 B3:B10(食品列)值转换为布尔值。这是真的,食物是意大利面,否则是假的。

第 2 步:之后,按以下方式匹配成本标准:

60 = D3:D10

这会将 D3:D10(成本列)值替换为布尔值。在 Cost=60 否则为 False 的情况下为 True。

第 3 步:下一步是按以下方式匹配 Quantity = 1 的第三个条件:

1 = E3:E10

这会将 E3:E10 列(数量列)替换为 True,其中数量 = 1,否则它将为 False。

第 4 步:将第一个、第二个和第三个条件的结果相乘。这将是所有条件的交集,并将布尔值 True/False 转换为 1/0。

第 5 步:现在结果将是一个 0 和 1 的列。这里使用 MATCH函数查找包含 1 的列的行号。因为如果列的值为 1,则表示它满足所有三个条件。

第 6 步:获取行号后,使用 INDEX函数获取该行的总成本。

=INDEX(F3:F10, MATCH(1, ("Pasta"=B3:B10) *  (60=D3:D10) * (1=E3:E10) , 0 ))

这里 F3:F10 代表总成本列。

多条件查找