Excel相似度匹配智能升级版!在新函数没出来之前,我们就分享过这种简称匹配全称的案例,有难度是因为简称中的字在全称中不是连续的,可能全部出现,也可能出现部分,我们要返回的是出现次数最多的,对应的全称!下面我们一起来带大家使用新函数搞一波吧!先预览一波要的效果,下面我们一起使用函数来实现一下!我们就拿第一个“华师附中”来!我们分别查找这4个字在每个全称中,是否出现,如果出现返回1,否则返回0!这个你可能想到了MID等拆分,再FIND,其实现在有正则完全没必要,一起来看看吧!=N(REGEXTEST(B5:B14,REGEXEXTRACT(D2,".",1)))
REGEXEXTRACT 第二参数用点可以匹配任意非换行符字符,简单可以理解为把汉字逐个拆分出来,这也是我们想要的!
我们想要找到能找到简称字符最多的全称,就需要把上面的结果,逐行求和,这个可以直接使用BYROW函数处理!我们把上面的结果,取一个名字叫做“A",那么本次的每一行求和,就可以使用下面的 BYROW(A,SUM)这一步,我们就搞定了逐行求和的问题了,下面我们就要找到最大值对应的全称!最大值对应的结果,你可能想到了很多,比如MAX、MATCH、XMATCH等等,其实完全没有必要,我们有一个非常好用的函数,那就是XLOOKUP,可以直接搞定!这里主要得益于XLOOKUP第五参数,-1 表示查询下一个比查找值小的值,这里我们使用99,简称就算全部匹配,一般也不可能达到99!所以就会找到比99小的最大值!这样,我们就可以得到最佳匹配啦!其实到这里基本就完结了,但是有同学问,如果有多个内容都匹配到最大的相同次数怎么办?能不能全部显示出来?我们模拟一下这种情况,使用上面的公式,默认是返回第一个!想要返回全部,我们可以稍微处理一下!我们使用FILTER来筛选,筛选条件就是匹配的简称数量合计列=其中的最大值,这样就多个最大值就一起筛选出来了,最后使用TEXTJOIN进行合并!这里使用的是CHAR(10)换行符进行合并!=LET(A,N(REGEXTEST($B$2:$B$11,REGEXEXTRACT(D2,".",1))),B,BYROW(A,SUM),XLOOKUP(99,B,$B$2:$B$11,,-1))
如果有多个满足条件,都想要返回,那么可以使用下面的函数公式,记得开启自动换行!
=LET(A,N(REGEXTEST($B$2:$B$6,REGEXEXTRACT(D2,".",1))),B,BYROW(A,SUM),TEXTJOIN(CHAR(10),,FILTER($B$2:$B$6,B=MAX(B))))
如果每个字都能在简称中查到,不存在简称中有全称中不存在的情况,还可以进一步简化!
=XLOOKUP(REGEXREPLACE(D2,"","*"),$B$2:$B$11,$B$2:$B$11,,2)
相似匹配,没有最佳匹配的说法,你说是连续文字匹配多最佳呢?还是匹配更多的字符最佳呢?所以这只是一种辅助手段,实际还需要人工复核,只是降低了纯手工从0开始的难度!
今天的内容就这里,快去试试吧!如果你的版本低,可以试试我们过去讲的低版本兼容写法!
更多Excel办公自动化内容,欢迎关注小编!