什么是删除Excel表的所有空白行的最快捷方式?

我看到几个关于删除范围内的空白行的文章和其他删除基于单个空白列表的行,但没有关于删除完全空白的表行。

什么是最快的方法呢?

我在下面发布了我的解决scheme来帮助其他人,但是我很想看看有没有人有更快的方法。

这是我用来删除空白表格行的程序。 我有时会使用大型(用于Excel)数据集,而且这种方法更快。 它将表行加载到数组中,检查数组中是否有空行,最后执行一个range.delete操作。

你使用这样的程序:

 Sub Test() DeleteBlankTableRows ActiveSheet.ListObjects(1) End Sub 

ActiveSheet.ListObjects(1)(通常)是活动工作表上的第一个表格表。

这是实际的程序:

 Sub DeleteBlankTableRows(ByVal tbl As ListObject) Dim rng As Range Set rng = tbl.DataBodyRange ' Get table data rows range. Dim DirArray As Variant DirArray = rng.Value2 ' Save table values to array. ' LOOP THROUGH ARRAY OF TABLE VALUES Dim rowTMP As Long Dim colTMP As Long Dim combinedTMP As String Dim rangeToDelete As Range ' Loop through rows. For rowTMP = LBound(DirArray) To UBound(DirArray) combinedTMP = vbNullString ' Clear temp variable. ' Loop through each cell in the row and get all values combined. For colTMP = 1 To tbl.DataBodyRange.Columns.Count combinedTMP = combinedTMP & DirArray(rowTMP, colTMP) Next colTMP ' Check if row is blank. If combinedTMP = vbNullString Then ' Row is blank. Add this blank row to the range-to-delete. If rangeToDelete Is Nothing Then Set rangeToDelete = tbl.ListRows(rowTMP).Range Else Set rangeToDelete = Union(rangeToDelete, tbl.ListRows(rowTMP).Range) End If End If Next rowTMP ' DELETE BLANK TABLE ROWS (if any) If Not rangeToDelete Is Nothing Then rangeToDelete.Delete End Sub 

这比其他方法有一些优点:

  1. 速度 :在一个20万行8列的testing中,这个方法耗时19秒。 对于相同的表,这只是SpecialCells(xlCellTypeBlanks)方法需要34秒的一半。
  2. 识别完全空白表行 :与其他一些方法不同(比如在某些情况下非常有用的方法),此方法在行的每个单元中查找空白,而不是仅查找一个。

这应该工作。 不知道是否更快,但这是另一种方式:

 Sub delete_blank_table_rows() Dim Rng As Range, tempRng As Range Set Rng = Range("Table1") ' Change as necessary Set Rng = Range(Cells(Rng.Rows(1).Row, Rng.Columns(1).Column), Cells(Rng.Rows(Rng.Rows.Count).Row, Rng.Columns(Rng.Columns.Count).Column)) Dim i As Long For i = Rng.Rows.Count To 1 Step -1 Cells(Rng.Rows(i).Row, Rng.Columns(1).Column).Select Set tempRng = Range(Cells(Rng.Rows(i).Row, Rng.Columns(1).Column), Cells(Rng.Rows(i).Row, Rng.Columns(Rng.Columns.Count).Column)) If WorksheetFunction.CountA(tempRng) = 0 Then tempRng.Delete shift:=xlUp End If Next i End Sub 

编辑:当然,为了加快速度,您应该在运行时closures“屏幕更新”,“计算”。