找出哪个单元格具有最小的Levenshtein距离

所以,我有这个函数会很快返回两个string之间的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距离。 我将如何进行所有这些比较?

你想find哪些string组合具有很小的levenshtein距离,或只是整体如何相似/不相似的每个string与所有其他string?

如果是前者,这应该可以正常工作:

例题

您只需复制并粘贴转置后的值即可创build所有这些标题(如Dale注释)。 您可以使用条件格式来突出显示最低结果。

或者,如果你想要实际的string返回你应该能够使用这个:

 =IF(AND(Levenshtein($A28,B$27)>0,Levenshtein($A28,B$27)<=3),$A28&"/"&B$27,"") 

示例3

只需复制并粘贴唯一值,如果你想在一个列中返回的组合。

祝你好运。