EXCEL VBA比较2列

时间:2016-08-17 05:40:09

标签: excel vba excel-vba

[enter image description here 我有2个带有firstname和Lastname的列表,现在我想知道list2中是否存在list1中的某个人(参考文献)

这是我现在正在使用的代码,但问题是(图片3参考)

Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant

    Set CompareRange = Range("E1:F6")

    For Each x In Selection
        For Each y In CompareRange
            If x = y Then x.Offset(0, 1) = x
        Next y
    Next x
End Sub

我想要一个结果Like(Picture4 References)

我只能找到名字和姓氏相同的人

注意:在(图3和4)我的代码改变

  Set CompareRange = Range("G2:H7")

2 个答案:

答案 0 :(得分:3)

无需VBA

假设您的工作表看起来像这样

enter image description here

将此公式放在单元格C1

=IF(ISERROR(MATCH(A1&"|"&B1,$E$1:$E$6&"|"&$F$1:$F$6,0)),"",A1)

并按 CTRL + SHIFT + ENTER 并向下拖动公式。

将此公式放入单元格D1并将公式拉下来

=IF(C1<>"",B1,"")

这是最终结果

enter image description here

<强>逻辑

  1. 我们正在使用&运算符
  2. 执行两列查找
  3. 我们正在使用“|”防止任何误报。例如,Col B中的“Name1N”Col A和“ame2”在连接后将与“Name1”Col A和“Name2”
  4. 相同
  5. 在Col D中,我们只是检查Col C是否已填充。如果是,则只需从Col B
  6. 中提取值
  7. 第一个公式是数组公式,因此我们使用 CTRL + SHIFT + ENTER 代替 ENTER < / KBD>

答案 1 :(得分:0)

你也可以试试这个

Sub Find_Matches()
    Dim list1 As Range
    Dim list2 As Range
    Set list1 = Range("A1:B6")
    Set list2 = Range("E1:F6")

    For Each row1 In list1.Rows
        For Each row2 In list2.Rows
            If (row1.Cells(1) = row2.Cells(1) And row1.Cells(2) = row2.Cells(2)) Then
            row1.Cells(1).Offset(0, 2) = row1.Cells(1)
            row1.Cells(2).Offset(0, 2) = row1.Cells(2)
            Exit For
            End If
        Next row2

    Next row1

End Sub