我要做的是删除电子表格中两个单独列中值为 0 的行,因为这表明该行中没有有用的数据。虽然可以使用 For loop
与 If/Then
在这种情况下,我发现这非常慢,因为我的数据集有大约 51,000 行,而且它实际上需要数小时甚至数天才能运行。
经过一番搜索,我遇到了另一种方法,我认为它更快并且目前正在使用:
Public Sub deleteRows()
' source: http://www.ozgrid.com/forum/showthread.php?t=64364
Dim lastRow As Long
Dim n As Long
Dim RT As Date
RT = Time
With ActiveSheet
lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
End With
For n = lastRow To 2 Step -1
If (Trim(ActiveSheet.Cells(n, 3).Value) = 0) And (Trim(ActiveSheet.Cells(n, 6).Value) = 0) Then
ActiveSheet.Cells(n, 1).EntireRow.Delete
End If
Next n
MsgBox Format(Time - RT, "hh:mm:ss")
End Sub
但是,我只用了 1000 个单元进行了测试,运行时间为 402 秒,这表明以相同的速率运行所有数据需要 5.584 小时。
有什么方法可以加快这个过程吗?我错过了一些明显的东西吗?
*编辑:此代码作为另一个代码的子部分运行,其中 ScreenUpdating = False 在代码的开头声明。
最佳答案
不,实际上需要更长的时间。如果您删除一行,它下面的每一行都会单独向上移动,如果您要删除的行下面有更多行,这显然需要更长的时间。
以下是几种简单的方法:
关于excel - 删除具有两个条件的行的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068737/