北屋教程网

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

FILTER+ISNUMBER+FIND+LEN+IF函数方便实现关键字模糊查找

大家好,今天咱们要解决的问题是,如下图所示,通过输入名字或者关键字就可以找到所有的相关结果:

在目标单元格中输入=FILTER函数

第一参数是我们要筛选查找的数据区域:

第二个参数是我们要指定的条件,就是姓名这一列要等于我们输入的关键字

第三个参数就是当找不到结果的时候要显示什么,这里给它输入无记录

点击确定,公式就写好了,来测试一下效果,比如说查找张三的全部信息:

张三的数据结果出来了,但是现在只能精确查找,就是要输入全名才可以,如果我想查找出来姓为张的所有员工信息,就查不出来:

接下来咱们继续优化,使得单个字模糊查找也可以。接着引入第二个函数FIND函数,这个函数想必大家都不陌生,在查找字符的时候基本上都用它,咱们现在D列中测试一下,咱们现在要在姓名中查找出来所有姓名带张字的员工,所以在D列的目标单元格输入以下公式:

=FIND(F2,B2:B9) 公式表示为在 B2:B9 区域中的每个单元格中查找F2的文本,如果找到则返回位置数值,如果没有找到则返回错误值

确定之后,所有包含F2中文本的单元格就会显示对应的数字,这个数字表示的是F2中的文本在单元格中的位置,所有带张字姓名的结果都找到了,显示成数字1,并非是一定显示数字1,在这里恰好位置都在第一位,没有找到的都显示错误值

刚才我们说到FILTER函数的第二参数是一个判断条件,当条件为TRUE的时候条件成立,当条件为FALSE的时候条件不成立,所以在这里要把数字和错误值转为逻辑值TRUE或者FALSE,这个时候加一个可以判断数值的函数ISNUMBER,这样就可以把FIND找到的结果转为TRUE或者FALSE,生成一个与B2:B9相同维度的逻辑值数组。

以上得到的这个结果就可以作为FILTER函数的第二参数,直接把该公式复制到FILTER函数的公式中作为第二参数:

此时所有带张字的人名信息就都给查询出来了,但是这样做仍然有瑕疵,如果不输入关键字的话,公式结果就会显示全部数据:

正常情况下,没有输入关键字应该不显示才对,咱们继续优化,在公式的前面加一个IF函数,如果关键字是空,那就不显示,否则就按照公式的结果显示,在这里咱们使用函数LEN来判断关键字这里有没有内容,没有内容长度就是0,结果就不显示,如果有关键字就显示FILTER函数的结果:

回车看一下效果,结果没问题了:

但是还是不够完美,能不能根据我们返回的结果自动加上边框呢?

选中结果范围,找到开始选项下的条件格式,打开新建规则

使用公式确定要设置格式的单元格,输入公式 =len($E5)>0 公式的意思是判断结果区域第一个活动单元格有没有内容,如果长度大于0,就表示有结果了:

点击格式,选择外边框,

最后确定,完成设置。来看一下效果:

边框会根据结果的数量自动加上边框。

最后总结一下该公式的工作原理分步解析:

=IF(LEN(F2)=0,"",FILTER(A2:C9,ISNUMBER(FIND(F2,B2:B9))))

首先输入验证函数IF函数

LEN(F2)=0 会检测F2是否为空,如果为空,则直接返回"",结束计算,如果不为空,则进入FILTER函数进行筛选

FIND(F2,B2:B9) FIND函数会在B2:B9区域中逐行查找F2文本,假设F2的文本是 张

B列值

FIND结果

ISNUMBER结果

1

TRUE

赵六

错误值

FALSE

张三

1

TRUE

ISNUMBER(FIND(F2,B2:B9)) 最终ISNUMBER函数输出一列逻辑数组,长度与B2:B9一样

接着由FILTER函数进行筛选

FILTER(A2:C9,{TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE},"无记录")

此时FILTER函数会遍历 A2:C9 的每一行

第一行 条件为TRUE 保留第一行

第二行 条件为FALSE 过滤第二行

第三行 条件为FALSE 过滤第三行

按此往下推,最终返回所有逻辑值为TRUE的行,逻辑值为FALSE的行,返回无记录。

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