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

Vba 单元格为空时隐藏行excel(更快的方式),vba,excel,Vba,Excel,我看了一些文章和建议,并为我的问题提出了解决方案 文章建议使用来切换应用程序。屏幕更新在循环前切换为false,在循环后切换为true。它稍微加快了脚本的速度,但对于10000行,仍然需要相当长的时间 要求: 如果行中的第一个单元格为空,则隐藏完整的行 它需要向后兼容2013年以外的其他excel版本 excel 2013的当前工作解决方案 Application.ScreenUpdating = False Dim s As String For i = 1 To range("A1:A

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

文章建议使用来切换
应用程序。屏幕更新
在循环前切换为false,在循环后切换为true。它稍微加快了脚本的速度,但对于10000行,仍然需要相当长的时间

要求:

如果行中的第一个单元格为空,则隐藏完整的行 它需要向后兼容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
不幸的是,我不知道表中有多少数据,它可以包含我在示例中使用的少于10.000的数据,甚至更多。当我运行脚本时,它工作得很好,但是对于10.000行和工作表中的所有单元格都需要相当长的时间


加载工作簿时,宏将自动运行(还不确定如何执行,哈哈)

如我的评论和本文所述: 感谢@tigeravatar指出这一点。我使用了以下在我的场景中起作用的代码:

Range("A1:A10000").AutoFilter 1, "<>", , , False
范围(“A1:A10000”)。自动筛选1,“,”错误

选择过程需要时间,在隐藏行之前无需选择行。试试下面的变化

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

在你发布的同一个链接中,有一个3票的答案,该链接提供了使用autofilter的代码,这非常有用faster@tigeravatar哦,好的,谢谢,我没看到。。。我希望有更多的解释。我会试着为我的案例重新编写它,如果结果是我想要的。再次感谢,我试过之后会再看。好的,这个可以关闭。我使用了我在问题中提到的帖子中描述的自动过滤建议。对我来说效果很好
范围(“A1:A10000”)。自动筛选1,“,,False
可能重复
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