【发布时间】:2019-05-24 14:57:41
【问题描述】:
我有两个不同的工作表,每个工作表的行数相同。在 R 列中,我有“新”或“旧”,具体取决于行(这是一个动态值)。我想要做的是,如果 Worksheet1 中的一行在 R 列中包含“旧”,则在 Worksheet1 和 Worksheet2 中删除该行。
现在,我为此尝试了两个代码:
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1= Worksheets("Sheet1")
Set w2= Worksheets("Sheet2")
'-----------------------------------------------------
'Code 1
'-----------------------------------------------------
Application.ScreenUpdating = False
For r = w1.UsedRange.Rows.Count To 1 Step -1
If Cells(r, "R") = "Old" Then
w1.Rows(r).EntireRow.Delete
w2.Rows(r).EntireRow.Delete
End If
Next r
Application.ScreenUpdating = True
'-----------------------------------------------------
'Code 2
'-----------------------------------------------------
Dim i As Long
i = 1
Application.ScreenUpdating = False
Do While i <= w1.Range("R1").CurrentRegion.Rows.Count
If InStr(1, w1.Cells(i, 18).Text, "Old", vbTextCompare) > 0 Then
w1.Cells(i, 1).EntireRow.Delete
w2.Cells(i, 1).EntireRow.Delete
Else
i = i + 1
End If
Loop
Application.ScreenUpdating = True
通常我有 +800 行,所以代码 1 可以按需要工作,但有时需要很长时间,比如 3 分钟。代码 2 到目前为止卡住了。
什么是执行此操作的有效方法?
【问题讨论】: