VBA EXCEL基于单元格值隐藏行非常慢

Alb*_*lby 3 excel vba row hide

我下面的代码根据相应的单元格值(如果为0则隐藏)来隐藏/取消隐藏整个行,并且工作正常。

这是材料清单,并且有一个“完成”按钮。在列表的最后,您按下按钮,任何数量= 0的项目都应隐藏此相关行。

工作正常。但是问题在于它非常慢。正如您所看到的,它是400多个行,而从字面上我可以看到这些行消失了。它每秒处理大约20行,这使得在20秒内完成列表。并且列表每隔几个月就会翻一番。

因此,问题是-是否有其他方法可以立即或至少比当前速度更快地隐藏相关行?

非常感谢!

隐藏:

Public Sub HideRows()
Dim cell As Range
    For Each cell In ActiveSheet.Range("H18:H469")
    cell.EntireRow.Hidden = (cell.Value = 0 And cell.Value <> "")
Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)

取消隐藏:

Public Sub UnhideRows()
Dim cell As Range
    For Each cell In ActiveSheet.Range("H18:H469")
    If (cell.Value = 0 And cell.Value <> "") Then cell.EntireRow.Hidden = False
    Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)

QHa*_*arr 5

我只是按照评论中的内容输入内容。使用联盟收集合格范围并一口气藏起来。我不确定为什么要进行双重测试。= 0是否足够?或作为@ Marcucciby2查询,您打算使用Or吗?

就像其他答案中提到的那样,您可以通过切换诸如ScreenUpdating,pageBreaks之类的内容并切换至手动计算模式来进行一些优化。

如果可能,请删除该ActiveSheet参考,并使用实际的工作簿和工作表参考。

Option Explicit
Public Sub HideRows()
    Dim cell As Range, unionRng As Range
    For Each cell In ActiveSheet.Range("H18:H469")
        If cell.Value = 0 Then
            If Not unionRng Is Nothing Then
                Set unionRng = Union(unionRng, cell)
            Else
                Set unionRng = cell
            End If
        End If
    Next
    If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
End Sub
Run Code Online (Sandbox Code Playgroud)