哈喽,大家好,这里会略懂点Excel的小六子。 今天来给大家讲讲VLOOKUP函数的一对多查询,效果如下图所示: 可能有的小伙伴会说,这题我会,用FILTER函数,秒杀。 也有小伙伴会说:用数据透视表,完美! 一道题有一万种解法,但弱水三千,我只取VLOOKUP这一瓢。 敲重点:我只会VLOOKUP,还能不能一对多查询了? 答案是肯定的,加个辅助列即可。 今天就这个问题给大家介绍两个思路,希望有所帮助。 思路一 1.添加一个辅助列A列,并在A2中输入公式:=B2&COUNTIF($B$1:B2,B2),然后下拉填充。 公式解析: ①COUNTIF函数实现的是对某个区域中的某个值进行计数,所以COUNTIF($B$1:B2,B2)实现的是一个编号的效果。 ②公式中的区域写法是$B$1:B2,当公式下拉的时候,区域的范围会随着增加。得到的结果就是辅助列中部门后面的那些数字,表示部门是第几次出现。 ③用&符号把部门和第几次出现连接起来,作为VLOOKUP的查找范围的首列。 2.在G2单元格建立下拉菜单。 3.在H2中输入公式: =IFERROR(VLOOKUP($G$2&ROW(A1),$A:$D,COLUMN(C1),0),"") 输入公式后回车,再向右向下填充公式。 公式解析: ①在VLOOKUP($G$2&ROW(A1),$A:$D,COLUMN(C1),0)这部分,查找条件是$G$2&ROW(A1)。 ②G2是要查找的部门,ROW(A1)是A1单元格的行号,也就是1,下拉时会变成2、3……,组合以后会形成和辅助列类似的结果,即“部门名称”+“行号序列”,此时就实现了将一对多匹配的问题变成一对一匹配的问题。 ③COLUMN(C1)是为了方便公式可以右拉到H列,不用再为H列重新编写公式。 ④IFERROR让公式不显示错误值。 思路二 1.添加一个辅助列A列,并使用公式:=A1+(B2=$G$2) 这是什么意思? 其实在这个公式中,是利用了比较运算得到一个逻辑值,再利用逻辑值计算得到一组数字。 公式解析: 查找的部门出现的次数,只不过是反推。即当G2中出现数据,且通过逻辑判断在B列中找到时,再与当前单元格相加。比如,下图中,当G2为“合同管理部”时,B列有相同的单元格时,相对应的A列单元格内依次计数为1—4;当B列没有与之相同的单元格时,相对应的A列单元格内显示为0。 最终的公式是: =IFERROR(VLOOKUP(ROW(A1),$A:$D,COLUMN(C1),0),"") 在H2录入公式以后,右拉填充,再向下填充。 注意: 在这个公式中,VLOOKUP的第一参数直接使用ROW(A1),也就是数字1,2,3…… 这里需要有个思想的转化过程,VLOOKUP找的实际是第一个1,第一个2,第一个3等等,这些正好是要找的部门第一次出现,第二次出现,第三次出现等等。 补充tips: 在公式=A1+(B2=$F$2)中,B2=$F$2是一个比较运算,得到的结果是TRUE或FALSE。在Excel中,逻辑值是可以参与计算的,在计算时TRUE相当于1,FALSE相当于0。 好的,以上。 |
|