美文网首页
Excel VBA实例(34) - 快速匹配出名称不完全相同的数

Excel VBA实例(34) - 快速匹配出名称不完全相同的数

作者: 永恒君的百宝箱 | 来源:发表于2021-04-07 09:36 被阅读0次

    问题背景

    Excel中的vlookup函数大家在工作中应该都经常会使用,非常的强大,能够很方便的帮助我们在大量的数据当中匹配到我们想要的内容。

    但是使用vlookup()函数需要匹配的数据必须是完全一致的,不一致的话可能会匹配不出来。

    如下图,A、C列的数据不是完全一致的,使用vlookup()函数会受限制。

    那这些不完全一致的名称,有方法可以进行快速的匹配吗?

    答案是肯定的。

    解决方案 - 文本相似性判断

    这里就涉及到一个“文本相似性”的概念。判断两个文本是否相似的方法有很多,永恒君这里使用的是莱文斯坦距离。

    莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种。指两个字串之间,由一个转成另一个所需的最少编辑操作次数。

    关于这个问题的理论介绍,感兴趣的可以看看次文《莱文斯坦距离图解》。

    通俗来说,文本A和文本B两者的莱文斯坦距离越短,相似程度就越大。

    有了莱文斯坦距离之后,就可以计算出文本A和文本B的相似程度,这部分的代码网上能找到很多大神分享的,直接拿过来借鉴一下就好了。

    我们假设这个计算相似程度的代码函数为Similarity(参数1,参数2),其中参数1,参数2分别为需要对比的两个文本,默认是只要相似度大于0就有返回值。完全不相似的返回0。

    部分代码如下:

    下面这张图可以直观的看到,两个不同的文本之间,使用Similarity()函数得到的相似程度。

    有了这个函数之后,我们可以再设计一个和vlookup()函数类似的SimilarityRng(参数1,参数2,参数3)函数,其中

    参数1为需要查找的文本,

    参数2为需要查找的区域,

    参数3为返回相对于查找区域位置的文本值。

    部分代码如下:

    效果演示

    借助SimilarityRng()函数挨个查找某个区域内相似度最高所对应的那个数据,整个过程如下:

    得到的结果如下:

    =SimilarityRng(A2,$C$2:$C$10,0)

    =SimilarityRng(A2,$C$2:$C$10,1)

    这里需要说明的是,通过这个方法匹配出来的值不可能是100%准确的,只是概率性的相似度最高,有些有可能会有较大的出入,大家需要知晓。

    如下图:

    A8单元格“深圳市财富广场”就匹配到的内容就不是我们希望看到的。

    以上就是关于这个实例的演示,感兴趣的小伙伴可以私信我获取vba文件进行试用,如果觉得实用,分享给更多的朋友吧~~~

    欢迎交流!

    相关文章

      网友评论

          本文标题:Excel VBA实例(34) - 快速匹配出名称不完全相同的数

          本文链接:https://www.haomeiwen.com/subject/bevykltx.html