VLOOKUP函数使用频率非常高,同时我被问的相关问题也多了不少,比如VLOOKUP遇到重复值只返回一个怎么办?类似的问题经常被问,今天我们就聊一聊!
▍需求说明
比如下面这个案例,查询一下吕布的几次测试成绩分别多少分!
▍VLOOKUP探路
你熟练地写下下面的公式,然后下拉,希望能查出全部成绩,但是很遗憾,结果全部是相同的,都是第一次的成绩!
=VLOOKUP(E$2,$B$2:$C$11,2,0)
为啥呢?因为VLOOKUP只能返回首次查询的结果!那要怎么办?
很简单,把他们变成唯一即可!
▍变通处理
添加一个辅助列,把查询内容从上往下编个号,方法非常简单 !
=(B2=$E$2)+A1
如果你看不懂上面辅助列逻辑,也可以使用下面的方式!这样复杂一丢丢,但是更加直观,从上往下统计出现的次数!现在查找就变成了查询1、2、3就行了!
=IF($E$2=B2,COUNTIF($B$2:B2,$E$2),"")
查询列是A列,也就是辅助列,结果列是C列,所以第三参数修改为3!
=VLOOKUP(ROW(A1),$A$2:$C$11,3,0)
就是这么简单,如果你非要使用VLOOKUP!
▍多点套路
其实处理1对多的方法特别多,没有必要非VLOOKUP不可,只是大家比较熟悉VLOOKUP而且,向前看!
你比如FILTER函数就挺香
=FILTER(C2:C11,B2:B11=E2)
什么?你版本低不支持?其实也可以自己用VBA写一个自定义函数
这是我一个我的超级自定义函数之一目前测试阶段!功能非常多!参数说明大概如下!设计元素太多~
,内部测试,有待发布!
当然你还可以使用高级筛选,简单操作一下即可,不过函数有优点就是动态更新,高级筛选每次都要操作!
如果你的表格辅助列不方便使用,版本又比较低,还不给使用VBA,那么,推荐使用远古时期的“万金油”处理了!
=INDEX(C:C,
SMALL(
IF($B$2:$B$11=$E$2,ROW($2:$11)),
ROW(A1)
)
)
看上去有点长,如果你对背后的原理感兴趣,可以看我之前的详解教程了! ----->点击直达<庖丁解牛-万金油公式>
好了,今天的教程就到这里,希望对VLOOKUP查找重复值有困惑的同学有所帮助吧!