【一对多查询的万金油公式】我们对数据进行查询时 , 经常会使用VLOOKUP函数 。但有时,我们会碰到这样的问题,提取符合条件的结果是多个 , 而不是一个,这时候VLOOKUP就犯难了 。
举个例子 , 如下图,左侧A1:C10是一份学员名单表,现在需要根据F1单元格的“EH图班”这个指定的条件,在F2:F10单元格区域中,提取该班级全部学员名单 。
文章插图
文章插图
今天说一个函数查询方面的万金油套路:INDEX+SMALL 。
F2单元格输入以下数组公式,按住Ctrl+Shift键不放,再按回车键,然后向下填充:
=INDEX(B:B,SMALL(IF(A$1:A$10=F$1,ROW($1:$10),4^8),ROW(A1))),"")
这个公式看起来可就比上面那个VLOOKUP的解法苗条养眼多了,坦白的说,很搭俺星光十年后的匪号——小清新 。
公式讲解
IF(A$1:A$10=F$1,ROW($1:$10),4^8)
这部分,先判断A1:A10的值是否等于F1,如果相等,则返回A列班级相对应的行号,否则返回4^8 , 也就是65536,一般情况下,工作表到这个位置就没有数据了 。
结果得到一个内存数组:
{65536;2;3;65536;65536;65536;65536;8;65536;10}
文章插图
文章插图
SMALL函数对IF函数的结果进行取数,随着公式的向下填充,依次提取第1、2、3……n个最小值 , 由此依次得到符合班级条件的行号 。
随后使用INDEX函数,以SMALL函数返回的行号作为索引值,在B列中提取出对应的姓名结果 。
当SMALL函数所得到的结果为65536时 , 意味着符合条件的行号已经被取之殆尽了,此时INDEX函数也随之返回B65536单元格的引用,结果是一个无意义的0,为了避免这个问题 , 可以在公式后面加上一个小尾巴 &""
利用&””的方法,很巧妙的规避了无意义0值的出现,只是当查找结果为数值或日期时,这个方法会把数值转变为文本值 , 并不利于数据的准确呈现以及再次统计分析 。
- 年过四十的女人白发再多也别染黑,土气又老气,三个妙招告别烦恼
- 春钓懂地利:春季选钓位的三个思路
- 为啥理发师都喜欢理“两边剪短”的发型?有三个优点,建议了解下
- 让家中跳蚤通通消失的方法 家里有跳蚤怎么办能除根
- 导致猫拉稀的3种原因 猫拉稀吃什么药管用
- 水稻最早起源于什么地方 最早种植水稻的是哪个国家
- 定都开封的朝代有哪些 开封是几朝古都
- 好用的手机修图软件app排名 手机修图用什么软件最好
- 韩非子的出现象征着一个时代的落幕 韩非子是什么家
- 职场必备 一键将word文档或Excel表格转成完整的图片