对于列中的每个单元格,search列的其余部分以获得重复

我有两个大型数据库的名称,我可以根据各种标准进行比较。 但是,名称并不总是拼写相同,所以我最终得到了很多重复的错误。 例如,Joe Smith在一个数据集中,Joseph Smith在另一个数据集中,Chris Parker在第1集,Christopher Parker在第2集等等。所有的错误都被收集到一个列中,所以我最终得到了如下的结果:

比较数据集1和数据集2

Column A Joe Smith in set 1 || not in set 2 Joseph Smith in set 2 || not in set 1 Nicholas Chun no errors Alex Conrad in set 2 || not in set 1 Alexander Conrad in set 1 || not in set 2 

我想我需要做的是取出姓氏的前五个字符,并计算出现在列中的次数,然后突出显示计数器> = 2的所有单元格。 如果没有重复,计数器应该等于1,因为总会有一个单元格与string。

我不确定如何在VBA中编程,因为我是初学者。 任何想法,build议或例子都会受到欢迎。

更新:我已经能够用这样的公式做这样的事情。 我用这个公式从string中提取前两个字母和第二个字:

(A1,2)&“&MID(MID(MID,(SUBSTITUTE(A1,”“,”^“,1),1,256),FIND(”^“,SUBSTITUTE(A1,”“,”^“,1 )),256),2,FIND(“”,MID(MID(SUBSTITUTE(A1,“”,“^”,1),1,256),FIND(“^”,SUBSTITUTE(A1,“”,“^” ,1)),256)) – 2)

然后,我使用countif语句来查看该string出现在新列中的次数,如果countif> = 2,我将其标记为可能的错误。 不过,我正在努力将其转换为代码,而无需在电子表格中添加任何列。 我认为正确的做法是将范围声明为数组,并在数组中的每个单元格上运行比较。 这是我到目前为止:

 Function WordExtract(Source As String, Position As Integer) Dim arr() As String arr = VBA.Split(Source, " ") If xcount < 1 Or (Position - 1) > xcount Or Position < 0 Then WordExtract = "" Else WordExtract = arr(Position - 1) End If End Function Sub NameEnhancer() Dim arr As Variant Dim LastRowReport As Long Dim i As Long Dim j As Long Dim ws As Worksheet Set ws = Sheets("Sheet2") LastRowReport = ws.Cells(Rows.Count, "AA").End(xlUp).Row arr = ws.Range("AA4:AA" & LastRowReport).Value For i = 1 To UBound(arr) arr = LEFT(RC[-1],2)&" "&WordExtract(i, 2) End Sub 

对于一个初学者来说,这可能是一个“正确”解决的复杂问题。 你在找什么可以在这里find。

在一大组string中查找类似的string组

在Excel中的VLOOKUP也有类似的模糊search,但我不确定匹配的质量。