筛选出包含关键字的结果,已经不容易,若要筛选出不包含关键字的结果,难度更甚。而这些竟然都能通过一条公式实现?
案例:
下图 1 是每个人购买的菜品流水表,其中人和菜都重复出现过。请分别按以下要求查找出不同的结果:
查找出购买的菜品包含“鱼”关键字的所有人
查找出购买的菜品不包含“菜”字的所有人,且去重
效果如下图 2 所示。
解决方案:
匹配出菜品包含“鱼”的所有人。
1. 在 E2 单元格中输入以下公式 --> 回车:
=FILTER(A2:A21,ISNUMBER(FIND(D2,B2:B21)))
公式释义:
FIND(D2,B2:B21):在区域 B2:B21 中查找 D2 单元格的内容,如果找到,返回“鱼”字在 B 列单元格的文本中的位置,结果为一个数值;找不到则返回错误值;
ISNUMBER(...):判断上述公式结果是否为数值,结果为 true 或 false 组成的逻辑值;
FILTER(...):
FILTER 函数的作用是基于布尔值 (True/False) 数组筛选数组;
语法为 FILTER(要筛选的数组或区域,要基于此筛选的布尔值,[筛选结果为空时返回的值])
本案例的公式表示基于 isnumber 返回的布尔值在 A 列中筛选出符合条件的姓名
2. 在 B 列中手工筛选出所有包含“鱼”的结果核对一下,公式结果正确。
匹配出菜品不包含“菜”的所有人。
3. 在 H2 单元格中输入以下公式:
=FILTER(A2:A21,ISERROR(FIND(G2,B2:B21)))
公式释义:
与上一个查询公式唯一不同的是将 isnumber 函数换成了 ISERROR,也就是返回的逻辑值数组中,find 公式结果为错误值的对应 true,除此之外都是 false
4. 在 B 列手工筛选出结果进行核对,公式依然正确。
5. 到了现在,如果需要在 H 列的结果中仅保留姓名唯一值,只需要在整个公式外面套个 unique 函数就可以了。
=UNIQUE(FILTER(A2:A21,ISERROR(FIND(G2,B2:B21))))