所以,我有这个函数可以快速返回两个字符串之间的Levenshtein距离:
Function Levenshtein(ByVal string1 As String, ByVal string2 As String) As Long
Dim i As Long, j As Long
Dim string1_length As Long
Dim string2_length As Long
Dim distance() As Long
string1_length = Len(string1)
string2_length = Len(string2)
ReDim distance(string1_length, string2_length)
For i = 0 To string1_length
distance(i, 0) = i
Next
For j = 0 To string2_length
distance(0, j) = j
Next
For i = 1 To string1_length
For j = 1 To string2_length
If Asc(Mid$(string1, i, 1)) = Asc(Mid$(string2, j, 1)) Then
distance(i, j) = distance(i - 1, j - 1)
Else
distance(i, j) = Application.WorksheetFunction.Min _
(distance(i - 1, j) + 1, _
distance(i, j - 1) + 1, _
distance(i - 1, j - 1) + 1)
End If
Next
Next
Levenshtein = distance(string1_length, string2_length)
End Function
我想在“A”列中的所有单元格之间进行快速比较,并返回哪些单元格具有“小”Levenshtein距离。我将如何进行所有这些比较?
答案 0 :(得分:3)
你想找到哪些字符串组合具有小的levenshtein距离,或者只想找到每个字符串与所有其他字符串相似/不相似的内容?
如果是前者,这应该可以正常工作:
您只需复制并粘贴转置值即可创建所有这些标题(如Dale所述)。您可以使用条件格式来突出显示最低结果。
或者如果你想要返回实际的字符串,你应该能够使用它:
=IF(AND(Levenshtein($A28,B$27)>0,Levenshtein($A28,B$27)<=3),$A28&"/"&B$27,"")
如果您希望在单个列中返回组合,只需复制并粘贴唯一值。
祝你好运。