单元格为空时隐藏行 excel(更快的方式)

Hide Rows when cell is empty excel (faster way)

我查看了一些文章和建议,并提出了解决我的问题的方法。

文章 Faster way to hide empty rows 建议在循环之前将 Application.ScreenUpdating 切换为 false,将循环之后切换为 true。它稍微加快了脚本的速度,但对于 10.000 行,它仍然需要相当长的时间。

要求:

如果行中的第一个单元格为空,则隐藏整行 它需要向后兼容除 2013

以外的其他 excel 版本

excel 2013

的当前工作解决方案
 Application.ScreenUpdating = False
 Dim s As String
 For i = 1 To range("A1:A10000").Count
     s = i & ":" & i
     If IsEmpty(Cells(i, 1).Value) Then
         Rows(s).Select
         Selection.EntireRow.Hidden = True
    End If
 Next
 Application.ScreenUpdating = True

不幸的是,我不知道 sheet 中有多少数据,它可以包含少于我在示例中使用的 10.000 个或更多。当我运行脚本时,它工作正常,但是 sheet.

中所有单元格的 10.000 行和年龄需要相当长的时间

宏会在加载工作簿时自动运行(还不确定该怎么做哈哈)

Dim rngBlnk As Range

On Error Resume Next 'in case no blanks are present...
Set rngBlnk = Range("A1:A100000").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0

If Not rngBlnk Is Nothing Then
    Debug.Print rngBlnk.Address()
    rngBlnk.EntireRow.Hidden = True
End If

如我的评论和此 post:Faster way to hide empty rows 并感谢@tigeravatar 指出了这一点。我使用了以下适用于我的场景的代码:

Range("A1:A10000").AutoFilter 1, "<>", , , False

select过程需要时间,隐藏行前不需要select行。试试下面的变化...

Application.ScreenUpdating = False
Dim s As String
For i = 1 To range("A1:A10000").Count
    s = i & ":" & i
    If IsEmpty(Cells(i, 1).Value) Then
         Rows(s).EntireRow.Hidden = True
    End If
Next 
Application.ScreenUpdating = True