Table of contents
该教程解释了Excel中查找的基础知识,显示了每个Excel查找函数的优点和缺点,并提供了一些例子,以帮助你决定在特定情况下最好使用哪种查找公式。
在数据集中查找一个特定的值是Excel中最常见的任务之一。 然而,并不存在适合所有情况的 "通用 "查找公式。 原因是 "查找 "一词可能表示各种不同的东西:你可以在一列中垂直查找,在一行中水平查找,或在一行和一列的交汇处查找,用一个或几个标准来搜索,返回第一个发现的匹配或多个匹配,做大小写敏感或不敏感的查找,以此类推。
在这个页面上,你会发现一个最基本的Excel Lookup函数列表,并附有公式实例和深入的教程链接供你参考。
Excel查询--基础知识
在我们深入研究Excel查找公式的奥秘曲折之前,让我们先定义一下关键术语,以确保我们始终处于同一起跑线上。
查询 - 在一个数据表中搜索一个指定的值。
查询值 - 一个要搜索的值。
返回值 (匹配值或匹配)--一个与查找值相同位置的值,但在另一列或行(取决于你是做垂直还是水平查找)。
查询表 在计算机科学中,查找表是一个数据数组,通常用于将输入值映射到输出值。 就本教程而言,Excel查找表只不过是一个单元格区域,在这里你可以搜索到查找值。
主桌 (主表)--一个你拉入匹配值的表。
你的查找表和主表可能有不同的结构和大小,但是它们应该总是包含至少一个 通用唯一标识符 ,即持有相同数据的列或行,这取决于你想执行垂直或水平查询。
下面的屏幕截图显示了一个样本查询表,它将在下面的许多例子中使用。
Excel查询功能
下面是对Excel中最常用的查找公式的快速概述,它们的主要优点和缺点。
LOOKUP功能
Excel中的LOOKUP函数可以进行最简单的垂直和水平查询。
优点 : 易于使用。
弊端 : 功能有限,不能处理未经排序的数据(需要对查找的列/行按升序排序)。
更多信息,请参见如何使用Excel LOOKUP函数。
VLOOKUP函数
它是LOOKUP函数的改进版,专门用来做 纵向查询 在列。
优点 :相对容易使用,可以进行精确和近似匹配。
弊端 : 不能从其左边看,当一个列被插入或从查找表中删除时停止工作,一个查找值不能超过255个字符,在大数据集上需要很多处理能力。
欲了解更多信息,请参见Excel VLOOKUP初学者教程。
HLOOKUP函数
它是VLOOKUP的水平对应物,在查找表的第一行搜索一个值,并从另一行返回相同位置的值。
优点 : 易于使用,可以返回精确和近似的匹配。
弊端 : 只能在查找表的最上面一行进行查找,受插入或删除行的影响,一个查找值应在255个字符以下。
更多信息,请参见如何在Excel中使用HLOOKUP。
vlookup匹配/hlookup匹配
由MATCH创建的动态列或行参考使这个Excel查找公式不受数据集变化的影响。 换句话说,在MATCH的帮助下,VLOOKUP和HLOOKUP函数可以返回正确的值,无论有多少列/行被插入或从查找表中删除。
垂直查询的公式
VLOOKUP( 查找_值 , 查询表 , MATCH( return_column_name , 列头 , 0), FALSE)水平查询的公式
HLOOKUP( 查找_值 , 查询表 , MATCH( return_row_name , 行头 , 0), FALSE)优点 : 对普通的Hlookup和Vlookup公式的改进,不受数据插入或删除的影响。
弊端 :不是很灵活,需要一个特定的数据结构(提供给MATCH函数的查找值应与返回列的名称完全相等),不能与超过255个字符的查找值一起工作。
欲了解更多信息和公式实例,请参见。
- Excel的Vlookup和匹配
- Excel Hlookup和匹配
偏移量匹配
一个更复杂但更强大的查找公式,摆脱了Vlookup和Hlookup的许多限制。
V型查询的公式
OFFSET( 查询表 , MATCH( 查找_值 , OFFSET( 查询表 , 0, n , ROWS( 查询表 ), 1) ,0) -1, m , 1, 1)在哪里?
- n - 是查找列的偏移量,即从起点到查找列要移动的列数。
- m - 是返回列的偏移量,即从起点到返回列要移动的列数。
H-Lookup的公式
OFFSET( 查询表 , m , MATCH( 查找_值 , OFFSET( 查询表 , n , 0, 1, 列( 查询表 )), 0) -1, 1, 1)在哪里?
- n - 是查找行的偏移量,即从起点到查找行所要移动的行数。
- m - 是返回行的偏移量,即从起点到返回行要移动的行数。
矩阵查询的公式(按行和列)。
{=OFFSET ( 起点 , MATCH ( 竖向_查询_值 , 查询栏 , 0), MATCH ( 横向查询 , 查找_行 , 0))}请注意,这是一个数组公式,通过同时按Ctrl + Shift + Enter键输入。
优点 : 允许执行左侧Vlookup、上层Hlookup和双向查找(按列和行的值),不受数据集变化的影响。
弊端 : 语法复杂,难以记忆。
更多信息和公式实例,请参见:在Excel中使用OFFSET函数
指数匹配
这是在Excel中进行垂直或水平查询的最好方法,可以取代上述大多数公式。 索引匹配公式是我个人的偏好,我几乎所有的Excel查询都使用它。
V型查询的公式
INDEX ( 返回列 , MATCH ( 查找_值 , 查询栏 , 0))H-Lookup的公式
INDEX ( return_row , MATCH ( 查找_值 , 查找_行 , 0))矩阵查询的公式
经典的索引匹配公式的扩展,以返回特定列和行的交叉点的值。
INDEX ( 查询表 , MATCH ( 竖向_查询_值 , 查询栏 , 0), MATCH ( 横向查询 , 查找_行 , 0))弊端 : 只有一个--你需要记住公式的语法。
优点 :Excel中最通用的查找公式,在许多方面优于Vlookup、Hlookup和Lookup函数。
- 它可以进行左面和上面的查询。
- 允许通过插入或删除列和行安全地扩展或折叠查找表。
- 对查询值的大小没有限制。
- 由于索引匹配公式引用的是列/行而不是整个表,因此它需要的处理能力较低,不会降低你的Excel速度。
欲了解更多信息,请查看。
- INDEX MATCH是VLOOKUP的一个更好的替代品
- 二维查找的INDEX MATCH MATCH公式
Excel查询对比表
正如你所看到的,并不是所有的Excel查找公式都是等同的,有些可以处理一些不同的查找,而有些只能在特定情况下使用。 下表概述了Excel中每个查找公式的功能。
公式 | 垂直查询 | 左侧查询 | 水平查询 | 上层查询 | 矩阵查询 | 允许数据插入/删除 |
查询 | ||||||
Vlookup | ||||||
Hlookup | ||||||
Vlookup匹配 | ||||||
Hlookup匹配 | ||||||
偏移量匹配 | ||||||
偏移 匹配 匹配 | ||||||
索引匹配 | ||||||
索引 匹配 匹配 |
Excel查找公式的例子
决定在特定情况下使用哪种公式的第一步是确定你想执行哪种查询。 下面你将找到最流行的查询类型的公式例子。
列中的垂直查询
垂直查找或Vlookup是在一列中找到一个查找值,并从另一列中返回同一行的值。 Excel中的Vlookup可以通过多种方式进行,包括。
VLOOKUP函数
如果你的查找值位于表格的左手边,并且你不打算对你的数据集做任何结构上的改变(既不增加也不删除列),你可以安全地使用一个普通的Vlookup公式。
=vlookup(g2, $a$2:$e$6, 5, false)
其中G2是查询值,在查询表中A2:E6,E是返回列。
VLOOKUP MATCH
如果你正在处理一个 "可变 "的Excel查询表,其中的列可以随时被插入和删除,通过嵌入Match函数使你的Vlookup公式对这些变化免疫,该函数创建一个动态的列参考,而不是一个 "硬编码 "的索引号。
=vlookup(f2,$a$1:$d$6, match($g$1,$a$1:$d$1, 0), false)
INDEX MATCH - 左侧查找
这是我最喜欢的公式,它可以轻松地处理从右到左的查找,无论你增加或删除多少列,都能无懈可击地工作。
例如,要在B列搜索H2中的值,并从F列返回一个匹配值,请使用这个公式。
=index($f$2:$f$6,(match(h2,$b$2:$b$6,0))
注意:当你计划在一个以上的单元格中使用Vlookup公式时,你应该总是 锁定查询表参考 通过使用$符号(绝对的单元格引用),这样公式就能正确地复制到其他单元格。
以行为单位进行水平查询
水平查询是垂直查询的 "转置 "版本,在水平排列的数据集中进行搜索。 换句话说,它在一行中搜索查询值,并从另一行中返回相同位置的值。
假设你的查询值在B9,查询表是B1:F5,你想从第5行返回一个匹配的值,使用以下公式之一。
HLOOKUP函数
仅能跨区域查询。 顶行 在你的数据集中。
=hlookup(b8, $b$1:$f$5, 5, false)
HLOOKUP MATCH
和纯Hlookup一样,这个公式只能在最上面一行搜索,但允许你 安全地插入或删除行 在查找表中。
=hlookup(b8, $b$1:$f$5, match($a$9, $a$1:$a$5, 0), false)
其中A1:A5是行标题,A9是你想返回匹配的行的名称。
指数匹配
可以 在任何一行中查找 ,并且没有上述公式的限制。
=index($b$5:$f$5,(match(b8,$b$1:$f$1,0))
二维查找(基于行和列的值)。
二维查找(又称 矩阵查询 , 双重查询 或 双向查询 换句话说,一个二维查找公式在指定的行和列的交叉点上搜索一个值。
假设你的查找表是A1:E6,单元格H2包含行上的匹配值,H3包含列上的匹配值,下面的公式会很有用。
INDEX MATCH MATCH公式 :
=index($a$1:$e$6, match(h2,$a$1:$a$6,0), match(h3, $a$1:$e$1,0))
OFFSET MATCH MATCH公式 :
=offset($a$1,match(h2,$a$2:$a$6,0),match(h3,$b$1:$e$1,0))
除了上述公式外,还有一些其他的方法可以在Excel中进行矩阵查询,你可以在《如何在Excel中进行双向查询》中找到全部细节。
三维查询
三维查询是指通过3个不同的查询值进行查询。 在下面的一个数据集中,假设你想查询一个特定的年份(H2),然后查询该年份数据中的一个特定名字(H3),然后返回一个特定月份的值(H4)。
这个任务可以通过以下数组公式来完成(请记得按Ctrl + Shift + Enter来正确完成)。
=INDEX($A$1:$E$12,MIN(IF((ROW($A$1:$A$12)>MATCH(H2,$A$1:$A$12,0))*($A$1:$A$12=H3),ROW($A$1:$A$12),"),MATCH(H4,$A$1:$E$1,0)
有多个标准的查询
为了能够评估多个标准,我们将需要修改经典的索引匹配公式,使其变成一个数组公式。
INDEX( 查询表 , MATCH(1, ( lookup_value1 lookup_column1 ) * ( lookup_value2 lookup_column2 )*..., 0), return_column_number )在A1:C11的查找表中,让我们通过2个标准来寻找一个匹配:在A列搜索F1单元格中的一个值,在B列搜索F2单元格中的一个值。
=index($a$1:$c$11, match(1, (f1=$a$1:$a$11) * (f2=$b$1:$b$11),0), 3)
像往常一样,你按下Ctrl + Shift + Enter,公式就会作为数组公式被评估。
关于该公式逻辑的详细解释,请参见INDEX MATCH以多个标准进行查询。
查询返回多个值
无论你使用哪种Excel查询函数(LOOKUP、VLOOKUP或HLOOKUP),它都只能返回单一的匹配结果。 要获得所有找到的匹配结果,你必须采用6个不同的函数组合在一个数组公式中。
IFERROR(INDEX( 返回范围 ,SMALL(IF( 查找_值 查找_范围 , ROW( 返回范围 )- m ,""),ROW() - n )),"")在哪里?
- m 是返回区域中第一个单元格的行号减去1。
- n 是第一个公式单元格的行号减去1。
查询值位于E2单元格,查询范围为A2:A11,返回范围为B2:B11,第一个公式单元格在第2行,你的查询公式如下。
=iferror(index($b$2:$b$11, small(if($e$2 =$a$2:$a$11, row($b$2:$b$11 )- 1,""), row() - 1 )),""
为了使公式能够返回多个匹配结果,你在第一个单元格(F2)中输入公式,按Ctrl + Shift + Enter ,然后将公式复制到该列下的其他单元格。
关于上述公式的详细解释和其他返回多个值的方法,请参见如何用Vlookup返回多个结果。
嵌套查询(来自2个查询表)。
当你的主表和你想从中提取数据的查询表没有共同的列时,你可以使用一个额外的查询表来建立匹配,像这样。
要从 数量 栏目中的 查找_表2 ,你使用以下公式。
=VLOOKUP(VLOOKUP(A2, Lookup_table1! $A$1:$B$6, 2, FALSE), Lookup_table2!$A$1:$B$6, 2, FALSE)
如下面的截图所示,我们的嵌套查找公式工作得很完美。
从多个工作表中进行连续的Vlookups
要根据前一次查找的成功或失败来执行连续的Vlookups,使用嵌套的IFERROR函数和VLOOKUPs来逐一评估多个条件。
iferror(vlookup( ... ), iferror(vlookup( ... ), iferror(vlookup( ... ), "未找到"))如果第一个Vlookup失败,IFERROR捕获错误并运行另一个Vlookup。 如果第二个Vlookup也没有找到任何东西,第二个IFERROR捕获错误并运行第三个Vlookup,以此类推。 如果所有Vlookup失败,最后一个IFERROR返回 "未找到 "或任何其他你提供给公式的信息。
作为一个例子,让我们试着从3个不同的单子中提取金额。
=IFERROR(VLOOKUP(B1,A6:B9,2,0), IFERROR(VLOOKUP(B1,D6:E9,2,0), IFERROR(VLOOKUP(B1,G6:H9,2,0), "未找到"))
其结果将类似于这样。
更多信息,请参见如何在Excel中使用嵌套的IFERROR函数。
区分大小写的查询
正如你可能知道的那样,所有的Excel查找函数在本质上是不区分大小写的。 为了迫使你的查找公式区分小写和大写文本,可以使用LOOKUP或INDEX MATCH与EXACT函数相结合。 我个人选择INDEX MATCH,因为它不需要像LOOKUP函数那样对查找列中的值进行排序,可以同时执行从左到右的查找。和从右到左的查找,并且对所有的数据类型都能完美工作。
INDEX( 返回列 , match(true, exact( 查询栏 , 查找_值 ),0))G2是查询值,A--要查询的列,E--要返回的列,我们的大小写查询公式如下。
=index($e$2:$e$6, match(true, exact($a$2:$a$6, g2),0))
由于它是一个 阵列公式 ,一定要按Ctrl + Shift + Enter来正确完成。
更多的公式例子,请看如何在Excel中进行区分大小写的查询。
查找部分字符串匹配
通过部分匹配进行查询是Excel中最具挑战性的任务之一,没有通用的解决方案。 使用哪种公式取决于你的查询值和要查询的列中的值之间有什么样的差异。 在大多数情况下,你会使用LEFT、RIGHT或MID函数来提取值的共同部分,然后将该部分提供给 查找_值 的参数,就像在下面的公式中做的那样。
=vlookup(right(d2,4), $a$2:$b$6, 2, false)
其中D2是查询值,A2:B6是查询表,2是要返回匹配的列的索引号。
关于在Excel中执行部分匹配查找的其他方法,请参见如何通过部分匹配合并两个工作表。
这就是如何在Excel中使用查找函数。 要想仔细了解本教程中讨论的公式,欢迎下载我们的Excel查找公式示例。
在Excel中进行查找的无公式方法
不言而喻,Excel的查询不是一项微不足道的任务。 如果你正在迈出学习Excel领域的第一步,查询公式可能看起来相当混乱和难以理解。 但是,请不要感到气馁,这些技能对大多数用户来说并不是自然而然就能掌握的
为了方便新手,我们创建了一个特殊的工具--合并表向导,它可以在没有任何公式的情况下查询、匹配和合并表格。 此外,它还提供了许多真正独特的选项,即使是高级Excel用户也能从中受益。
- 查询方式 多重标准 也就是说,使用一个或几个列作为唯一的标识符。
- 更新 现有列中的值和 增加新的 专栏 从查询表上看。
- 返回 多次匹配 当与合并行向导结合使用时,它甚至可以在一个单元格中返回多个结果,以逗号或其他方式分开(一个例子可以在这里找到)。
- 还有更多。
使用合并表向导的工作非常简单和直观。 你所要做的就是。
- 选择你想拉动匹配值的主表。
- 选择查询表来提取匹配的数据。
- 定义一个或多个公共列。
- 选择要更新或/和添加到表尾的列。
- 可以选择一个或多个额外的合并选项。
- 点击 完成 而你将在片刻间得到一个结果!
如果你想在自己的工作表上尝试这个插件,欢迎你下载我们的终极套件的试用版,其中包括我们所有的Excel省时工具(总共有70多个工具和300多个功能!)。
可用的下载
Excel查找公式示例(.xlsx文件)。
终极套装14天全功能版(.exe文件)。