北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

FILTER+ISNUMBER+FIND函数实现动态模糊查找!

大家伙,今天要用FILTER函数结合ISNUMBER函数和FIND函数来实现关键字查找。

如下图所示,要查询学历中包含关键字“科”的所有姓名,不管是本科,专科都是我们要筛选出来的:

在姓名这一列的目标单元格输入公式:

=FILTER(B2:B11,ISNUMBER(FIND(G2,D2:D11)))

这是一个由FILTER,ISNUMBER,FIND三个函数组合嵌套起来的动态数组函数,该公式从外到内的解读依次是在D2:D11这个区域中,查找包含G2单元格中内容的所有单元格,然后返回B2:B11区域中对应行的值:

那么满足哪些特定条件的单元格呢?

具体来说,它只会保留那些对应的同一行的D列单元格包含G2单元格中内容的数据。换句话说如果学历这一列里有文字包含“科”这个关键字,那么就把这一行的B列值提取出来。

接下来逐层具体解析:

最内层函数:FIND(G2,D2:D11)

FIND函数是一个查找函数,核心功能是在一个字符串中定位另一个子字符串的位置。如果找到匹配项,就返回子字符串在字符串中的起始位置,这个起始位置是一个具体的数字,否则就会报错VALUE:

注意这里的第二参数是输入了一个范围参数,就会以数组形式运行,对D列的每个单元格执行一次FIND函数的运算,最后会输出一个与D列相同高度的数组结果。

在这里要注意一点,FIND函数是要区分大小写的,如果单元格中的内容,需要区分大小写,可以用SEARCH函数替代。

接着用了一个ISNUMBER函数进行中间处理:ISNUMBER(FIND(G2,D2:D11))

ISNUMBER函数的作用是用来检查一个值是否为数字,如果是,返回逻辑值TRUE,如果不是,返回逻辑值FALSE。

此时用ISNUMBER包裹FIND函数的结果,意思是将前面的结果转换为逻辑值真或假(TRUE/FALSE)

如果FIND函数找到了就会返回数字,ISNUMBER函数返回TRUE

如多FIND函数没有找到就会返回错取值,ISNUMBER函数返回FALSE

现在就得到了一组TRUE/FALSE组成的数组,表示每一行是否满足“D列包含G2的内容”,如果某行显示TRUE,则表示该行所在的D列对应的值中包括G2的内容。

最后使用主函数FILTER:

FILTER函数的第一参数是我们要筛选的数组,这里是B2:B11

第二个参数是条件即我们上面生成的逻辑数组

将上述得到的TRUE/FALSE数组作为FILTER函数的第二参数,FILTER函数会遍历条件数组,当条件为TRUE时,就返回B列中对应的值,当条件为FALSE时,就跳过该行:

最后FILTER函数会返回一个数组,该数组满足B列中所有满足条件的行,即是D列中所有满足G2内容所对应的行,回车之后即可看到:

即可看到FILTER函数将逻辑值为TRUE对应行的结果给提取了出来。此处公式不需要向下拖拉,FILTER函数会动态返回所有符合条件的值,数组会自动溢出。

好了,今天的内容分享完了,如果有不理解的地方。可以在下方评论区打出自己的疑问,一起来讨论一下。

对您有帮助的话,点个赞吧!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言