问题
日常我们使用VLOOKUP函数一般做一对一的匹配,即每个查找值对应一个结果。如果查找结果不唯一,那么Excel默认会返回第一个结果。但是如果我想获取所有的结果该怎么操作?
原始数据
原始数据共两列:B列班级、C列姓名

预期结果
在单元格E2中输入任意班级名称,在F列能够显示该班级所有人员姓名

解决思路
将一对多转换成一对一,然后再用常规方式进行匹配
操作步骤
在班级列左侧新建一列辅助列
在A2单元格输入公式=B2&COUNTIF($B$2:B2,B2)然后向下拖动

3. 在结果输出位置(F2单元格)输入如下公式 =IFERROR(VLOOKUP($E$2&ROW(A1),A:C,3,0),"")

4. 向下拖动F2单元格中的公式,即可得到所有匹配结果
公式解析
=B2&COUNTIF($B$2:B2,B2)
该公式主要目的是将一对多转换成一对一,即使班级能够和姓名一一对应。COUNTIF函数用于生成当前班级出现的次数。&符号用于连接班级名称和出现次数,这样就生成了班级名称的唯一值。
=IFERROR(VLOOKUP($E$2&ROW(A1),A:C,3,0),"")
ROW(A1)函数可以生成单元格的行号,向下拖动的时候可以用来构造连续的数列。$E$2&ROW(A1)班级和连续数列相结合可以构造出辅助列中的班级。
应用场景
该公式主要应用于自动化更新的报表,比如每天自动更新今天所有到期的客户。如果只是单次获取数据的话,那就完全没有必要设置公式了。
预告
该方法采用的是间接方式,优点在于容易理解,但是需要额外设置辅助列。下期将更新不需要辅助列就能够完成的方法。