Excel:不完美匹配

我有两个表填写设施名称和邮政编码(和一堆无关的其他数据)。 表格来自两个独立的来源,我想链接它们。 问题是,设施名称多次写成略有不同(缩写,撇号等)。 邮政编码碰巧是一个很好的限制,减less了数千潜在的比赛,只有less数。 我的问题是,

我怎样才能匹配两个表给予一个邮政编码匹配和近似名称匹配:

|facility|zip | |facility|zip | |azyt |10000| No Match|aaaa |10000| |abba |10000| Match |abb' |10000| 

我想到的一个方法是在表A中的每一行,梳理表B的邮政编码,并find所有具有匹配邮政编码的行。 然后以某种方式testing哪个名字是最相似的,可能是通过比较最左边的字符(?)。 总是有一场比赛,只是不完美。

这是我的不完整的代码:

  Dim facilityName, facilityZip, otherName For i = 1 To Worksheets("Facility").UsedRange.Rows.Count facilityName = Worksheets("Facility").Cells(i, 2) facilityZip = Worksheets("Facility").Cells(i, 4) 'Grab all rows in OTHER that have same ZIP For j = 1 To Worksheets("Other").UsedRange.Rows.Count otherName = Array() ub = UBound(otherName) + 1 If Worksheets("Other").Cells(j, 3).Value = facilityZip Then ReDim Preserve otherName(0 To ub) otherName(ub) = j End If Next j 'Compare names For Each rw In otherName 'here I would compare each result to the current facilityName. There's likely a better way to do this... Next rw Next i 

无论是帮助这个代码,一个build议,甚至不同的方法将是非常有益的!

谢谢!

从这里使用Levenshtein距离方法:

 Dim facilityName, facilityZip, hudName, hudZip, provNum, lowerLen, levNum, tmpLev, resultHudNum, resultHudName For i = 1 To Worksheets("Facility").UsedRange.Rows.Count With Worksheets("Facility") facilityName = .Cells(i, 2) facilityZip = .Cells(i, 3) End With levNum = 5 resultHudNum = 0 For j = 1 To Worksheets("Sheet1").UsedRange.Rows.Count With Worksheets("Sheet1") hudName = .Cells(j, 2) hudZip = .Cells(j, 4) hudNum = .Cells(j, 1) End With If hudZip = facilityZip Then If Len(facilityName) < Len(hudName) Then lowerLen = Len(facilityName) Else lowerLen = Len(hudName) End If tmpLev = Levenshtein(Mid(facilityName, 1, lowerLen), Mid(hudName, 1, lowerLen)) If tmpLev < levNum Then levNum = tmpLev resultHudNum = hudNum resultHudName = hudName End If End If Next j If resultHudNum <> 0 Then Worksheets("Facility").Cells(i, 4).Value = resultHudNum Worksheets("Facility").Cells(i, 5).Value = resultHudName Else Worksheets("Facility").Cells(i, 4).Value = "000000" Worksheets("Facility").Cells(i, 5).Value = "" End If Next i 

可以通过改变levNum中的值来修改刺激之间所需的相似程度。

谢谢@Tim的帮助!