直接来看需求吧!提取对应的简称
简单来说就是看看科目名称中是否存在简称存在简称列表中的内容,如果存在请输入到B列!
这玩意典型的查找,一般新手肯定想到了IF+FIND这个思路,我们先来写一下!
▍新手常见写法-开火车
▼新手公式
=IF(ISNUMBER(FIND($D$2,A2)),$D$2,IF(ISNUMBER(FIND($D$3,A2)),$D$3,IF(ISNUMBER(FIND($D$4,A2)),$D$4,IF(ISNUMBER(FIND($D$5,A2)),$D$5,IF(ISNUMBER(FIND($D$6,A2)),$D$6,IF(ISNUMBER(FIND($D$7,A2)),$D$7,IF(ISNUMBER(FIND($D$8,A2)),$D$8,"")))))))
新手能想到使用IF嵌套来写一般是正常的思路,因为函数储备不足!如果能写对,应该也是值得骄傲,我们都是这么过来的!多层嵌套也是考验自己眼力劲的!
但是这样真不是一种非常合适的方法,因为如果简称内容很多,基本没有通用性和扩展性!
如果非要使用这种思路,我们是否可以使用IFS来简化一下!但是也就是简化了IF部分,基本还是很长!
我们换一种思路,考虑查找匹配类函数来处理这一类问题!
▍MATCH匹配思路
▼MATCH思路
=INDIRECT("D"&MAX(ISNUMBER(MATCH("*"&$D$2:$D$8&"*",A2,))*ROW($D$2:$D$8)))
思路解析:首先我们要明白一点,MATCH第一参数支持通配符,且可以使用多个内容去匹配位置,返回的结果也是多个,一一对应!这里我们把所有关键词都加上通配符去名称中查找,意思如果包含这个关键词,MATCH结果就是一个对应位置的数字,使用ISNUMBER判断即可,然后返回对应的行号,因为是数组,我们需要使用一个聚合函数来提取唯一值,这里MAX或者MIN都可以,如果不存在多个关键词的情况下!
但是这其实还是有点复杂了,我们可以使用更加简单的LOOKUP+FIND套路来处理!
▍LOOKUP+FIND-大道至简
=LOOKUP(1,0/FIND($D$2:$D$8,A2),$D$2:$D$8)
这里利用的就是LOOKUP二分法查找,如果第一参数比第二参数都大,那么返回第二参数中最后一个数值对应的结果!扩展性也很好,非常的简化!
内容是讲完了,但是按照老铁们每期的提问惯例
肯定要问:“如果有多个关键词呢?能不能都提取出来合并到一个单元格中?”
我只能回答:能!或者行! 还是中!
▍多个关键词的困境
▼BYROW逐行处理
=TEXTJOIN(",",,BYROW($D$2:$D$8,LAMBDA(x,IF(ISNUMBER(FIND(x,A2)),x,""))))
公式的意思就是用每一个关键词去内容中查找,如果找到返回,否则返回空值,最后使用TEXTJOIN合并一下!
但是你会发现上面的方法还是复杂了,其实完全可以更简单!
▼FIND数组查找
=TEXTJOIN(",",,IF(ISNUMBER(FIND($D$2:$D$8,A2)),$D$2:$D$8,""))
注解:WPS目前已支持TEXTJOIN ,放心使用!OFFICE 365 、2019、2021版本已支