单元格为空时隐藏行数(更快)

时间:2015-01-07 23:54:27

标签: excel vba excel-vba

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

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

要求:

如果行中的第一个单元格为空,则隐藏整行 它需要向后兼容其他excel版本而不是2013

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行和年龄。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

在我的评论和帖子中:Faster way to hide empty rows 并感谢@tigeravatar指出它。我使用了以下代码,该代码在我的场景中起作用:

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

答案 2 :(得分:0)

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

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