从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
结束小组