我试图隐藏列A中单元格的值为空(即为空)的所有行。我试图使用以下代码:
Range("A7:A117").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
但是,A列中的每个单元格都有一个VLOOKUP
公式,xlCellTypeBlanks
认为具有公式的单元格,但没有值,不为空白。
所以我尝试使用以下代码,但速度非常慢。
For i = 17 To 117
If ActiveSheet.Cells(i, 1) = "" Then
ActiveSheet.Cells(i, 1).EntireRow.Hidden = True
End If
如何加快速度?
答案 0 :(得分:5)
为什么不尝试使用AutoFilter:
Range("A7:A117").AutoFilter 1, "<>", , , False
答案 1 :(得分:1)
不是for循环慢,而是每次更改时都会更新屏幕(这会使用相当大的处理能力,从而减慢所有内容)。如果你在隐藏行之前关闭了屏幕更新,那么在它只更新一次之后将其重新打开,脚本将运行得更快。我尝试了100行,几乎是即时的。
Sub hideEmptyRows()
Application.ScreenUpdating = False
For i = 1 To 117
If ActiveSheet.Cells(i, 1) = "" Then
ActiveSheet.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:0)
Range("A7:A117").AutoFilter 1, "<>", , , False
它隐藏了空单元格,但如果你试图用鼠标取消隐藏,则不能
答案 3 :(得分:0)
这是没有自动过滤器的答案:
Dim totalRange As Range
ActiveSheet.Range("A17:A117").Hidde = false
For Each cell In ActiveSheet.Range("A17:A117")
If cell = "" And totalRange Is Nothing Then
Set totalRange = cell
ElseIf cell = "" Then
Set totalRange = Application.union(totalRange, cell)
End If
Next
If Not totalRange Is Nothing Then
totalRange.EntireRow.Hidden = True
End If