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函数更多问题可以点击下面的链接地址。

Vlookup函数各种疑难杂症汇总

(0)

相关推荐