在将自动过滤器应用于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
代码来自此处:自动过滤Excel VBA后删除隐藏/不可见的行
此外,我阅读了以下主题:加速代码以删除工作表上的隐藏行
情况:我对包含12列的表应用了5种不同的过滤器,因此在该过程之后很多行被过滤掉(隐藏)。当我尝试删除这些代码时,上面的代码需要很长时间。就我而言,我不知道Excel是否仍在工作,所以我不得不强制退出。这导致以下问题:
除了遍历所有隐藏行并将其删除之外,还有其他方法吗?
我想到的一个想法是,仅将剩余的未过滤(未隐藏)内容复制到新工作表中,然后删除包含完整信息的旧工作表。如果是这样,那该怎么办?
我认为您不需要参与其他工作表。只需复制现有Range.CurrentRegion属性下方的行,然后删除过滤器并删除原始数据。
Sub RemoveHiddenRows()
With Sheets("Sheet10")
With .Cells(1, 1).CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
If CBool(Application.Subtotal(103, .Columns(1))) Then
.Cells.Copy Destination:=.Cells(.Rows.Count + 1, 1)
End If
.AutoFilter
.Cells(1, 1).Resize(.Rows.Count, 1).EntireRow.Delete
End With
End With
End With
End Sub
通过在Code Review(Excel)上发布,您可能还会在该主题上获得一些集中的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句