如何提高Excel VBA For循环中嵌套If循环的性能?

这是我的第一篇文章,所以如果我需要做任何改变,请告诉我。

我发现了一些优化循环的方法,但我似乎无法将其中的任何一个有效地应用于我的代码。 我想要做的是循环通过单个列中的大约170个单元格,并根据单元格值是否为0隐藏或显示整个行。

每次激活某些表单时,我都希望代码能够运行。 现在这段代码需要大约4秒的时间才能运行。 它似乎应该比这更快! 这就是为什么我在这里寻求帮助。

这里是我正在使用的代码(FormatSheet返回一个BOOLEAN,其中True表示可以在此表单上执行此代码,False表示跳过在此表单上执行此代码:

Private Sub mobjWb_SheetActivate(ByVal Sh As Object) Dim r As Long Dim z As Long Dim varray As Variant Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False If Not FormatSheet(Sh) Then Exit Sub End If Set varray = Range("$F$1", Cells(Rows.count, "F").End(x1up)).Value For Each r In varray z = r.Value If z = 0 Then Range("F" & r).EntireRow.Hidden = True Else Range("F" & r).EntireRow.Hidden = False End If Next r Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True End Sub 

有几个非常微小的变化:

 Sub qwerty() Dim r As Range Dim z As Long, N As Long Dim varray As Range Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False N = Cells(Rows.Count, "F").End(xlUp).Row Set varray = Range("F1:F" & N) For Each r In varray z = r.Value If z = 0 Then r.EntireRow.Hidden = True Else r.EntireRow.Hidden = False End If Next r Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True End Sub 

跑得相当快

有一件事可能会加速一点点..我不会使用zvariables。 你可以用现有的r来做同样的事情。

 For Each r In varray If r.Value = 0 Then Range("F" & r).EntireRow.Hidden = True Else Range("F" & r).EntireRow.Hidden = False End If Next r