INDEX-MATCH解决了VLOOKUP函数的局限性,并且更易于使用,成为Excel中比较流行的工具。 Excel 中的 INDEX-MATCH函数与 VLOOKUP函数相比有许多优点:
- INDEX 和 MATCH 比 Vlookup 更灵活更快
- 可以执行水平查找、垂直查找、2 路查找、左查找、区分大小写的查找,甚至基于多个条件的查找。
- 在排序数据中,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)
情况 2:仅提及行。
输入命令: =INDEX(B3:C10,2)
案例 3: Rows 和 Columns 都提到了。
输入指令: =INDEX(B3:D10,4,2)
案例 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函数的一些示例 –
情况 1:搜索类型 0,表示完全匹配。
输入命令: =MATCH(“南印度”,C3:C10,0)
情况 2:搜索类型 1(默认)。
输入命令: =MATCH(“南印度”,C3:C10)
情况 3:搜索类型 -1。
输入命令: =MATCH(“南印度”,C3:C10,-1)
指数匹配
在前面的示例中,行和列的静态值在 INDEX函数中提供让我们假设没有关于行和列位置的先验知识,然后可以使用 MATCH函数提供行和列位置。这是一种动态搜索和提取价值的方式。
句法:
=INDEX(Reference Table , [Match(SearchKey,Range,Type)/StaticRowPosition],
[Match(SearchKey,Range,Type)/StaticColumnPosition])
参考表:将使用以下参考表。第一个单元格在 B3(“食物”),最后一个对角线单元格在 F10(“180”)
示例:假设任务是找到 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函数与以下搜索词一起使用:
- “多克拉”
- “多克拉”
- “DhOkLA”
All 将返回 DHOKLA 的行位置。但是,EXACT函数可以与 INDEX 和 MATCH 一起使用以执行尊重大小写的查找。
Exact函数: Excel EXACT函数比较两个文本字符串,考虑大写和小写字符,如果相同则返回 TRUE,否则返回 FALSE。 EXACT 区分大小写。
例子:
- EXACT(“DHOKLA”,“DHOKLA”):这将返回 True。
- EXACT(“DHOKLA”,“Dhokla”):这将返回 False。
- EXACT(“DHOKLA”,“dhokla”):这将返回 False。
- 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 列 –
- 食物。
- 成本。
- 数量。
提取总成本。
示例:假设任务是计算 Pasta 的总成本,其中
- 食物:意大利面。
- 费用: 60。
- 数量: 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 代表总成本列。