将列表中的项目与自己匹配以获得半独特性

我真的只是寻找某种工具,将检查一列数据中重复的近似值。 例如,假设我有一列地址为这样的数据:

  • 113 James Way
  • 3448哈龙圈
  • 莫里路5888号
  • 3448 Harlon Cr。

在这种情况下,条目2和条目4将非常接近唯一,并且我希望某种工具,无论是在Excel中还是在独立中,它都会通知我行是重复还是重复。 我不知道如何甚至search这样的东西。 我尝试search模糊匹配工具等,但没有什么是我所需要的。 谢谢,

有几种方法来处理

一个简单的方法是编写一个Levenshtein函数来比较这些相互处理并突出显示低值

假设你有如下的数据设置

在这里输入图像说明

原始的例子

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表示string得分

  • 0(完全匹配)本身
  • 15 3448哈龙圈
  • 13与5888 Murray路
  • 12与3448 Harlon Cr。

等等

macros只是比较每个地址与其他地址,并findLevenshtein距离

最接近的匹配数字越低,当与自身相比时显然是0

此macros假定您已将Levenshtein函数复制到您的VBA模块中

这真的取决于你需要的准确度以及你想要捕捉什么样的近距离匹配。 如果你想要错别字,那会更困难。 但是如果你主要想抓住St vs Street,你可以在左边(地址,#)或者其他地方做一个查找。 可能不得不与玩具#得到一个很好的回应。 #需要高于街道号码(4/5?)的数字的数量,但是足够小以接收像干燥的东西。 我猜猜7-8。

基本上你的地址是在列A(假设A2开头)。 B列说=左(a2,8)A2明显是独一无二的,因为它是第一个。 从C3开始= vlookup(left(a3,8),$ B $ 2:B2,1,0)

它将打印所有唯一条目和重复地址的错误。 为了使它更清洁,你可以添加if(iserror())= if(iserror(vlookup(left(a3,8),$ B $ 2:B2,1,0),“”,vlookup(left(a3,8 ),$ B $ 2:B2,1,0))