我真的只是想找一种工具来检查一列数据中重复的近似值。例如,假设我有一列地址数据:
在这种情况下,条目2和4将非常接近唯一,我想要某种工具,无论是excel还是独立,如果行被复制或大致重复,它会通知我。我不知道如何搜索这样的东西。我尝试搜索模糊匹配工具等,但没有什么是我需要的。谢谢,
答案 0 :(得分:0)
有几种方法可以解决
一种简单的方法是编写Levenshtein function来比较这些相互关联的内容并突出显示低值
假设您具有以下数据设置
原始示例
Sub FindClosestMatch()
Range("B3").Select
Dim mystrings()
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
mystrings = Selection.Value
i = 0
Dim string1 As String, string2 As String
Range("C3").Select
For i = LBound(mystrings) To UBound(mystrings)
string1 = mystrings(i, 1)
For j = 1 To 4
string2 = mystrings(j, 1)
ActiveCell.Value = Levenshtein(string1, string2)
ActiveCell.Offset(0, 1).Select
Next
Range("c3").Offset(i, 0).Select
Next
End Sub
如何阅读值
例如113 James Way 0 15 13 12
表示该字符串的分数为
等
宏只是将每个地址与其他地址进行比较,并找到Levenshtein距离
它们最接近匹配的数字越低,当它与自身相比时,显然0完全匹配
此宏假设您已将Levenshtein function复制到VBA模块
答案 1 :(得分:0)
这实际上取决于你需要它的准确程度以及你希望它捕获的匹配类型。如果你想捕捉拼写错误,那就更难了。但是如果你主要想要抓住St vs Street,你可以在左边做一个vlookup(地址,#)或其他东西。可能必须玩#以获得良好的反应。 #需要高于街道号码中的位数(4/5?),但要小到可以捕捉到1干燥的数字。我猜7-8。
基本上,您的地址位于A列(假设从A2开始,带有标题)。 B栏说=左(a2,8) A2显然是独一无二的,因为它是第一个。 从C3开始使用= vlookup(左(a3,8),$ B $ 2:B2,1,0)
它将为所有唯一条目和重复的地址打印错误。为了使它更干净,你可以添加一个if(iserror()) = if(iserror(vlookup(左(a3,8),$ B $ 2:B2,1,0),“”,vlookup(左(a3,8),$ B $ 2:B2,1,0))