VBA代码,用于匹配2列之间的第一个和最后一个字符串,并在Excel中的第三列中获取结果



VBA代码的新手。需要帮助将字符串与宏匹配。在 Col A 中具有系统名称"John Jerome Doss",在 B 列中输入"John J Doss"中的输入名称。我想比较A列和B列中的第一个和最后一个字符串,如果第一个和最后一个字符串匹配,则C列中的结果应该是"确定",否则C列应该是"检查"。

PS:A列的格式是"名字-中间名-姓氏

",B列的格式是"名字-初始化-姓氏"。

我不确定此编码。有人可以帮忙吗?谢谢。

空格字符上拆分的几个数组应该可以做到这一点。

Option Explicit
Sub firstLastCheck()
    Dim vals As Variant, n1 As Variant, n2 As Variant, chk As Variant, i As Long
    With Worksheets("sheet1")
        vals = .Range(.Cells(2, "A"), Cells(.Rows.Count, "B").End(xlUp)).Value2
        ReDim chk(LBound(vals, 1) To UBound(vals, 1), 1 To 1)
        For i = LBound(vals, 1) To UBound(vals, 1)
            n1 = Split(vals(i, 1), Chr(32))
            n2 = Split(vals(i, 2), Chr(32))
            If LCase(n1(LBound(n1))) = LCase(n2(LBound(n2))) And _
               LCase(n1(UBound(n1))) = LCase(n2(UBound(n2))) Then
                chk(i, 1) = "OK"
            Else
                chk(i, 1) = "Check"
            End If
        Next i
        .Cells(2, "C").Resize(UBound(chk, 1), UBound(chk, 2)) = chk
    End With
End Sub

从逻辑上讲,您要做的只是从字符串中获取第一个和最后一个单词,并将它们与其他值进行比较。

实际上,InStrInStrRev 的组合将允许您在本例中拆分分隔符上的空格 (" "(。

执行此操作的示例函数如下:

Function FormateName(str As String) As String
  FormateName = Left(str, InStr(1, str, " ") - 1) & " " & Right(str, Len(str) - InStrRev(str, " "))
End Function

为了理解上述内容,第一部分返回单元格的值,直到第一个空格。下一个与空格连接以提高可读性(这是可选的(。最后一部分向后扫描最后一个空格,然后将最后 x 个字符返回到姓氏。

函数的返回将是"名字姓氏"。从上面的函数中,您应该能够在数据集上构建一个循环,然后使用上面的函数去除中间名,然后执行查找以填充 C 列。

如果您在创建下一步时遇到任何问题,请告诉我们。

最新更新