В стремлении ускорить мой код VBA я искал методы онлайн. Множество методов проходит мимо, и один из них, который продолжает возвращаться, похоже, использует функции листа вместо кода , где это возможно.
Мой опыт, однако, противоречит этому совету. Я считаю, что функции листа работают, как правило, медленнее, чем мой код . Мой простой тест, показанный ниже, показывает, что код примерно в два раза быстрее, чем функция листа. Я нашел те же результаты с другими функциями, такими как MATCH.
Мой вопрос в том, склонны ли вы, пользователи VBA, использовать функции кода или рабочего листа? Есть ли причины использовать функции над кодом (кроме пары строк дополнительного кода)?
Sub testSum()
Dim testarray(0 To 10000) As Variant
Dim val As Variant
Dim valSum As Variant
Dim i As Long, j As Long
Dim t As Single
' create testarray
For i = 0 To 10000
testarray(i) = Rnd
Next
For i = 0 To 10000 Step 100
testarray(i) = "text"
Next
' measure code
t = Timer
For j = 1 To 10000
valSum = 0
For Each val In testarray
If IsNumeric(val) Then valSum = valSum + val
Next
Next
Debug.Print "Array: ", Int(valSum), Timer - t
' measure function
t = Timer
For j = 1 To 10000
valSum = 0
valSum = Application.WorksheetFunction.Sum(testarray)
Next
Debug.Print "Sum: ", Int(valSum), Timer - t
End Sub