我在兩個相應的列中有10,000行名稱,每行10000個。 A列中的每個單元格對應B列中的相鄰單元格。我想進行模糊匹配,並在所有單元格上與相鄰單元格獲得兼容性分數。我不希望它搜索整列與整列,只是相鄰的單元格,我似乎無法使用模糊匹配Excel插件來創建想法?我如何模糊匹配相鄰的單元格?
例子:
Column A: Column B: Value:
Apple Aplle 80%
Banana Banana 100%
Orange Ornge 85%
我在兩個相應的列中有10,000行名稱,每行10000個。 A列中的每個單元格對應B列中的相鄰單元格。我想進行模糊匹配,並在所有單元格上與相鄰單元格獲得兼容性分數。我不希望它搜索整列與整列,只是相鄰的單元格,我似乎無法使用模糊匹配Excel插件來創建想法?我如何模糊匹配相鄰的單元格?
例子:
Column A: Column B: Value:
Apple Aplle 80%
Banana Banana 100%
Orange Ornge 85%
好了,我不知道模糊匹配外接程序,但你可以做到類似於使用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可能會有所提示。
工程很好。 +1質量和努力。 –
這是否適用於從其中一個單詞中刪除一個字母的情況?看到他上面的「橙色」 - 它表明只有1封信可以從100%中「取消」。在你的方法下,從丟失的信件開始,它不會計算4個差異嗎? –
您想如何計算第三列中的值? –
嗨,我只是想要一個信心得分如何相似的名字?有些可能是完全匹配,其他人可能完全不同。完全像模糊匹配工具,但我不認爲我可以將其設置爲僅執行相鄰單元格,它僅計算列對列。謝謝! – Seamus
您是否考慮過Soundex和/或Levenshtein距離(來自兩者的答案會有所不同)? – pnuts