需要有关如何加速这段代码的建议

时间:2014-12-04 12:08:36

标签: excel vba

我有一个电子表格,可以从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

2 个答案:

答案 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个非连续行上运行,在备份副本上运行