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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 10:58   #1
eol
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 27
По умолчанию функция

Добрый день, надеюсь на вашу помощь,в вба я новичек
есть функция, производит определнную обработку веб запроса, результат 2 значения (те это уже массив), не могу понять как это можно написать, тк с функциями только начал работать. Не хочется 2 раза запускать ф-ю с разным параметром, чтобы сократить кол-во запросов и время обработки.

Function count (ByVal input1 As Integer) As Variant 'или фунцию задавать as range?
'мне нужно чтобы в 1ом элеметом массива было число input
'2ом nput*2
End Function

также возникает вопрос, можно ли ее использовать в формуле листа (если протянуть на 2 ячейки и ввести как ф-лу массива, наверное, будет работать, а возможно ли получить в ячейку весь массив и каким-то образом взять его 1 или 2ой элемент?)

Также не понятно как тянуть из нее определенный элемент в vba, присвоить определенной переменной -массиву значение функции и ссылаться уже на эту переменную что-то вроде
set x to Function count (123)
msgbox(x(1,1))
msgbox(x(1,2))

Спасибо!
eol вне форума Ответить с цитированием
Старый 28.02.2012, 11:22   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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

Последний раз редактировалось IgorGO; 28.02.2012 в 11:45.
IgorGO вне форума Ответить с цитированием
Старый 28.02.2012, 11:34   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Игорь, можно ведь написать UDF, возвращающую массив - и если вводить сразу в несколько ячеек как формулу массива - то и будет сразу несколько значений.

Вот нашёл пример (может и с этого форума, не записал):

Выделите диапазон 3*3 ячейки (например B5:D7)
Введите в строке формул =ReturnArray()
Нажмите Ctrl-Shift-Enter

Код:
Public Function ReturnArray() As Variant
Dim temp(1 To 3, 1 To 3) As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 3
    For j = 1 To 3
        temp(i, j) = i * i + j
    Next
Next
ReturnArray = temp
End Function
По второму вопросу:
Код:
Sub tt()
Dim x
x = ReturnArray(2, 1)
End Sub

'или

Sub ttt()
Dim x, y
x = ReturnArray
y = x(2, 1)
End Sub

'или

Sub tttt()
Dim x, y, z, zz
x = ReturnArray
y = UBound(x, 1)
z = UBound(x, 2)
zz = x(y, z)
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.02.2012 в 11:46.
Hugo121 вне форума Ответить с цитированием
Старый 28.02.2012, 11:48   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вернуть массив - это понятно.
вот эта конструкция '2ом nput*2 в теле функции (присвоить ячейке значение) не сработает
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.02.2012, 12:09   #5
eol
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 27
По умолчанию

Hugo121, спасибо большое!
eol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++.функция. savva Помощь студентам 8 05.07.2010 22:28
Функция timyr1997 Общие вопросы Delphi 3 05.07.2010 08:58
функция Lemo Помощь студентам 7 24.10.2008 12:54
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50