优化在VBA中删除隐藏行的性能

电子数据中心

在将自动过滤器应用于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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在VBA Excel中优化双循环性能

来自分类Dev

如何优化VBA代码的性能?

来自分类Dev

更好的“从表中删除行”性能

来自分类Dev

从 selectrange VBA 中删除行

来自分类Dev

优化R中for循环的性能

来自分类Dev

优化R中for循环的性能

来自分类Dev

ZFS重复数据删除性能优化

来自分类Dev

优化VBA代码并提高性能

来自分类Dev

VBA 优化 3 个循环的性能

来自分类Dev

删除行与删除列的性能

来自分类Dev

针对SQLite3中的重复行优化删除查询?

来自分类Dev

优化大型表最近行查询的性能

来自分类Dev

优化大型表最近行查询的性能

来自分类Dev

使用VBA隐藏行

来自分类Dev

如何根据VBA中的条件删除行?

来自分类Dev

属性 getter 中 LINQ 查询的性能优化

来自分类Dev

Excel VBA性能-一百万行-少于1分钟即可删除包含值的行

来自分类Dev

在VBA中优化交替格式

来自分类Dev

优化VBA中的交替格式

来自分类Dev

自动筛选Excel VBA后删除隐藏/不可见的行

来自分类Dev

Scala中隐藏的性能成本?

来自分类Dev

Excel VBA删除行

来自分类Dev

VBA删除行

来自分类Dev

VBA删除行循环

来自分类Dev

使用VBA删除“”行

来自分类Dev

从jdbcTemplate查询仅获取一行以进行性能优化

来自分类Dev

如何优化从具有参照完整性的大表中删除行?

来自分类Dev

优化SQLite3中具有最高用户ID或rowid的重复行之一的删除?

来自分类Dev

删除MYSQL数据库中的行后需要进行后期优化