Как передать переменную массива в именованный диапазон Excel без предварительного сброса его в ячейки?Я хочу, чтобы такой динамический именованный диапазон использовался в списке проверки данных.Я не хочу устанавливать список проверки непосредственно в VBA через переменную массива:
Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Join(ReturnArr, ",")
из-за ограничения длины параметра Formula1
до 255 символов .Таким образом, приведенный выше код работает нормально, пока Len(Join(ReturnArr, ","))
не превышает 255 символов.
Я пробовал это:
Option Explicit
Function ReturnArr() As Variant
Dim Arr(0 To 2)
Arr(0) = "Spinosaur"
Arr(1) = "T-Rex"
Arr(2) = "Triceratops"
ReturnArr = Arr
End Function
Затем я добавляю именованный диапазон, указывающий на массив, возвращающий функцию:
Пока все в порядке.Я создал список проверки данных.
Я также безуспешно пробовал следующие пути:
- транспонирование массива:
ReturnArr = Application.Transpose(Arr)
INDEX(ReturnArr(),,1)
- именованный диапазон с
=OFFSET(ReturnArr(),0,0,ROWS(ReturnArr()),1)
- Я опустился до такого низкого уровня, что использовал одну ячейку, и я поместил формулу
=OFFSET(ReturnArr(),0,0,ROWS(ReturnArr()),1)
в ячейку A1
и сослался на неес INDIRECT("$A$1")
- Я экспериментировал с недокументированной секретной функцией
EVALUATE
, которая работает с именованными диапазонами, как в этом случае .Я попытался EVALUATE
со всеми комбинациями других функций, возвращающих массив.
Дополнительные ссылки:
Быстрый способ вывода массива в диапазон для тех, кто хотел бы внести свой вклад в сбрасывание