Я передаю большой диапазон из электронной таблицы Excel в параметр ExcelRange пользовательской функции (UDF), написанной на VBA.
- Я могу объявить параметр ExcelRange как Range, а затем преобразовать его в Variant:
Dim VariantArray As Variant
VariantArray = ExcelRange.Value2
или
- Я могу напрямую объявить параметр ExcelRange UDF как Variant.
В любом случае внутри цикла я преобразую каждый элемент VariantArray или ExcelRange в переменную Double.
Что эффективнее с точки зрения времени: 1 или 2?
решение1
В любом случае, внутри цикла, я преобразую каждый элемент VariantArray в переменную Double.
Что эффективнее, 1. или 2.?
Так как вы в любом случае преобразуете свой диапазон в вариант, я не вижу большой разницы в производительности.
Независимо от того, преобразуете ли вы, а затем передаете ИЛИ передаете, а затем преобразуете, это должно потребовать одинаковых усилий.
Разница заключается в использовании UDF:
- если вам нужно что-то сделать с диапазоном (например, получить адрес), то, очевидно, вам нужно принять аргумент Range
- Если вы ожидаете, что пользователи будут передавать массивы, а не диапазоны, то лучше объявить аргумент как вариант (например,
=SUM({1,2,3})
допустимая формула в Excel).