单元格为空时隐藏行 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
我查看了一些文章和建议,并提出了解决我的问题的方法。
文章 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