统计
  • 文章总数:855 篇
  • 评论总数:0 条
  • 分类总数:14 个
  • 最后更新:8月3日

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

本文阅读 4 分钟
首页 常用办公 正文

一向很乐意帮别人解决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
三键生成,非手动录入!
本文来自投稿,不代表本站立场,如若转载,请注明出处:
Excel中查找与替换的常规应用介绍
« 上一篇 03-13
如何快速从Excel图表中截取自己想要的数据
下一篇 » 03-13