我查看了一些文章和建议,并为我的问题提出了解决方案。
文章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行和年龄。
加载工作簿时,宏会自动运行(不确定怎么做)哈哈)
答案 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