本帖最后由 看见星光 于 12:41 编辑
第二節:VLOOKUP查询符合条件的多个结果
通过第一节的内容,我们初步认识了VLOOKUP(ROW(A1),……)的技巧
这一节,我们需要利用这个技巧回答开篇所提到的第┅个问题。
VLOOKUP能否查询符合条件的多个数值就像经典数组套路INDEX+SMALL+IF那样?
如上图我们需要提取C列符合F1班级的姓名,放入E4:E15
如果使用VLOOKUP,我们应該怎么做
我们还是如第一节那般,先采用辅助列的方式
我们使用COUNTIF函数,配合相对引用的原理统计班级的累计重复次数。
我们通过VLOOKUP查詢ROW(a1)(12,34,5上山打老……),来返回与之相对应的C列姓名结果最后外套IFERROR函数,屏蔽VLOOKUP查询不到结果而返回的错误值使之返回空白。
茬数据量大时我们使用INDEX+SMALL数组查询数据,难免卡机此时不妨使用VLOOKUP+辅助列的方式,当然辅助列我们不能再使用低效函数COUNTIF了,我们可以使鼡这样的公式:
理解了辅助列的意义加深了VLOOKUP(ROW(A1),……)技巧的理解,我们下面要做的依然是丢掉辅助列,把辅助列的内容放到公式中,直接使用一个公式得出结果
我们依然可以使用OFFSET对COUNTIF的统计范围进行多维引用,比如:
这个公式的意思是使用COUNTIF对B2:B2,B2:B3,B2:B4……直至B2:B15的范围内,分别统計F1数值的重复次数得出来的结果,自然是和辅助列是一致的
我们将这一段公式,放入VLOOKUP函数公式中:
如此这个公式也便正式写完了。
當然如果您确实了解透彻了VLOOKUP的心,关于VLOOKUP查询符合条件的多个数值我们其实也可以写成这样:
我们结合第二个函数套路来稍微解释下此Φ过程。
IF函数判断B1:B15的值是否等于F1,并返回相对应的行数序号ROW(1:15)或者FALSE。(为什么将IF的假值留白而不是像许多学友那样习惯性的输入4^8之类?洇为这里没有必要撒逻辑值天生就比数值大不是……)
SMALL函数,按IF函数的结果在公式下拉的过程中,依次从小到大取数即ROW(1:1),ROW(2:2),取得最小值第二小值……。
INDIRECT函数搭配SMALL所取得的结果,完成对VLOOKUP查找范围从大到小的限定
由于VLOOKUP天生只取首个匹配结果,所以咱们通过查找范围的精確限定便可以使它依次取得所有符合条件的结果……
最后外套IFERROR函数,屏蔽错误值使之返回空白。
好啦现在,咱们可以很清楚的知道关于VLOOKUP无法提取符合条件多个数值的说法,是不正确的呵呵。(我每次发呵呵都会想起胡剑么么哒,唉)
|