我已经进行了一些搜索,但似乎找不到一种快速的方法来摆脱工作表中的所有空白行。我不希望它占用太多时间。有没有这样的方法?
我尝试了一些不太出色的方法,包括过滤所有列中的空白,然后删除屏幕上的内容。也许我在这里缺少excel中的一个功能?
我正在寻找类似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. 选择数据单元格。
单击左角标题以选择所有单元格,然后按Shift+Tab
Ctrl+\
步骤 2. 隐藏和删除剩余的行。
按Ctrl + 9
Ctrl + A
Alt+;
Ctrl + -
第 3 步。取消隐藏选定的行并选择第一个单元格。按:Ctrl + Shift + 9
Ctrl + Home
前
后
如果您需要让您的函数在 excel 中快速运行,您应该设置全局 Excel 应用程序变量,例如“Visible = false”、“ScreenUpdating = false”。过滤空白并删除它们应该是最快的方法,尽管我会手动制作要删除的行列表,然后在一次调用中删除它们
RowsToDelete = "2:2;4:4;8:8";
Range = Sheet.Range()
Range.Delete()
对于非常大的数据集(100k+ 行),我总是发现按空格排序然后删除比过滤和删除大量分隔行要快得多。如果空白行分布在整个文件中,它可以快 5 到 10 倍。
遍历每一行需要很长时间,但这只是因为 FOR 循环开销。主要操作 WorksheetFunction.CountA 和 Range.EntireRow.Delete 确实不需要很长时间。
我发现的最佳解决方案是从 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
结束子