程序员|还在手动筛选数据?试试filter这个数组函数,真香!( 二 )


=FILTER(A2:C8{101)


条件式中的{101就是一组单行的布尔值数组 , 分别对应姓名、性别和年龄 , 其中大于等于1则提取保留 , 等于0则剔除 , 此处直接写了条件式结果 。
1.2 filter同时满足多个条件按行筛选性别女且年龄大于50的数据 。
=FILTER(A2:C8(B2:B8=\"女\")*(C2:C8>50))

注意多个条件同时满足情况下 , 使用 * 将多个条件相乘 , 此处不适用and函数 , 是由于and函数的最终结果是唯一值 , 不是数组 。

把条件写在单元格内 , 最终结果如下图所示 。 只有全部满足 , 结果才为1 。 1.3 filter满足多个条件中的任意一个条件按行筛选性别女或年龄大于50的数据 。
=FILTER(A2:C8(B2:B8=\"女\")+(C2:C8>50))

与同时满足条件相比 , 唯一的区别就是多个条件之间使用+相加 , 此时 , 只需有一个满足 , 那么结果至少会大于1 。
1.4 filter同时满足两个条件或满足其他任意一个条件按行筛选年龄小于等于60且性别为女 , 或者年龄小于30的数据
=FILTER(A2:C8((B2:B8=\"女\")*(C2:C8<=60))+(C2:C8<=30))

存在较为复杂的条件时 , 直接使用括号将对应条件合并成另一个新条件 , 再进行运算 。
例如需求中的第一个且条件里的多个条件相乘 , 然后合并在一起与另一个条件相加做或条件 。
2. 使用普通if函数代替实现filter函数效果如果软件版本没有filter , 也想实现类似的效果 , 可以使用if函数搭配数组公式实现 。
当然 , 不支持动态数组的软件版本 , 还是要按照原本的数组公式录入方法进行使用 。

数组公式使用方法
  1. 需提前选中承接数组公式结果的单元格区域
  2. 再输入数组公式
  3. 最后需要按数组确认键 CTRL+SHIFT+回车 确认公式
具体使用 , 可以参考下方案例直接套用公式:
2.1 单条件筛选=SORT(IF(B2:B8=\"男\"A2:C8\"\")-1)

由于单独使用if筛选 , 会导致不符合条件的数据变成空值 , 且留在原有的位置 , 因此使用sort函数 , 将其按倒序排序 , 使其符合条件的值保留在上方 。
不好的点在于最终会对结果数据进行排序 , 如果要不进行排序操作 , 直接剔除空值数据的做法会很复杂 , 不建议使用 。
2.2 多条件筛选同时满足情况下用*链接所有条件 , 或条件情况下用+链接 。 这与filter的多条件用法保持一致 。
=SORT(IF((B2:B8=\"男\")*(C2:C8>60)A2:C8\"\")-1)

if函数筛选的其余情况基本与filter函数的使用条件一致 , 灵活创建条件式生成的布尔值 , 可以实现不同的效果 。
比如在之前发布的unique函数文章中(可看主页文章列表) , 我们就利用了match函数与row函数定位了不重复数据的位置 。
由此 , 你也可以生成对应的布尔值数组 , 可以用来给if函数 , 直接返回所有的不重复数据 , 感兴趣的同学 , 欢迎评论留言 。