我有一个电子表格,可以从3种不同类型的文件中导入大量数据。它对其进行格式化,使得所有三个输出都相同,在一种情况下,它需要根据该行的单元格中的内容删除行。问题是,与其他文件的格式化(没有梯级删除的文件)相比,这需要大约1.5到2分钟。工作表开始大约4000行,删除大约1600行。我目前的做法很好,一切正常,但有没有办法做得更快?
rw = 1
Lastrow = 2600
NewRow = 0
NxtChk2:
If (Worksheets("ARCSRT.CND").Cells(rw, "c") >= "0") And (Worksheets("ARCSRT.CND").Cells(rw, "d") = "") Then
Worksheets("ARCSRT.CND").Rows(rw).EntireRow.Delete
rw = rw - 1
End If
If (Worksheets("ARCSRT.CND").Cells(rw, "b") = "0.0") And (Worksheets("ARCSRT.CND").Cells(rw, "c") = "") Then
Worksheets("ARCSRT.CND").Rows(rw).EntireRow.Delete
rw = rw - 1
End If
If rw = Lastrow Then GoTo LATER
rw = rw + 1
GoTo NxtChk2
答案 0 :(得分:0)
如果列表的排序是一个选项,而不是逐个删除行,只需用"标记"标记它们,即字母" X"在一个单独的列中,一旦循环结束,获取代码对该列上的数据进行排序,只需一次删除整批标记行,它将执行一次删除操作而不是1600次。
答案 1 :(得分:0)
在我的评论之后,尝试以下
这要在循环之前进行:
Dim rng As Range
Set rng = Nothing
而不是行删除执行此操作:
If rng = Nothing Then
rng = Cells(rw, "A")
Else
rng = Union(rng, Cells(rw, "A"))
End If
然后在循环结束后:
rng.EntireRow.Delete
请记住,我不确定它将如何在1600个非连续行上运行,在备份副本上运行