我很陌生。我搜索过网站但没有找到答案。
我有两个名单,一个是特定顺序,我想不打扰,另一个按字母顺序排列。
下面列出了两个列表的示例。左边的那个是按字母顺序排列的,另一个是由于测试的性能而排列的。有几百个名字。
(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列。
如果您需要其他信息,请与我们联系。
答案 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