[英]Remove Blank Rows from an Excel Worksheet
我做了一些搜索,但似乎找不到快速的方法來擺脫工作表中的所有空白行。 我不想花很多時間。 有這種方法嗎?
我嘗試了一些不太出色的方法,包括過濾所有列中的空白,然后刪除屏幕上的內容。 也許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不需要很長時間。
我發現最好的解決方案是從10萬行的大塊開始,刪除所有沒有值的行,然后以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
結束子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.