Forum Discussion
waygar
Feb 15, 2023Brass Contributor
Speeding Up VBA execution
Hi, The following code searches a large database for cells with a certain fill color and then removes the underlying conditional formatting. The runtime is quite slow. Can this code be made more eff...
HansVogelaar
Mar 05, 2023MVP
Try this. Please test it on a smaller subset first, to see if it works.
Sub Obsolete()
Const SBSO = "SBS Online"
Dim l1Row As Long
Dim II As Long
Dim JJ As Long
Dim v As Variant
Application.ScreenUpdating = False
l1Row = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
v = Range("A1:F" & l1Row).Value
For II = 2 To l1Row - 1
For JJ = II + 1 To l1Row
If v(II, 4) = v(JJ, 4) And v(II, 3) = v(JJ, 3) Then
If v(II, 5) <> SBSO And v(JJ, 5) <> SBSO Then Exit For
If v(II, 5) = SBSO And v(II, 6) > v(JJ, 6) Then v(II, 1) = "del"
If v(JJ, 5) = SBSO And v(JJ, 6) > v(II, 6) Then v(JJ, 1) = "del"
Exit For
End If
Next JJ
Next II
Range("A1:F" & l1Row).Value = v
Application.ScreenUpdating = True
End Subwaygar
Mar 05, 2023Brass Contributor
Thanks Hans,
That is unbelievable. A test data set took 80 seconds to complete with my code whereas your routine did it in less than a second.
Unbelievable.
Cheers,
That is unbelievable. A test data set took 80 seconds to complete with my code whereas your routine did it in less than a second.
Unbelievable.
Cheers,
- HansVogelaarMar 05, 2023MVP
My version reads the data into an array, traverses the array and then writes the array back to the sheet in one go.
Array manipulations are much faster than sheet manipulations.
- waygarMar 05, 2023Brass ContributorHi Hans,
Do you lose cell formatting in this approach when moving data in and out of arrays?- HansVogelaarMar 06, 2023MVP