Excel VBA 代码:匹配两个表格指定列并删除不匹配行
Excel VBA 代码:匹配两个表格指定列并删除不匹配行
本文介绍如何使用 VBA 代码实现 Excel 中两个表格的指定列匹配,并删除第二个表格中不存在于第一个表格指定列数据的所有行。
代码示例:
Sub MatchAndDelete()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim dataRange1 As Range, dataRange2 As Range
Dim sourceColumn As String, matchColumn As String
Dim i As Long, j As Long
Dim foundMatch As Boolean
' 设置工作表和数据范围
Set ws1 = ThisWorkbook.Worksheets("Sheet1") ' 第1个表格
Set ws2 = ThisWorkbook.Worksheets("Sheet2") ' 第2个表格
Set dataRange1 = ws1.Range("A1").CurrentRegion ' 第1个表格的数据范围
Set dataRange2 = ws2.Range("A1").CurrentRegion ' 第2个表格的数据范围
' 设置源列和匹配列
sourceColumn = "A" ' 第1个表格的源列
matchColumn = "AM" ' 第2个表格的匹配列
' 遍历第2个表格的每一行,如果匹配不成功则删除该行
For i = dataRange2.Rows.Count To 2 Step -1 ' 从最后一行往前遍历
foundMatch = False ' 假设未找到匹配
' 在第1个表格的源列中查找匹配项
For j = 2 To dataRange1.Rows.Count ' 从第2行开始遍历
If dataRange2.Cells(i, matchColumn).Value = dataRange1.Cells(j, sourceColumn).Value Then
foundMatch = True ' 找到匹配,跳出循环
Exit For
End If
Next j
' 如果未找到匹配,则删除该行
If Not foundMatch Then
dataRange2.Rows(i).Delete
End If
Next i
End Sub
代码解析:
-
设置工作表和数据范围:
- 首先,代码设置了两个工作表对象
ws1和ws2,分别对应第1个表格和第2个表格。 - 然后,代码设置了两个数据范围对象
dataRange1和dataRange2,分别对应第1个表格和第2个表格的数据范围。这里使用CurrentRegion属性可以自动识别数据范围。
- 首先,代码设置了两个工作表对象
-
设置源列和匹配列:
- 代码设置了源列
sourceColumn为 "A",即第1个表格的源数据所在列。 - 代码设置了匹配列
matchColumn为 "AM",即第2个表格需要匹配的列。
- 代码设置了源列
-
遍历第2个表格并进行匹配:
- 代码使用
For循环遍历第2个表格的每一行,从最后一行往前遍历。 - 对于每一行,代码假设未找到匹配项,并将其记录在
foundMatch变量中。 - 然后,代码使用另一个
For循环遍历第1个表格的源列,比较第2个表格当前行的匹配列值和第1个表格当前行的源列值。 - 如果找到匹配项,则将
foundMatch设置为True,并退出内层循环。
- 代码使用
-
删除不匹配行:
- 如果
foundMatch为False,说明当前行在第1个表格中没有找到匹配项,则代码使用Delete方法删除该行。
- 如果
注意:
- 代码从最后一行往前遍历是为了避免删除行后导致后面的行号发生变化,从而引起错误的删除。
- 该代码仅考虑单个源列。如果有多个源列需要匹配,则需要进行相应的修改。
使用说明:
- 将上述代码复制到 Excel 的 VBA 编辑器中。
- 修改
Sheet1和Sheet2为实际的工作表名称。 - 修改
sourceColumn和matchColumn为实际的源列和匹配列。 - 运行代码即可实现匹配和删除操作。
希望本文对您有所帮助!如果您还有其他问题或需求,请随时提出。
原文地址: https://www.cveoy.top/t/topic/nmha 著作权归作者所有。请勿转载和采集!