VBA宏快速删除行

sca*_*ity 4 excel optimization vba row excel-vba

我有几个非常大的ex​​cel数据文件,我需要遍历它们并删除列T中单元格值为1的所有行.现在我的代码如下所示:

Sub test()
    Dim cell As Range

    For Each cell In Worksheets("Sheet1").Range("T5", "T900000")
        If cell.Value = 1 Then
            cell.EntireRow.Delete
        End If
    Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但需要永远运行,我将不得不这样做很多次.有没有更好的方法来做到这一点,或者某种方式来优化我已经拥有的使其运行得更快的东西?

Flo*_*ris 9

这不会像您想象的那样工作......当您在遍历它们时删除行时,最终会跳过行.示例:假设您的行在A列中的数字为1 ... 10.您查看第一行并决定删除它.现在你看第二行.它有3号!你从来没看过第2排!!

更好的方法是根据列T的标准过滤电子表格,复制它,将其粘贴到新工作表(带格式等).

您可以打开宏录制并手动执行此操作; 那么你将拥有确切的VBA代码.我相信会更快.

即使你不这样做,如果你想做一个for each你删除的地方,反转顺序(从最后开始,向后工作)

  • 弗洛里斯的做法绝对是最快的.在你真的需要遍历行的情况下,从下往上删除是加快速度的好方法,同时避免他指出的行引用问题. (2认同)