Каков наилучший способ передачи диапазона Excel в пользовательскую функцию?

Каков наилучший способ передачи диапазона Excel в пользовательскую функцию?

Я передаю большой диапазон из электронной таблицы Excel в параметр ExcelRange пользовательской функции (UDF), написанной на VBA.

  1. Я могу объявить параметр ExcelRange как Range, а затем преобразовать его в Variant:
    Dim VariantArray As Variant
    VariantArray = ExcelRange.Value2

или

  1. Я могу напрямую объявить параметр ExcelRange UDF как Variant.

В любом случае внутри цикла я преобразую каждый элемент VariantArray или ExcelRange в переменную Double.

Что эффективнее с точки зрения времени: 1 или 2?

решение1

В любом случае, внутри цикла, я преобразую каждый элемент VariantArray в переменную Double.
Что эффективнее, 1. или 2.?

Так как вы в любом случае преобразуете свой диапазон в вариант, я не вижу большой разницы в производительности.
Независимо от того, преобразуете ли вы, а затем передаете ИЛИ передаете, а затем преобразуете, это должно потребовать одинаковых усилий.

Разница заключается в использовании UDF:

  • если вам нужно что-то сделать с диапазоном (например, получить адрес), то, очевидно, вам нужно принять аргумент Range
  • Если вы ожидаете, что пользователи будут передавать массивы, а не диапазоны, то лучше объявить аргумент как вариант (например, =SUM({1,2,3})допустимая формула в Excel).

Связанный контент