我有一张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
但不知道那会更快。
感谢您的任何想法/提示!
(注意:我已经关闭了屏幕刷新,并且在表格中没有计算,它只是数据)。
答案 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
来确定使用的范围。