首页 > 解决方案 > 如果值匹配,则遍历 A 列的工作表 1 和工作表 2 删除工作表 1 中的整行

问题描述

我有工作表 1(A 列)值和工作表 2(A 列)。我想将工作表 1 的 A 列与工作表 2 的 A 列进行比较。如果在工作表 2 中找到工作表 1(A 列),则删除工作表 1 中的整行。转到下一个。

我一直坚持这一点。下面是我的代码。它不工作。它不断得到错误的单元格值

Sub Compare()
Dim i As Long
Dim j As Long
Dim lastRow_Task As Long
Dim lastRow_Compare As Long
Dim lastRow As Long

 'Sheet 1
 Dim Task As Worksheet
'Sheet 2
 Dim Compare As Worksheet

 Set Task = Excel.Worksheets("TaskDetails")
 Set Compare = Excel.Worksheets("Compare")

    Application.ScreenUpdating = False

  lastRow_Task = Log.Cells(Rows.count, "A").End(xlUp).Row

  lastRow_Compare = Compare.Cells(Rows.count, "A").End(xlUp).Row


 For i = 2 To lastRow_Task
     For j = 2 To lastRow_Compare

        If Task.Cells(i, "A").Value = Compare.Cells(j, "A").Value Then
          Compare.Cells(j, "A").ClearContents
       End If
    Next j
Next i

标签: excelvba

解决方案


使用 Match() 速度很快,并且可以避免嵌套循环。

另外 - 删除行时,最好从底部到顶部工作,这样删除的行就不会干扰您的循环计数器。

Sub Compare()
    Dim i As Long
    Dim lastRow_Task As Long

    Dim Task As Worksheet 'Sheet 1
    Dim Compare As Worksheet 'Sheet 2

    Set Task = ActiveWorkbook.Worksheets("TaskDetails")
    Set Compare = ActiveWorkbook.Worksheets("Compare")

    Application.ScreenUpdating = False

    lastRow_Task = Task.Cells(Task.Rows.Count, "A").End(xlUp).Row
    For i = lastRow_Task To 2 Step -1
        If Not IsError(Application.Match(Task.Cells(i, 1).Value, Compare.Columns(1), 0)) Then
            Task.Rows(i).Delete
        End If
    Next i

    Application.ScreenUpdating = True

End Sub

推荐阅读