Vlookup函数一对多查找
Excel中Vlookup函数可查询符合条件的一行数据,但如果查询结果符合条件的是多行数据怎么办?例如下面的表格中要查找姓名为“李飞”对应的职务,有3行符合条件的记录,怎样把这符号条件的3行记录都找出来呢?如图1:
图1
要得到的结果为红色方框内内容,如图2:
图 2
方法一:数据透视表
把姓名和职务依次拉到行标签,如图3:
图 3
得到结果如图4:
图 4
在数据透视表的设计菜单下报表布局以表格形式显示,如图5:
图 5
结果如图6:
图 6
方法二:添加辅助列
操作步骤如下:
Step1:在姓名前面插入一个辅助列,A2输入公式=B2&COUNTIF($B$2:B2,B2),下拉填充到表格末端。这样相当于给姓名加了编号。如图7:
图 7
Step2:在H2输入公式=IFERROR(VLOOKUP($G$2&ROW(A1),A:E,5,0),""),下拉到表格末端。
$G$2&ROW(A1)相当于将 VLOOKUP函数的查询值加上了不同的序号。如图8。
图 8
方法三:数组公式
用函数index+small组合实现,公式为:
={INDEX($B$1:$E$8,SMALL(IF($B$1:$B$8=$G$2,ROW($B$1:$B$8),2^20),ROW(1:1)),4)&""}
花括号{}指数组公式,用CTRL+SHIFT+ENTER输入,再向下填充,直到结果为错误值#REF!
公式分解:
第一步:先找出符号条件的数据所在行;
Row()返回的是行号,2^20=1048576,即Excel2007以及2010,2013,2016版本承载的最多的行号。
IF($B$1:$B$8=$G$2,ROW(),2^20) 这个意思是如果找到符号条件的记录就返回那个记录所在的行号,否则就返回EXCEL能承载的最大行号。
公式返回结果得到数组
{1048576,3,4,1048576,1048576,7,1048576}
第二步:添加辅助列,找出数据区域除字段名之外的行号,用公式row(1:1)实现,得到数组{1,2,3,4,5,6,7};
第三步:在第一步计算得到的数组中找出第二步数组的最小值,公式为=SMALL($I$2:$I$8,J2),如图9。
图 9
Small函数返回数组中第K个最小值。
例如,J2=1,公式返回I列数组第1小的数据,J3=2,公式返回第2小的数据。
公式返回得到的数组为{3,4,7,1048576,1048576,1048576,1048576}
第四步:用Index函数查找符合条件的记录。
我们要查找的职务对应第4列,姓名为“李飞”的对应行号是3,4,7行,即第3步公式返回的结果。如图10和11。
图10
图11
关于vlookup函数更多问题可以点击下面的链接地址。