Excel 将列表中的项与其自身进行匹配以获得半唯一性

Excel 将列表中的项与其自身进行匹配以获得半唯一性,excel,match,Excel,Match,我真的只是在寻找某种工具,可以检查数据列中重复项的近似值。例如,假设我有一列包含地址的数据: 詹姆斯路113号 3448哈伦圈 美利路5888号 3448哈龙Cr 在这种情况下,条目2和条目4将非常接近于unique,我希望在excel或standalone中使用某种工具,该工具将在行被复制或近似复制时通知我。我甚至不知道如何寻找这样的东西。我尝试搜索模糊匹配工具等,但没有什么是我所需要的。谢谢,有几种方法 一种简单的方法是编写一个比较函数来比较这些地址,并突出显示低值 假设您的数据设置如下

我真的只是在寻找某种工具,可以检查数据列中重复项的近似值。例如,假设我有一列包含地址的数据:

  • 詹姆斯路113号
  • 3448哈伦圈
  • 美利路5888号
  • 3448哈龙Cr

在这种情况下,条目2和条目4将非常接近于unique,我希望在excel或standalone中使用某种工具,该工具将在行被复制或近似复制时通知我。我甚至不知道如何寻找这样的东西。我尝试搜索模糊匹配工具等,但没有什么是我所需要的。谢谢,

有几种方法

一种简单的方法是编写一个比较函数来比较这些地址,并突出显示低值

假设您的数据设置如下所示

原始示例

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
表示字符串的分数为

  • 0(与自身完全匹配)
  • 15与3448哈伦圆
  • 13号,美利路5888号
  • 12件,配3448哈龙Cr

宏只是将每个地址与其他地址进行比较,并找到Levenshtein距离

数字越小,它们就越接近,很明显,当它与自身进行比较时,0是完全匹配的


此宏假定您已将复制到VBA模块中

它实际上取决于您需要它的准确性以及您希望它捕获的密切匹配类型。如果你想抓住打字错误,那就难多了。但是,如果你主要是想赶上圣vs街,你可以在左边(地址)做一个vlookup什么的。为了得到好的回应,可能不得不玩弄这个需要高于街道号码中的位数(4/5?),但要足够小,以捕捉像1个干ct这样的东西。我猜是7-8

基本上,您的地址在A列中(假设从A2开始,带有标题)。B列表示=左(a2,8) A2显然是独一无二的,因为它是第一个。 从C3开始,使用=vlookup(左(a3,8),$B$2:B2,1,0)

它将打印所有唯一条目的错误和副本的地址。为了使它更干净,您可以添加一个if(iserror())和 =如果(iError(vlookup(左(a3,8),$B$2:B2,1,0),“”,vlookup(左(a3,8),$B$2:B2,1,0))