2015-11-20 50 views
2

我在兩個相應的列中有10,000行名稱,每行10000個。 A列中的每個單元格對應B列中的相鄰單元格。我想進行模糊匹配,並在所有單元格上與相鄰單元格獲得兼容性分數。我不希望它搜索整列與整列,只是相鄰的單元格,我似乎無法使用模糊匹配Excel插件來創建想法?我如何模糊匹配相鄰的單元格?

例子:

Column A:  Column B:  Value: 
Apple   Aplle   80% 
Banana   Banana   100% 
Orange   Ornge   85% 
+0

您想如何計算第三列中的值? –

+0

嗨,我只是想要一個信心得分如何相似的名字?有些可能是完全匹配,其他人可能完全不同。完全像模糊匹配工具,但我不認爲我可以將其設置爲僅執行相鄰單元格,它僅計算列對列。謝謝! – Seamus

+1

您是否考慮過Soundex和/或Levenshtein距離(來自兩者的答案會有所不同)? – pnuts

回答

1

好了,我不知道模糊匹配外接程序,但你可以做到類似於使用UDF您的要求。

像這樣根據您的樣本數據

Function FuzzyComparision(String1 As String, String2 As String) As Double 
Dim intStringLength As Integer 
Dim dblScore As Double 
Dim dblUnitScore As Double 
Dim intCounter As Integer 

intStringLength = WorksheetFunction.Max(Len(String1), Len(String2)) 
dblUnitScore = 1/intStringLength 
dblScore = 0# 

For intCounter = 1 To intStringLength 
    If Mid(UCase(String1), intCounter, 1) = Mid(UCase(String2), intCounter, 1) Then 
     dblScore = dblScore + dblUnitScore 
    Else 
     If Len(String1) <> Len(String2) And intCounter < intStringLength Then 
      If Mid(UCase(String1), intCounter + 1, 1) = Mid(UCase(String2), intCounter, 1) Then 
       dblScore = dblScore + dblUnitScore 
      End If 
     End If 
    End If 
Next 

FuzzyComparision = dblScore 
End Function 

當然的比較可以根據需要進行進一步的即興創作。 讓我知道如果有幫助

編輯:作爲培根指出(感謝那觀察),這不符合預期缺失字母。我已經調整了一些功能來做一個不區分大小寫的比較,並補償丟失的字母,例如。

即使它有效,效用取決於可接受的分數偏差+/-。 OP可能會有所提示。

+0

工程很好。 +1質量和努力。 –

+0

這是否適用於從其中一個單詞中刪除一個字母的情況?看到他上面的「橙色」 - 它表明只有1封信可以從100%中「取消」。在你的方法下,從丟失的信件開始,它不會計算4個差異嗎? –

相關問題