Написание функции, возвращающий массив (Excel)

Программирование на Visual Basic for Applications
ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Написание функции, возвращающий массив (Excel)

Сообщение ZlydenGL » 30.11.2004 (Вт) 10:59

Еще раз всем привет!

Как писать обычные функции в Ёкселе (то есть функции, возвращающие значение/строку/range), похоже знают многие. А вот как написать функцию, которая вернет МАССИВ?

Задача - нечто похожее на то, что делает встроенная функция TRANSPOSE(). Но вот как описать эту функцию?

В двух словах. В листе Excel'я есть столбец данных:
1
2
64
6
7
8
1
45
ets.

Мне надо из этого столбца случайным образом выбрать значения и вывести их в определенный range. При этом количество выборки будет определяться соответственно именно количеством строк этого range'а.

У кого-нить есть мысли по этому поводу?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 30.11.2004 (Вт) 13:45

Вообще-то:
If the Range object contains more than one cell, returns an array of values
По сему:
Код: Выделить всё
Ubound(Range("A1:A10").Value)=10
Ubound(Range("A1:J1").Value)=1
Ubound(Range("A1:J1").Value,2)=10
Ubound(Application.Transpose(Range("A1:J1").Value))=10

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 01.12.2004 (Ср) 11:29

Или я не понял, или ты не понял, или одно из двух :lol:

Мне надо описать функцию так, чтобы она возвращала массив в те ячейки, где она забита в виде {MyFunction(A1:B12,1)}. Вот как мне из тела функции узнать, в какие ячейки мне надо подставлять значения? А это подразумевается в твоем коде.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.12.2004 (Ср) 13:09

А не надо знать.

Тип функции - Variant.
В теле объявить массив нужного размера и типа. Последней командой присвоить этот массив имени функции.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 01.12.2004 (Ср) 17:34

Пришел Шаман и все опошлил ;) Шучу естественно. Пошел пробовать!
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 57

    TopList