gpt4 book ai didi

vba - 如何在带有嵌套 If 循环的 Excel VBA For 循环中提高性能?

转载 作者:行者123 更新时间:2023-12-04 21:02:02 25 4
gpt4 key购买 nike

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

我找到了一些优化循环的方法示例,但我似乎无法将它们中的任何一个有效地应用于我的代码。我要做的是在单列中循环大约 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

跑得很快

关于vba - 如何在带有嵌套 If 循环的 Excel VBA For 循环中提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com