如何加快删除行脚本?

时间:2015-06-23 19:05:36

标签: excel excel-vba vba

我有一张200,000多行的电子表格。我需要经历它,如果在某个列中,单元格为空,则删除该行。

我想知道是否有更快的方法或任何关于如何加快速度的想法。

这是我在删除行的循环中所拥有的内容:

For i = Cells(Rows.Count, LastRowCounter).End(xlUp).row To headerQ Step -1
    If IsEmpty(Cells(i, Column2DeleteRowsFrom).Value) Then Cells(i,Column2DeleteRowsFrom).EntireRow.Delete
Next i

注意:" lastRowCounter"是我选择的专栏(即" A"," B"等)" HeaderQ"是1还是2,取决于我是否有标题。

AFAIK主要的另一种方式是使用,而不是我有的for循环,做一些像(伪代码)

For each cel in Range([the range]) If isempty(cel) then delete next cel

但不知道那会更快。

感谢您的任何想法/提示!

(注意:我已经关闭了屏幕刷新,并且在表格中没有计算,它只是数据)。

2 个答案:

答案 0 :(得分:3)

如果您使用的是Excel 2010或更高版本,请使用SpecialCells

Range(Cells(headerQ, Column2DeleteRowsFrom), Cells(Rows.Count, Cells(Rows.Count, LastRowCounter).End(xlUp).Row)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

答案 1 :(得分:3)

使用SpecialCells方法一次选择所有相关的单元格并删除每一个的整行:

Sub delemtpy()
    Dim testcol As Range
    Dim lastRow As Long
    Dim headerQ As Long
    Dim Column2DeleteRowsFrom As Long
    Dim LastRowCounter As Long

    lastRow = Cells(Rows.Count, LastRowCounter).End(xlUp).Row
    Set testcol = Range(Cells(headerQ, Column2DeleteRowsFrom), Cells(lastRow, Column2DeleteRowsFrom))
    On Error Resume Next  ' if no empty cells present
    testcol.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
End Sub

这将处理搜索列根本不包含空单元格的极端情况。请注意使用LastRowCounter来确定使用的范围。