从Excel工作表中删除空白行

我做了一些search,但我似乎无法find一个快速的方法来摆脱工作表内的所有BLANK行。 我不希望它占用太多时间。 有这样的方法吗?

我已经尝试了一些不太精彩的方法,包括在所有列中过滤空白,然后删除屏幕上的内容。 也许有一个Excel中的function,我在这里失踪?

我正在寻找像UsedRange.RemoveDuplicates()函数,在一两秒钟内完成了大量的工作。

这里有两种方法来删除活动工作表上的所有空白行。

1 VBA 。 这种方式应该比循环遍历行要快得多:

 cells.RowDifferences(cells(rows.Count,columns.Count)).rows.Hidden=true cells.SpecialCells(xlCellTypeVisible).EntireRow.Delete cells.Rows.Hidden=false 

2键盘 。 这种方式只是撤销列表中的三个步骤,因此可以轻松撤销/回溯。

在这里输入图像说明

步骤1.select数据单元格。 单击左上angular标题以select所有单元格,然后按Shift+Tab Ctrl+\

第2步。隐藏和删除剩余的行。Ctrl + 9 Ctrl + A Alt+; Ctrl + -

第3步。取消隐藏选定的行并select第一个单元格。 按下: Ctrl + Shift + 9 Ctrl + Home

之前

在这里输入图像说明

在这里输入图像说明

如果你需要你的函数在excel中快速工作,你应该设置全局的Excel应用程序variables,比如“Visible = false”,“ScreenUpdating = false”。 过滤空白和删除它们应该是最快的方法,但我会手动去做行列表删除,然后在一个调用中删除它们

 RowsToDelete = "2:2;4:4;8:8"; Range = Sheet.Range() Range.Delete() 

对于非常大的数据集(100k +行),我总是发现它很快地按空格sorting,然后删除,而不是过滤和删除大量的分隔线。 如果空白行遍布整个文件,可以快5到10倍。

迭代遍历每一行都是永远的,但这只是因为FOR循环的开销。 WorksheetFunction.CountA和Range.EntireRow.Delete的主要操作确实不需要很长时间。

我find的最好的解决scheme是从100K行的块开始,删除所有没有值的行,然后向下移动10的权力,直到你在单行的水平。

无论您试图删除数据周围的多余空格,还是在主数据范围内虚拟地删除单行,这都很快。

 Public Sub removeblankrows() Dim ws As Worksheet: Set ws = ActiveSheet With WorksheetFunction Dim pow As Long For pow = 6 To 0 Step -1 Dim chunkSize As Long: chunkSize = 10 ^ pow Dim chunks As Long: chunks = (ws.UsedRange.Rows.Count \ chunkSize) + 1 Dim c As Long For c = chunks To 1 Step -1 Dim last As Long, first As Long last = .Min(c * chunkSize, ws.Rows.Count) first = .Max(1, (c - 1) * chunkSize) Dim c1 As Range, c2 As Range, rng As Range Set c1 = ws.Cells(first, 1) Set c2 = ws.Cells(last, ws.UsedRange.Columns.Count) Set rng = ws.Range(c1, c2) If .CountA(rng) = 0 Then rng.EntireRow.Delete Next c Next pow End With 

结束小组