EXCEL VBA比较2列

[ 在这里输入图像描述 我有2名单与名字和姓氏,现在我想知道是否有人在list1存在于列表2(引用)

这是我现在使用的代码,但问题是(图片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 

我想要一个结果像(图片4参考)

在那里我只得到那些名字和姓氏是相同的

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

  Set CompareRange = Range("G2:H7") 

你也可以试试这个

 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 

不需要VBA

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

在这里输入图像说明

把这个公式放在C1单元格中

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

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

把这个公式放在D1单元格中,并把公式向下

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

这是最终结果

在这里输入图像说明

逻辑

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