哪个更快:在 IF 期间取消隐藏行或在另一个宏中一次取消隐藏所有行?

问题描述 投票:0回答:1

我有一个从列表生成工作簿的过程。其中一个选项卡具有不同的高度,我的宏使用一个公式来确定是否隐藏一行。

当我移动到下一个工作簿时,我可能需要取消隐藏上一次迭代中隐藏的一些行。为了更好地理解 Excel 并从我的宏中获得更好的性能,我想知道在迭代时利用 Else 条件取消隐藏行是否更快,因为它已经这样做了,或者简单地取消隐藏所有行是否更快在单独的宏中再次行并排除 else 条件。

基本上,很好奇哪个是更优化的过程。起初,我认为使用另一个宏来跳过所有迭代和逻辑,并在根据需要再次隐藏它们之前简单地取消隐藏所有行会更快,但现在考虑它,因为它已经迭代了,我很好奇它实际上更慢。

Sub DoProcess()

Call UnhideRows
Call HideRows

End Sub
Sub UnHideRows()

Call DefineVariables
   
    Sheet1.Rows("13:37").Rows.EntireRow.Hidden = False

End Sub
Sub HideRows()

Call DefineVariables
For x = 13 to 37
    If Sheet1.Cells(x,7).Value = "Hide"
        Sheet1.Cells(x,7).EntireRow.Hidden = True
    End If
Next
End Sub

或者用这种方法来完成这个任务是否更好:

Sub HideUnhideRows()

Call DefineVariables

For x = 13 To 37
    If Sheet1.Cells(x, 7).Value = "Hide" Then
        Sheet1.Cells(x, 7).EntireRow.Hidden = True
    Else
        Sheet1.Cells(x, 7).EntireRow.Hidden = False
    End If
Next

End Sub
excel vba
1个回答
0
投票

最快的方法是合并所有需要隐藏的行:

    Sub HideRows()
    Dim rows2Hide As Range
    Call DefineVariables
    Sheet1.Range("G13:G37").EntireRow.Hidden = False
    For x = 13 To 37
        If Sheet1.Cells(x, 7).Value = "Hide" Then
            If rows2Hide Is Nothing Then
                Set rows2Hide = Sheet1.Cells(x, 7)
            Else
                Set rows2Hide = Union(rows2Hide, Sheet1.Cells(x, 7))
            End If
        End If
    Next
    If Not rows2Hide Is Nothing Then
        rows2Hide.EntireRow.Hidden = True
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.