需要一个 Excel 脚本来识别包含联系人名字不同变体的电子邮件地址

需要一个 Excel 脚本来识别包含联系人名字不同变体的电子邮件地址

我有一个包含 50k+ 行数据的 Excel 电子表格,我们试图在数据行中识别电子邮件地址与名字不匹配的位置等。

我们基本上试图将行数缩小到尽可能少,其中电子邮件地址的名字有不同的变体,以便我们可以用该信息替换称呼字段。

因此,如果列中的名字是 Jonathan Smith O(姓名字段存在差异,一些名字有中间名首字母等),并且列中的电子邮件地址R[电子邮件保护]X,我们想要用“John”更新列中的称呼字段。

我意识到其中一些必须手动完成,但我们正在尝试缩小这 50k 行的范围以去除明显不符合条件的行(电子邮件地址中具有相同名字或姓氏首字母或姓氏首字母的行)。

通过执行以下操作,我将其从 50k 缩小到 15k:

首先,我使用公式=1-ISNUMBER(MATCH("*"&LEFT(O2,3)&"*",R2,0))帮助我排除与联系人名字部分匹配的电子邮件。(显然,这样做我不会将“Rob”与“Robert”对立起来,但我想不出任何其他方法)。

然后,我对数据进行排序,从等式中取出匹配的数据。对于不匹配的数据,我使用另一个公式提取姓氏的首字母=PROPER(LEFT(O2)&TRIM(RIGHT(SUBSTITUTE(O2," ",REPT(" ",99)),99)))。这没有给我任何有中间首字母的数据(这些也应该排除,因为我看到很多像“jrsmith”这样的数据,但我只得到“jsmith”)。

然后,我从那里=1-ISNUMBER(MATCH("*"&LEFT(W2,3)&"*",R2,0))查看是否有任何电子邮件与这些相匹配,以便我可以排除这些。

再次,我将其从 50k 降至 15k,但一定有更简单的方法。 有更简单的方法吗? 比如嵌套函数或脚本,它会查看此电子表格并识别电子邮件地址不包含以下变体的行:

  • 姓氏名字@
  • 名字首字母姓氏@
  • 名字首字母中间字母姓氏@
  • 名字(完全匹配)@
  • 名字姓氏@

答案1

这应该可行,插入一个额外的列并调整范围和偏移量以在适当的位置进行搜索。然后只需按新列中的非空白排序即可查看所有不匹配的内容。

Sub firstname()
Application.ScreenUpdating = False
Dim strEmail As String
Dim strName As String
Dim i As Integer
Dim j As Integer

For Each c In Range("A:A")
    If c.Value <> "" Then
        On Error Resume Next
        i = Application.WorksheetFunction.Search(" ", c.Value)
        strName = Left(c, i - 1)
        strName = UCase(strName)
        j = Application.WorksheetFunction.Search("@", c.Offset(0, 2).Value)
        strEmail = Left(c.Offset(0, 2), j - 1)
        strEmail = UCase(strEmail)

            If InStr(strEmail, strName) = 0 Then
            c.Offset(0, 1) = strEmail
            End If

    End If
 Next c

Application.ScreenUpdating = True
End Sub

注意:这不考虑 John vs Johnathan 的情况

相关内容