Performance difference between checking a cell's interior colour vs. its value

前端 未结 2 1423
广开言路
广开言路 2020-12-22 09:07

I am running an asset management project in excel. Using a connection with an SQL database I am able to import large numbers of maintenance plans.

Based on what I im

相关标签:
2条回答
  • 2020-12-22 09:45

    Just extended the code from here: Performance difference between looping range vs looping array

    Range tested: A1:A100000

    Read/Write Cell        = 15,765625 seconds
    Read/Write Array       = 0,203125 seconds
    
    Read Cell              = 0,37109375 seconds
    Read Array             = 0,0234375 seconds
    Read Interior Color    = 1,421875 seconds
    

    So you have the direct comparison between reading color vs reading array value too.


    Option Explicit
    
    Const strRANGE_ADDRESS As String = "A1:A100000"
    
    Sub LoopRangeReadWrite()
    
        Dim r As Range
        Dim lStart As Double
        Dim lEnd As Double
    
        lStart = Timer
    
        For Each r In Range(strRANGE_ADDRESS)
            r.Value = r.Value + 1
        Next r
    
        lEnd = Timer
    
        Debug.Print "Read/Write Cell = " & (lEnd - lStart) & " seconds"
    
    End Sub
    
    Sub LoopArrayAddOne()
    
        Dim varArray As Variant
        Dim var As Variant
        Dim lStart As Double
        Dim lEnd As Double
    
        lStart = Timer
    
        varArray = Range(strRANGE_ADDRESS).Value
        For Each var In varArray
            var = var + 1
        Next var
        Range(strRANGE_ADDRESS).Value = varArray
    
        lEnd = Timer
    
        Debug.Print "Read/Write Array = " & (lEnd - lStart) & " seconds"
    
    End Sub
    
    Sub LoopRangeReadColor()
    
        Dim r As Range
        Dim lStart As Double
        Dim lEnd As Double
        Dim a As Long
    
        lStart = Timer
    
        For Each r In Range(strRANGE_ADDRESS)
    
            a = r.Interior.Color
        Next r
    
        lEnd = Timer
    
        Debug.Print "Read Interior Color = " & (lEnd - lStart) & " seconds"
    
    End Sub
    
    Sub LoopRangeReadValue()
    
        Dim r As Range
        Dim lStart As Double
        Dim lEnd As Double
        Dim a As Variant
    
        lStart = Timer
    
        For Each r In Range(strRANGE_ADDRESS)
            a = r.Value
        Next r
    
        lEnd = Timer
    
        Debug.Print "Read Cell = " & (lEnd - lStart) & " seconds"
    
    End Sub
    
    Sub LoopArrayValue()
    
        Dim varArray As Variant
        Dim var As Variant
        Dim lStart As Double
        Dim lEnd As Double
    
        lStart = Timer
    
        varArray = Range(strRANGE_ADDRESS).Value
        For Each var In varArray
            var = var + 1
        Next var
    
        lEnd = Timer
    
        Debug.Print "Read Array = " & (lEnd - lStart) & " seconds"
    
    End Sub
    
    0 讨论(0)
  • 2020-12-22 09:46

    There seems to be a performance difference indeed. I just checked a cell's value and a cell's interior colour for one hundred million times and there are clear differences:

    Checking the value :  456 seconds
    Checking the colour: 1281 seconds
    

    In other words: checking the values goes ±2.8 times faster (following this single simple experiment).

    0 讨论(0)
提交回复
热议问题