【发布时间】:2015-08-06 04:52:48
【问题描述】:
在将自动过滤器应用于 VBA 中的大工作表(大意味着大约 30,000 行)后,我正在使用以下代码删除隐藏/过滤的行:
Sub RemoveHiddenRows()
Dim oRow As Range, rng As Range
Dim myRows As Range
With Sheets("Sheet3")
Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
If myRows Is Nothing Then Exit Sub
End With
For Each oRow In myRows.Columns(1).Cells
If oRow.EntireRow.Hidden Then
If rng Is Nothing Then
Set rng = oRow
Else
Set rng = Union(rng, oRow)
End If
End If
Next
If Not rng Is Nothing Then rng.EntireRow.Delete
End Sub
代码来自这里:Delete Hidden/Invisible Rows after Autofilter Excel VBA
此外,我阅读了这个帖子:Speeding Up Code that Removes Hidden Rows on a Sheet
情况:我对包含 12 列的表应用了 5 种不同的过滤器,因此在处理后很多行被过滤掉(隐藏)。当我尝试删除这些时,上面的代码需要很长时间。就我而言,我不知道 Excel 是否仍在工作,所以我不得不强制退出。这就引出了以下问题:
除了遍历所有隐藏的行并删除它们之外,还有其他方法吗?
我想到的一个想法是仅将剩余的未过滤(即非隐藏)内容复制到新工作表,然后删除包含完整信息的旧工作表。如果可以,怎么做?
【问题讨论】:
标签: performance vba loops excel filter