咱们对数据进行查询时,常常会使用VLOOKUP函数。但有时咱们提取符合条件的结果是多个,而不是一个,这时候VLOOKUP就犯难了。html
举个例子
以下图,左侧A1:C10是一份学员名单表,如今须要根据F1单元格的“EH图班”这个指定的条件,在F2:F10单元格区域中,提取该班级所有学员名单。数组
F1的值是“EH图表班”,须要在F2:F10单元格区域获得图表班相关成员的人名。
接下来就分享一个函数查询方面的万金油套路:less
INDEX+SMALL+IF函数
F2单元格输入如下数组公式,按住Ctrl+Shift键不放,再按回车键,而后向下填充:
=IFERROR(INDEX(B:B,SMALL(IF(A$1:A$10=F$1,ROW($1:$10)),ROW(A1))),"").net
IF(A$1:A$10=F$1,ROW($1:$10))
这部分,先判断A1:A10的值是否等于F1,若是相等,则返回A列班级相对应的行号,不然返回FALSE,结果获得一个内存数组:
{FALSE;2;3;FALSE;FALSE;FALSE;FALSE;8;FALSE;10}
再来看这部分:
SMALL(IF(A$1:A$10=F$1,ROW($1:$10)),ROW(A1))
SMALL函数对IF函数的结果进行取数,随着公式的向下填充,依次提取第一、二、3……n个最小值,由此依次获得符合班级条件的行号。
随后使用INDEX函数,以SMALL函数返回的行号做为索引值,在B列中提取出对应的姓名结果。
当SMALL函数所获得的结果为错误值#NUM时,意味着符合条件的行号已经被取之殆尽了,此时INDEX函数也随之返回一个错误值,为了不公式返回一个错误值,最后使用IFERROR函数进行规避,使之返回一个空文本""。excel
不少时候,一些朋友喜欢把INDEX+SMALL+IF的套路写成:
=INDEX(B:B,SMALL(IF(A$1:A$10=F$1,ROW($1:$10),4^8),ROW(A1)))&""
或
=INDEX(B:B,SMALL((A$1:A$10<>F$1)/1%+ROW($1:$10),ROW(A1)))&""
这两个套路,经过引值真空单元格搭配&””的方法,很巧妙的规避了错误值的出现,并且公式的长度获得了精简,是IFERROR函数未出现前处理错误值的经常使用技巧。
只是当公式的查找结果为数值或者日期时,这个方法会把数值变成文本值,并不利于数据的准确呈现以及再次统计分析。
好比一个简单的SUM求和,对于此类文本数据的统计都是麻烦的,缘由是大部分统计函数都忽略文本值,不予计算。
因此一般仍是建议你们使用IFERROR函数来处理错误值。htm
最后留下一道练手题,以下图,根据A1:C10区域的数据,将E列相关班级的姓名,填充到F2:I5区域。索引