Я так полагаю, пример функции приведён чисто условный. Оптимизировать саму функцию смысла нет. Можно вообще сделать так:
Function SpeedTest(inp1 As Double, inp2 As Double, inp3 As Double)
SpeedTest = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
End Function
и разница в скорости будет практически не заметна.
Тут уже дело в скорости вызова самой пользовательской функуии, что для экселя оставляет желать лучшего. Если UDF вводится в большой диапазон ячеек - сразу появляются "тормоза", какая бы простая она ни была. Скорость вызова UDF можно приравнять к скорости перебора по ячейкам листа. При чём, даже если ей не передавать ни один параметр:
Function SpeedTest()
SpeedTest = 1
End Function
(Естественно, вызывать её нужно тоже без пераметров).
Это и есть та ложка дёгтя в бочке мёда! Такая полезная вещь, как пользовательские функции, иногда неприемлемы из-за своей скорости вызова.
Мой вопрос заключается в том, можно ли вызвать внешнюю функцию, находящуюся в dll, не заходя в VBA, а сразу обратиться к сторонней библиотеке ? Может быть это можно сделать как-то через Excel Macro 4 ?