Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2015, 22:22   #1
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию Как сослаться на элемент массива из функции листа?

Доброго времени суток!
Не удается найти способ вставки в формулу листа данных, возвращаемых пользовательской функцией.
Написал функцию getTarif(), которая возвращает массив из тех элементов. Например:
Код:
Public Function getTarif(ByVal datTar As Date) As Variant	' функция расчета трех тарифов на заданную дату
    ' datTar - на входе дата формата dd.mm.yyyy
    ........
    'тут вычисляются значения a, b, c - суть этих расчетов не имеет значения
    ........
    getTarif = Array(a, b, c)	' возвращается массив из 3-х элементов
End Function
В ячейке на листе пытаюсь вставить формулу для второго элемента массива:
Цитата:
=getTarif(СЕГОДНЯ())(1)
получаю ошибку - #ССЫЛКА!
при этом
Цитата:
=getTarif(СЕГОДНЯ())
или
Цитата:
=getTarif(C16) ' где C16 - адрес ячейки с датой
правильно возвращает нулевой элемент массива
Эксперименты с разными группировками скобками были безуспешными, во встроенной справке - тоже ничего не обнаружил...

Пожалуйста подскажите синтаксис, как из формулы на листе получить значение массива с конкретно-заданным индексом?
Благодарю за помощь!
Debauchee вне форума Ответить с цитированием
Старый 31.01.2015, 01:22   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я бы не ломал голову, а просто добавил ещё один параметр - что именно возвращать. Тем более если массив никогда не нужен.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.01.2015, 11:22   #3
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Для второго элемента массива :

=ИНДЕКС(getTarif(СЕГОДНЯ());2)
pashulka вне форума Ответить с цитированием
Старый 05.02.2015, 20:53   #4
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию

Спасибо за помощь!
Остановился на варианте с добавлением второго параметра в функцию.
Debauchee вне форума Ответить с цитированием
Старый 05.02.2015, 22:23   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Кстати, когда UDF возвращает массив - можно его весь вывести на лист.
Только нужно функцию забивать как формулу массива сразу в диапазон, ну и массив лучше делать сразу двумерным (с одномерным не работал, не знаю - может быть тоже получится).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2015, 03:16   #6
ikki_pf
Форумчанин
 
Регистрация: 25.02.2012
Сообщений: 166
По умолчанию

получится и с одномерным.
только не надо забывать. что это всегда строка (горизонтальный массив)
соответственно, для вывода такого массива массивной формулой в вертикальный столбец нужно обернуть вызов UDF функцией листа ТРАНСП
Вложения
Тип файла: zip udf - одномерный массив.zip (10.8 Кб, 6 просмотров)
ikki_pf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как разбить элемент массива? emdroof C# (си шарп) 4 11.03.2013 20:54
Как удалить элемент массива? БалаШагаЛ PHP 1 28.01.2012 20:46
Как заменить элемент элемент одномерного массива? Паскаль Женька Good Помощь студентам 5 21.12.2011 00:07
Как удалить(добавить) элемент массива? vanek1 Помощь студентам 3 15.12.2010 22:26
Как сослаться на второй элемент в объединении NeiL Общие вопросы C/C++ 1 01.06.2008 16:04