【发布时间】:2020-11-01 03:55:01
【问题描述】:
我对 VBA 有点陌生。 我有一列大约 500 个名字。在另一张表中,我有一个较短的名称列,所有名称都在较长的范围内。
我正在尝试遍历较长的列并删除在较短的列中未找到单元格值的所有行。我的代码可以工作,但只会以增量方式删除行,并且需要运行大约 10 次才能完成任务。
我知道涉及删除的循环可能很棘手。任何帮助将不胜感激!
Sub FindMatches()
Application.ScreenUpdating = False
Dim var As Variant, iSheet As Integer, iRow As Long, iRowL As Long, bln As Boolean
iRowL = Cells(Rows.Count, 1).End(xlUp).Row
For iRow = 1 To iRowL
If Not IsEmpty(Cells(iRow, 1)) Then
For iSheet = ActiveSheet.Index + 1 To Worksheets.Count
bln = False
var = Application.Match(Cells(iRow, 1).Value, Worksheets(iSheet).Columns(1), 0)
If Not IsError(var) Then
bln = True
Exit For
End If
Next iSheet
End If
If bln = False Then
Cells(iRow, 1).EntireRow.Delete
Else
Cells(iRow, 1).Font.Bold = True
End If
Next iRow
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
最好使用
Union并在最后删除一次,而不是循环删除。方法见this answer。