Table of contents
这些例子将教你如何对多个标准进行Vlookup,返回一个特定的实例或所有的匹配,在多个工作表中做动态Vlookup,以及更多。
这是该系列的第二部分,将帮助你利用Excel VLOOKUP的力量。 这些例子意味着你知道这个函数是如何工作的。 如果没有,那么从Excel中VLOOKUP的基本用途开始就很合理。
在进一步行动之前,让我简单地提醒你一下语法的问题。
VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup] )现在大家都在同一起跑线上了,让我们仔细看看高级VLOOKUP公式的例子。
如何Vlookup多个标准
当涉及到在整个数据库中搜索某个数值时,Excel的VLOOKUP功能确实很有帮助。 然而,它缺少一个重要的功能--它的语法只允许一个查询值。 但是,如果你想用几个条件来查询呢? 有一些不同的解决方案供你选择。
公式1.有两个标准的VLOOKUP
假设你有一个订单列表,想根据2个条件找到数量。 客户名称 和 产品 一个复杂的因素是,每个客户都订购了多个产品,如下表所示。
在这种情况下,通常的VLOOKUP公式不会起作用,因为它是根据你指定的一个查询值来返回第一个找到的匹配。
为了克服这个问题,你可以添加一个辅助列,并将两个查询列的值连接起来( 客户 和 产品 )。 重要的是,帮助列应该是 最左边的 列,因为Excel VLOOKUP总是在这一列搜索查找值。
因此,在你的表格左边添加一列,并在该列上复制下面的公式。 这将用B列和C列的值来填充辅助列(为了更好地阅读,中间的空格字符是连接起来的)。
=B2&" "&C2
然后,使用一个标准的VLOOKUP公式,将两个标准放在 查找_值 参数,用空格隔开。
=VLOOKUP("Jeremy Sweets", A2:D11, 4, FALSE)
或者,在不同的单元格(在我们的例子中是G1和G2)中输入标准,然后将这些单元格连接起来。
=VLOOKUP(G1&" "&G2, A2:D11, 4, FALSE)
因为我们想从D列返回一个值,D列是表格数组中的第四个,我们用4来表示 col_index_num ...... 范围查询 参数设置为FALSE,以实现Vlookup的精确匹配。 下面的截图显示了结果。
如果你的查询表是在 另一张 例如,在你的VLOOKUP公式中包括工作表的名称。
=VLOOKUP(G1&" "&G2, Orders! A2:D11, 4, FALSE)
或者,为查询表创建一个命名的范围(比如。 订单 ),使公式更容易阅读。
=VLOOKUP(G1&" "&G2, Orders, 4, FALSE)
更多信息,请看如何在Excel中从另一个工作表进行Vlookup。
注意:为了使公式正常工作,辅助列中的值应以完全相同的方式连接在一起。 查找_值 例如,我们在帮助列(B2&" "&C2)和VLOOKUP公式(G1&" "&G2)中都使用空格字符来分隔标准。
公式2.带有多个条件的Excel VLOOKUP
理论上,你可以使用上述方法来Vlookup两个以上的标准。 然而,有几个注意事项。 首先,一个查找值被限制在255个字符,其次,工作表的设计可能不允许添加一个帮助列。
幸运的是,微软Excel经常提供不止一种方法来做同样的事情。 要Vlookup多个标准,你可以使用INDEX MATCH组合或最近在Office 365中引入的XLOOKUP功能。
例如,要根据3个不同的值进行查询( 日期 , 客户名称 和 产品 ),使用以下公式之一。
=index(d2:d11, match(1, (g1=a2:a11) * (g2=b2:b11) * (g3=c2:c11), 0)
=xlookup(1, (g1=a2:a11) * (g2=b2:b11) * (g3=c2:c11), d2:d11)
在哪里?
- G1是标准1(日期)。
- G2是标准2(客户名称)。
- G3是标准3(产品)。
- A2:A11是查询范围1(日期)。
- B2:B11是查询范围2(客户名称)。
- C2:C11是查询范围3(产品)。
- D2:D11是返回范围(数量)。
注意:在除Excel 365以外的所有版本中,INDEX MATCH应该作为CSE数组公式按Ctrl + Shift + Enter输入。 在支持动态数组的Excel 365中,它也可以作为一个普通公式使用。
关于公式的详细解释,请参见。
- 有多个标准的XLOOKUP
- 具有多个标准的索引匹配公式
如何使用VLOOKUP获得第2、第3或第n个匹配的信息
正如你已经知道的,Excel VLOOKUP只能获取一个匹配值,更确切地说,它返回第一个找到的匹配值。 但是,如果你的查找数组中有几个匹配值,而你想获取第2或第3个实例,该怎么办? 这个任务听起来相当复杂,但解决办法确实存在
公式1.Vlookup第N个实例
假设你在一栏里有客户的名字,在另一栏里有他们购买的产品,你想找到某个客户购买的第二或第三件产品。
最简单的方法是像我们在第一个例子中那样,在表的左边添加一个辅助列。 但是这一次,我们将用客户名称和发生数来填充它,比如" John Doe1 ", " John Doe2 ",等等。
要获得出现的情况,使用COUNTIF函数和混合范围引用(第一个引用是绝对的,第二个是相对的,如$B$2:B2)。 由于相对引用根据复制公式的单元格的位置而改变,在第3行它将成为$B$2:B3,在第4行--$B$2:B4,以此类推。
与客户名称(B2)串联后,公式为以下形式。
=B2&COUNTIF($B$2:B2, B2)。
上述公式进入A2,然后根据需要向下复制到多个单元格。
之后,在不同的单元格(F1和F2)中输入目标名称和出现次数,并使用下面的公式来Vlookup一个特定的出现次数。
=VLOOKUP(F1&F2, A2:C11, 3, FALSE)
公式2.Vlookup第二次出现
如果你正在寻找查找值的第2个实例,那么你可以不使用辅助列。 相反,通过使用INDIRECT函数和MATCH动态地创建表数组。
=VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11"), 2, FALSE.)
在哪里?
- E1是查询值
- A2:A11是查询范围
- B11是查询表的最后一个单元格(右下角)。
请注意,上述公式是为查询表中的数据单元从第2行开始的特定情况编写的。 如果你的表在工作表的中间某处,请使用这个通用公式,其中A1是查询表中包含列标题的左上角单元。
=VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+1+ROW(A1))& ":B11"), 2, FALSE)
这个公式如何运作
这里是公式的关键部分,它创建了一个 动态Vlookup范围 :
INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&" :B11")
配置为精确匹配的MATCH函数(最后一个参数为0)将目标名称(E1)与名称列表(A2:A11)进行比较,并返回找到的第一个匹配的位置,在我们的例子中是3。 这个数字将被用作vlookup范围的起始行坐标,所以我们给它加2(+1以排除第一个实例,+1以排除第1行的列标题)。另外,你可以使用1+ROW(A1)来根据标题行(在我们的例子中是A1)的位置自动计算出必要的调整。
结果,我们得到以下文本字符串,INDIRECT将其转换为一个范围引用。
INDIRECT("A"&5&":B11") -> A5:B11
这个范围到了 表_数组 VLOOKUP的参数,迫使它从第5行开始搜索,忽略了查找值的第一个实例。
vlookup(e1, a5:b11, 2, false)
如何在Excel中进行Vlookup并返回多个值
Excel的VLOOKUP函数被设计成只返回一个匹配项。 有没有一种方法可以Vlookup多个实例? 是的,有,尽管不是很容易。 这需要综合使用几个函数,如INDEX、SMALL和ROW是一个数组公式。
例如,下面可以在B2:B16的查询范围内找到所有出现的查询值F2,并从C列返回多个匹配值。
{=iferror(index($c$2:$c$11, small(if($f$1=$b$2:$b$11, row($c$2:$c$11)-1,""), row()-1)),"") }
在你的工作表中,有2种方法可以输入公式。
- 在第一个单元格中输入公式,按Ctrl + Shift + Enter ,然后向下拖动到其他几个单元格。
- 选择单列中相邻的几个单元格(下面截图中的F1:F11),输入公式,按Ctrl + Shift + Enter完成。
无论哪种方式,你输入公式的单元格数量应该等于或大于可能匹配的最大数量。
关于公式逻辑的详细解释和更多的例子,请看如何在Excel中VLOOKUP多个值。
如何在行和列中进行Vlookup(双向查找)。
双向查询 (aka 矩阵查询 或 二维查询 在Excel中,有几种不同的方法来进行二维查找,但由于本教程的重点是VLOOKUP函数,我们自然会使用它。
在这个例子中,我们将利用下表的月度销售额,并制定一个VLOOKUP公式来检索某个月的特定项目的销售数字。
项目名称在A2:A9,月份名称在B1:F1,目标项目在I1,目标月份在I2,公式如下。
=vlookup(i1, a2:f9, match(i2, a1:f1, 0), false)
这个公式如何运作
该公式的核心是标准的VLOOKUP函数,用于搜索与I1中的查询值完全匹配的数据。 但是,由于我们不知道具体月份的销售额究竟在哪一列,所以我们不能直接向该公式提供列号。 col_index_num 为了找到这一列,我们使用以下MATCH函数。
匹配(i2, a1:f1, 0)
翻译成英文,该公式说:查找A1:F1中的I2值,并返回它在数组中的相对位置。 通过给第三个参数提供0,你指示MATCH找到与查找值完全相等的值(这就像用FALSE表示 范围查询 VLOOKUP的参数)。
自 叁 是在查找数组中的第4列,MATCH函数返回4,这将直接进入 col_index_num VLOOKUP的参数。
vlookup(i1, a2:f9, 4, false)
请注意,虽然月份名称从B列开始,但我们使用A1:I1作为查询数组。 这样做是为了使MATCH返回的数字与该列在《中国统计年鉴》中的位置相对应。 表_数组 的VLOOKUP。
要了解在Excel中执行矩阵查询的更多方法,请看INDEX MATCH MATCH和其他二维查询的公式。
如何在Excel中做多个Vlookup(嵌套Vlookup)?
有时可能发生的情况是,你的主表和查询表没有一个共同的列,这使你无法在两个表之间做Vlookup。 然而,存在另一个表,它不包含你正在寻找的信息,但与主表有一个共同的列,与查询表有另一个共同的列。
下面的图片说明了这种情况。
我们的目标是将价格复制到主表,根据 项目IDs 问题是,包含价格的表格中没有 项目IDs 这意味着我们将不得不在一个公式中做两个Vlookups。
为方便起见,让我们先创建几个命名的范围。
- 查询表1被命名为 产品 (D3:E10)
- 查询表2被命名为 价格 ( G3:H10 )
这些表格可以在同一或不同的工作表中。
而现在,我们将执行所谓的 双重Vlookup ,又名 嵌套Vlookup .
首先,做一个VLOOKUP公式,在查找表1中查找产品名称(名为 产品 ) 基于项目ID(A3)。
=VLOOKUP(A3, Products, 2, FALSE)
接下来,将上述公式放入 查找_值 另一个VLOOKUP函数的参数,从查询表2中提取价格(名为 价格 ) 基于嵌套的VLOOKUP返回的产品名称。
=VLOOKUP(VLOOKUP(A3, Products, 2, FALSE), Prices, 2, FALSE)
下面的截图显示了我们的嵌套Vlookup公式的运行情况。
如何动态地Vlookup多个工作表
有时,你可能有相同格式的数据被分割到几个工作表中,而你的目的是根据某个单元格的关键值从特定的工作表中提取数据。
这一点从一个例子中可能更容易理解。 假设,你有几个相同格式的区域销售报告,你希望得到某个特定产品在某些地区的销售数字。
像前面的例子一样,我们从定义几个名字开始。
- CA表的A2:B5范围被命名为 CA_Sales .
- FL表的A2:B5范围被命名为 FL_Sales .
- KS表的A2:B5范围被命名为 KS_Sales .
正如你所看到的,所有命名的范围都有一个共同的部分( 销售 )和独特的部分( CA , FL , 锦州 请确保以类似的方式命名你的范围,因为这对我们将要建立的公式至关重要。
公式1.INDIRECT VLOOKUP,动态地从不同的工作表中提取数据
如果你的任务是检索多个工作表的数据,VLOOKUP INDIRECT公式是最好的解决方案--紧凑且易于理解。
对于这个例子,我们以这种方式组织汇总表。
- 在A2和A3中输入感兴趣的产品,这些是我们的查询值。
- 在B1、C1和D1中输入命名范围的唯一部分。
现在,我们将包含唯一部分(B1)的单元格与普通部分("_Sales")连接起来,并将结果字符串送入INDIRECT。
INDIRECT(B$1&"_Sales")
INDIRECT函数将字符串转换为Excel可以理解的名称,你将它放在 表_数组 VLOOKUP的参数。
=VLOOKUP($A2, INDIRECT(B$1& "_Sales"), 2, FALSE)
上面的公式到了B2,然后你把它向下和向右复制。
请注意,在查找值($A2)中,我们用绝对单元格引用锁定了列坐标,这样当公式被复制到右边时,该列保持固定。 在B$1引用中,我们锁定了行,因为我们希望列坐标改变,并根据公式被复制到的列,向INDIRECT提供一个适当的名称部分。
如果你的主表组织方式不同,查询值在一行,范围名称的唯一部分在一列,那么你应该在查询值中锁定行坐标(B$1),在名称部分锁定列坐标($A2)。
=VLOOKUP(B$1, INDIRECT($A2& "_Sales"), 2, FALSE)
公式2.VLOOKUP和嵌套IF来查询多个工作表
在你只有两到三个查询表的情况下,你可以使用一个相当简单的VLOOKUP公式和嵌套的IF函数,根据特定单元格的关键值选择正确的表。
=VLOOKUP($A2, IF(B$1="CA", CA_Sales, IF(B$1="FL", FL_Sales, IF(B$1="KS", KS_Sales")), 2, FALSE)
其中$A2是查询值(项目名称),B$1是关键值(状态)。
在这种情况下,你不一定需要定义名称,可以使用外部引用来引用另一个工作表或工作簿。
更多的公式例子,请看如何在Excel中跨多个工作表进行VLOOKUP。
这就是在Excel中使用VLOOKUP的方法。 感谢你的阅读,希望下周能在我们的博客上见到你
供下载的实践工作手册
高级VLOOKUP公式示例(.xlsx文件)。