Excel VBA實(shí)例(34) - 快速匹配出名稱不完全相同的數(shù)據(jù),vlookup都做不到

問題背景

Excel中的vlookup函數(shù)大家在工作中應(yīng)該都經(jīng)常會(huì)使用,非常的強(qiáng)大,能夠很方便的幫助我們?cè)诖罅康臄?shù)據(jù)當(dāng)中匹配到我們想要的內(nèi)容。

但是使用vlookup()函數(shù)需要匹配的數(shù)據(jù)必須是完全一致的,不一致的話可能會(huì)匹配不出來。

如下圖,A、C列的數(shù)據(jù)不是完全一致的,使用vlookup()函數(shù)會(huì)受限制。

那這些不完全一致的名稱,有方法可以進(jìn)行快速的匹配嗎?

答案是肯定的。

解決方案 - 文本相似性判斷

這里就涉及到一個(gè)“文本相似性”的概念。判斷兩個(gè)文本是否相似的方法有很多,永恒君這里使用的是萊文斯坦距離。

萊文斯坦距離,又稱Levenshtein距離,是編輯距離的一種。指兩個(gè)字串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)。

關(guān)于這個(gè)問題的理論介紹,感興趣的可以看看次文《萊文斯坦距離圖解》。

通俗來說,文本A和文本B兩者的萊文斯坦距離越短,相似程度就越大。

有了萊文斯坦距離之后,就可以計(jì)算出文本A和文本B的相似程度,這部分的代碼網(wǎng)上能找到很多大神分享的,直接拿過來借鑒一下就好了。

我們假設(shè)這個(gè)計(jì)算相似程度的代碼函數(shù)為Similarity(參數(shù)1,參數(shù)2),其中參數(shù)1,參數(shù)2分別為需要對(duì)比的兩個(gè)文本,默認(rèn)是只要相似度大于0就有返回值。完全不相似的返回0。

部分代碼如下:

下面這張圖可以直觀的看到,兩個(gè)不同的文本之間,使用Similarity()函數(shù)得到的相似程度。

有了這個(gè)函數(shù)之后,我們可以再設(shè)計(jì)一個(gè)和vlookup()函數(shù)類似的SimilarityRng(參數(shù)1,參數(shù)2,參數(shù)3)函數(shù),其中

參數(shù)1為需要查找的文本,

參數(shù)2為需要查找的區(qū)域,

參數(shù)3為返回相對(duì)于查找區(qū)域位置的文本值。

部分代碼如下:

效果演示

借助SimilarityRng()函數(shù)挨個(gè)查找某個(gè)區(qū)域內(nèi)相似度最高所對(duì)應(yīng)的那個(gè)數(shù)據(jù),整個(gè)過程如下:

得到的結(jié)果如下:

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

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

這里需要說明的是,通過這個(gè)方法匹配出來的值不可能是100%準(zhǔn)確的,只是概率性的相似度最高,有些有可能會(huì)有較大的出入,大家需要知曉。

如下圖:

A8單元格“深圳市財(cái)富廣場(chǎng)”就匹配到的內(nèi)容就不是我們希望看到的。

以上就是關(guān)于這個(gè)實(shí)例的演示,感興趣的小伙伴可以私信我獲取vba文件進(jìn)行試用,如果覺得實(shí)用,分享給更多的朋友吧~~~


歡迎交流!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容