lookup搭配frequency,干活不累!
同学们,大家好。今天和大家分享的是如何根据姓名查找合并单元格中的部门。先来看下源数据和查询后的效果。下图左表是各部门名单表,其中部门列是合并单元格。现在要根据姓名来查询出对应的部门,效果如右表所示。E1单元格设置了数据验证,E2单元格的结果会随着E1单元格姓名的变化而改变。AB两列设置了条件格式,为了方便和右表的结果对照。
其实这个问题在之前的文章《值得收藏!lookup函数常用套路合集》中说过,看过公众号文章的同学应该是知道的。不过今天我们要换一种方法来完成,用的就是lookup+frequency的黄金搭档。
在E2单元格输入公式=LOOKUP(1,0/FREQUENCY(-MATCH(E1,B:B,),-(A1:A11<>"")*ROW(1:11)),A1:A11),完成。公式看起来还是有点长的,不过不用担心,慢慢拆解就可以了。外层是lookup的用法,内层是frequency的用法。只要这2个函数都搞清楚了,就没什么难的。
以下图的"李东林"为例说明,先来看FREQUENCY(-MATCH(E1,B:B,),-(A1:A11<>"")*ROW(1:11))这部分,其中frequency的第1参数是个match函数,用来查找E1在B列中的位置,这里是9,然后前面再加个负号,就是-9。第2参数-(A1:A11<>"")*ROW(1:11)返回的结果是{-1;-2;0;0;-5;0;-7;0;0;0;0},也就是A1:A11中不等于空的返回负行号,等于空的返回0。
上一步实际上就是FREQUENCY(-9,{-1;-2;0;0;-5;0;-7;0;0;0;0})。那么它返回的结果是{0;0;0;0;0;0;1;0;0;0;0;0}。这个结果是怎么返回的,我这里再说一次。首先要将第2参数在内部进行升序排序,然后统计第一参数-9在升序排序后各区间的个数。由于统计的结果是排序后的结果,所以还要恢复原来的排序,再返回对应的结果。大家可以看下面的示意图来理解。
frequency返回的结果{0;0;0;0;0;0;1;0;0;0;0;0}中的1的位置是7,刚好对应的就是第7行的"技术部",接下来用lookup完成就可以了。也就是下面这个公式,=LOOKUP(1,0/{0;0;0;0;0;0;1;0;0;0;0;0},A1:A11)。这个我相信大家都能明白的。最关键的还是要理解frequency的用法。
lookup会找小于等于它的最大值,frequency会找大于等于它的最小值,而它们的结合使用,又能创造出奇妙的“火花”。
感兴趣的同学可以下载文件研究下,顺便可以看下AB两列中条件格式的公式,条件格式也是一个很好用的功能。
链接:
https://pan.baidu.com/s/14n0Kozn7iWXvuFPj9toV8Q
提取码:2zgy