所有!
我需要浏览超过50k行的数据并删除无用信息的行。 当前的代码可以工作,但不幸的是,这一切都在缓慢......我试着理解如何提高它的效率,但是我不能轻易找到任何我能理解的具体例子。
以下是当前代码:
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
你能帮帮忙吗?具体的例子不仅仅是值得赞赏的。
答案 0 :(得分:2)
要删除行,您需要向后循环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
答案 1 :(得分:1)
Shai Rado关于以相反顺序循环的答案非常重要。
要加速代码,您需要将Excel数据转换为数组,而不是在每次循环迭代中引用Cell - 它运行得更快。
以下是如何实现它的描述: Arrays And Ranges In VBA
在您的情况下,您需要2个数组,一个用于I和J列,第二个用于B列。