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,"")
这是最终结果
逻辑 :
- 我们正在使用
&
运算符执行两列查找 - 我们使用“|” 以防止任何误报。 例如Col B中的“Name1N”Col
A
和“ame2”,在连接后将与“Name1”ColA
和“Name2” - 在
D
我们只是检查ColC
是否被填充。 如果是,那么只需从ColB
提取值 - 第一个公式是一个数组公式,因此我们使用CTRL + SHIFT + ENTER代替只是ENTER