VBA,用于循环效率

所有!

我需要通过超过5万行的数据,删除无用信息的行。 目前的代码工作,但不幸的是,一切都慢了…我试图理解如何可以提高效率,但不容易find任何我可以理解的具体事例。

这是当前的代码:

Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ThisWorkbook.Worksheets("FIC DATA WITH 3A").Activate vika = Cells(Rows.Count, "B").End(xlUp).Row r = 2 For i = 2 To vika If Not Cells(r, "J") > 42369 Then Rows(r).EntireRow.Delete ElseIf Cells(r, "I") = "OC" Or Cells(r, "B") = "Sales Doc." Or Cells(r, "B") = "" Then Rows(r).EntireRow.Delete Else r = r + 1 End If Next i 

你能帮忙吗? 具体的例子不胜感激。

为了删除行,你需要向后循环For i = vika To 2 Step -1

此外,不需要Activate “FIC DATA WITH 3A”表格,以便在其上运行代码。

删除行的正确语法是Rows(i).Delete ,而不是Rows(r).EntireRow.Delete 。 如果你想使用EntireRow ,那么语法是Range("A" & i).EntireRow.Delete (但对我来说没有任何意义,为什么在这种情况下使用它)。

 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual With ThisWorkbook.Worksheets("FIC DATA WITH 3A") vika = .Cells(.Rows.Count, "B").End(xlUp).Row For i = vika To 2 Step -1 If Not Cells(i, "J") > 42369 Or Cells(i, "I") = "OC" Or Cells(i, "B") = "Sales Doc." Or Cells(i, "B") = "" Then Rows(i).Delete End If Next i End With Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic 

Shai Rado关于以相反顺序循环的答案非常重要。

为了加速你的代码,你需要将Excel数据转换成数组,而不是在每个循环迭代中引用单元格 – 它的运行速度更快。

这里是描述如何实现它: 在VBA中的数组和范围

在你的情况下,你需要2个数组,一个用于I和J列,另一个用于B列。