今天继续为大家来分享Excel常用函数的--今天的主角是vlookup函数。
先简单介绍下VLOOKUP函数,它的语法规则如下:VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
lookup_value:要查找的值,可以是单元格引用或常量。
table_array:包含要查找的值的表格区域,必须至少包含两列,第一列是查找值的列,第二列是返回值的列。
col_index_num:要返回的列的索引号,从左到右计数,第一列为1。
range_lookup:可选参数,指定是否进行近似匹配。如果为TRUE或省略,则进行近似匹配;如果为FALSE,则进行精确匹配。
01 反向查询

如图,需要从数据表中,查找出“语文为66分的学生”。下面我们还是通过分析Vlookup函数的四个参数来总结公式的写法。
第一个参数“找谁”,在这里我们要找的是“语文为66分的学生”,也就是单元格H3,;
第二个参数“在哪里找”,也就是查找的范围,由于要查找的是“语文为66分的学生”,因此查找范围是英语和姓名所在的列(公式中B2:B8,A2:A8);
第三个参数“返回第几列的内容”,要查找的是“语文为66分的学生”,因此要返回的就是“姓名”所在的列(公式中2,因为通过CHOOSE调换了语文列数据和姓名列数据,所以姓名就排在了第二列);
第四个参数“精确找还是模糊找”,在这里既然要返回的“学生的姓名”,由于每个学生的姓名都是唯一的,因此是“精确找”。
通过上面的分析,该公式应该写成=VLOOKUP(H3,CHOOSE({1,2},B2:B8,A2:A8),2,0)
VLOOKUP函数的查询值要求必须位于查询区域中的首列,在这里被查找值“语文”不在数据表的首列,因此通过CHOOSE函数将目标数据“语文”转换到了首列。
CHOOSE函数第一参数使用常量数组,将查询值所在的B2:B8和返回值所在的A2:A8在内存中重新整合成了一个两列多行数组。生成的数组符合VLOOKUP函数的查询值必须位于数据区域中首列的要求。最终,VLOOKUP函数以“语文”作为查询条件,在内存数组中查询并返回了对应的学生姓名,实现了反向查询。
02 多条件查询

如图,需要从数据表中,查找出“语文19”且“理综96”的学生。
首先要用连接符“&”将两个条件“语文和理综” (公式中的H3&I3)合并成一个新的字符串作为VLOOKUP函数的查询条件。
接着再用连接符“&”将B列的语文和E列的理综进行连接(公式中的B2:B8&E2:E8)。
然后用IF函数在内存中构造出语文理综在前、姓名在后的两列多行数组。
VLOOKUP函数在IF函数构造出的内存数组首列中查询符合条件的数学政治字符串的位置,返回对应的姓名。
查询公式为:=VLOOKUP(H3&I3,IF({1,0},B2:B8&E2:E8,A2:A8),2,0)
注意:图中公式显示被{}包裹,输入时请勿输入{},有{}是因为本公式是数组公式。
请在输入完公式后按键盘[Ctrl+Shift+Enter],数组公式仅能通过此快捷键输入。
03 一对多查询
如图,需要从数据表中,查询出“英语为22的学生”。首先在单元格A2中输入公式:=(E2=$I$3)+A1,向下复制直到A8。该公式的作用是:E列中的英语成绩每满足一次条件(即公式中的E2=$I$3),辅助列A列的序号就增加1。

然后在单元格J3中输入公式:=IFERROR(VLOOKUP(ROW(H1),A:B,2,0),""),向下拖动就得到全部“英语为22分”的学生姓名。
注意:VLOOKUP函数使用1至N的递增序列作为查询值,使用A:B列作为查询区域,以精确匹配的方式返回与之相对应的B列的姓名。查找区域必须由辅助列A列开始。最后将辅助隐藏即可。

虽然vlookup函数可以通过如上添加辅助列的方式达到“一对多查询”的目的,但vlookup函数本通常用于在一个数据表中查找一个特定值,并返回该值所在行的相关信息。
因此,不是很建议用vlookup函数来进行“一对多查询”,建议配合使用INDEX和MATCH函数或者FILTER函数。
f