更快捷地隐藏空行

时间:2014-06-06 09:26:59

标签: excel excel-vba excel-formula excel-2010 vba

我试图隐藏列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

如何加快速度?

4 个答案:

答案 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