欢迎光临草根哥
www.cgg6.com

Excel数据多重筛选,请用函数解决

一向很乐意帮别人解决office问题:一是我真心帮助别人(其实是想听别人夸赞我好厉害???);二是遇到新问题时,也可以学习新知识,积累经验。
昨天有个姑娘找我,问了这个问题:
当时在和朋友聚会,第一反应就是用large,如何算出内存数组才是关键。
large用法:返回一组数据中排名第N个最大值:
=large(数据区域,第N个)
我想了半天,index, vlookup等都需要用到辅助列,请教一位高手,高手用了两种方法:自定义函数mlookup和5个函数嵌套:
(数据有所改动,不影响公式)
我向高手致敬!
不过,我想还有什么更简单的方法呢?对函数免疫的人看到一串函数应该是一脸茫然的。
晚上回家路上,姑娘回我,说用我在课上讲过的if就可以构建一个内存数组:
{=large(if(B2:B9=”机长”)*(C2:C9=”A”),D2:D9,0),3)}

我们用“公式”——“公式审核”——“公式求值”来看看if是怎么创建满足条件的内存数组的:
首先,在工种区域B2:B9中找出等于“机长”的单元格,满足条件则返回“TRUE”,否则就是“FASLE”
同理,查找出级别区域C2:C9中等于“A”的单元格,满足条件则返回“TRUE”,否则就是“FASLE”:
在Excel函数中:
TRUE乘以TRUE等于TRUE, TRUE=1, 即:
TRUExTRUE=TRUE=1
TRUE和FALSE相乘等于FASLE, FALSE=0,即:
TRUExFALSE=FALSE=0
于是得出下图:
1和0分别与D2:D9相乘:
得出内存数组:{188;0;154;126;0;108;0;0}
肉眼检验一下,排名第3的就是126了:
与手工筛选出来的结果一致:
姑娘真棒!??????
用了发散性思维用最简单的方法解决了问题,避免了复杂化!??????
貌似我有这样的趋势:学了越多函数,就把最简单实用地抛之脑后,想要用更高深的函数,好能显示出自己懂很多一样——???
我又想:可以直接把large替换成small吗?
small用法:返回一组数据中排名倒数第N最小值:
=small(数据区域,第N个)
求倒数第2小的值,于是我试了试:
{=small(if(B2:B9=”机长”)*(C2:C9=”A”),D2:D9,0),2)}
居然返回为0!!!怎么可能!!!
我赶紧用公式求值看了一下:
原来是有4个0值,怪不得,所以,我修改了一下公式:将0换成了返回空值“”
{=small(if(B2:B9=”机长”)*(C2:C9=”A”),D2:D9,””),2)}
同样用筛选验证一下:
成功!✌?️✌?✌?
再次提醒:所有数组函数公式前后的{ }均由
Ctrl+Shift+Enter
三键生成,非手动录入!
赞(0)
版权声明:
文章名称:《Excel数据多重筛选,请用函数解决》
文章链接:http://www.cgg6.com/3642.html
声明:文章版权归本站自创作者所有,未经允许不得转载

评论 抢沙发

评论前必须登录!