# Efficiency of Arrays in Calculations

How to measure the efficiency of arrays in calculations and actions versus the looping process.

Watch this video on YouTube.

Here’s the complete VBA code:

Sub myLoop()
Dim i As Long
Dim StartTime As Single

StartTime = Timer

For i = 2 To 100000
If Cells(i, 4) >= 90 Then
Cells(i, 5) = “A”
Cells(i, 6) = “Promoted to Class XII A”
Else
Cells(i, 5) = “B”
Cells(i, 6) = “Promoted to Class XII B”
End If

Next i

MsgBox Timer – StartTime & ” seconds”

End Sub

Sub myForEachLoop()
Dim i As Long
Dim StartTime As Single

StartTime = Timer

For Each cell In Range(“D2:D100000”)
If cell.Value >= 90 Then
cell.Offset(0, 1) = “A”
cell.Offset(0, 2) = “Promoted to Class XII A”
Else
cell.Offset(0, 1) = “B”
cell.Offset(0, 2) = “Promoted to Class XII B”
End If

Next cell

MsgBox Timer – StartTime & ” seconds”

End Sub

Sub calculateUsingArray()
Dim marks() As Variant
Dim results() As Variant
Dim mydimension As Long, counter As Long
Dim StartTime As Single
Sheet1.Activate

marks = Range(“D2”, Range(“D2”).End(xlDown))

mydimension = UBound(marks, 1)

ReDim results(1 To mydimension, 1 To 2)

StartTime = Timer

For counter = 1 To mydimension
If marks(counter, 1) >= 90 Then
results(counter, 1) = “A”
results(counter, 2) = “Promoted to Class XII A”
Else
results(counter, 1) = “B”
results(counter, 2) = “Promoted to Class XII B”
End If

Next counter

Range(“E2”, Range(“E2”).Offset(mydimension – 1, 1)).Value = results

MsgBox Timer – StartTime & ” seconds”

End Sub

How the array code works: In the marks array we get the data from the range D containing the marks of the students. Now we can determine the UBOUND range of the marks dynamic array. We use this UBOUND value to populate the results dynamic array. The data in the results dynamic array is then placed in the E and F columns. Finally we use the Timer to compare the speeds of the ‘for next’ looping process with the Array method. The ‘for loop’ process takes about 60-90 seconds whereas the Array method does the same job in 0.3 seconds!