如果名字和姓氏匹配,则为中间名的条件副本

时间:2015-05-05 15:03:20

标签: excel vba

我很陌生。我搜索过网站但没有找到答案。

我有两个名单,一个是特定顺序,我想不打扰,另一个按字母顺序排列。

下面列出了两个列表的示例。左边的那个是按字母顺序排列的,另一个是由于测试的性能而排列的。有几百个名字。

(Last)      (First)     (Middle)   ...     (Last)       (First)    (M.I.)

A1          B1           C1     ...     I1           J1        K1

Pennyworth  Alfred      Johnathan   ... Maryfellow   Jeannine   S.

我需要一个程序来搜索/比较两者中的副本特定信息。

这是我认为它需要做的事情,我只是不知道如何告诉计算机这样做:搜索列A和B,如果A和B等于I和J中的任何一个,则在匹配中复制C按字母顺序排列到相应的K.继续使用下一个名称。我知道这可能是倒退,我只是想简单地解释一下。基本上我需要通过计算机来查看字母名称,并将中间名称全部复制到正确人员的K列。

如果您需要其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

您无需通过VBA执行此操作。你可以通过vlookup来做到这一点。在完成之前,您需要进行一些更改。您将需要在列C之前插入一个由=B1&A1组成的列(假设列表从A1开始。如果有标题,则更改为=B2&A1然后将其一直向下拖动以使第一个名称和将姓氏合并。然后在K1中放=vlookup(J1&I1,C:D,2,0)如果有任何匹配,这将给出中间名

答案 1 :(得分:0)

以下内容可行,但它假定不存在针对不同中间名重复名字/姓氏组合的情况。如果您需要使用您的数据来说明该情况,请与我们联系。使用VBA的优点是不需要按照建议调整布局。

Sub GetMiddleNames()

    Dim i1 As Long, i2 As Long, c As Long
    Dim v1 As Variant, v2 As Variant, v3 As Variant

    v1 = [a1].CurrentRegion
    With Range("i1"): v2 = .Resize(.CurrentRegion.Rows.Count, 2): End With
    c = UBound(v2)
    v3 = [k1].Resize(c)

    For i2 = 1 To c
        For i1 = 1 To UBound(v1)
            If v1(i1, 1) = v2(i2, 1) Then
                If v1(i1, 2) = v2(i2, 2) Then
                    v3(i2, 1) = v1(i1, 3)
                End If
            End If
        Next
    Next

    [k1].Resize(c) = v3

End Sub