Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как задать функцию, возвращающую массив? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как задать функцию, возвращающую массив? (Макросы/Sub)
Как задать функцию, возвращающую массив?
Alex_ST Дата: Четверг, 24.11.2016, 12:04 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 2901
Репутация: 505 ±
Замечаний: 0% ±

2003
Что-то я тормознул. Не могу вспомнить, как в VBA задать функцию, возвращающую массив?
С любыми другими типами переменных всё просто:
[vba]
Код
Function Qwerty$(Arr, Arg) ' Function Qwerty(Arr, Arg) As String
Function Qwerty%(Arr, Arg) ' Function Qwerty(Arr, Arg) As Integer
Function Qwerty&(Arr, Arg) ' Function Qwerty(Arr, Arg) As Long
Function Qwerty(Arr, Arg) As Boolean
[/vba]
А вот как быть с массивом, чтобы, когда я возвращаю значение из неё в массив, не ругалось на размерность?
Пока я просто не указываю размерности функции (получается As Variant).
Но это как-то не хорошо.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЧто-то я тормознул. Не могу вспомнить, как в VBA задать функцию, возвращающую массив?
С любыми другими типами переменных всё просто:
[vba]
Код
Function Qwerty$(Arr, Arg) ' Function Qwerty(Arr, Arg) As String
Function Qwerty%(Arr, Arg) ' Function Qwerty(Arr, Arg) As Integer
Function Qwerty&(Arr, Arg) ' Function Qwerty(Arr, Arg) As Long
Function Qwerty(Arr, Arg) As Boolean
[/vba]
А вот как быть с массивом, чтобы, когда я возвращаю значение из неё в массив, не ругалось на размерность?
Пока я просто не указываю размерности функции (получается As Variant).
Но это как-то не хорошо.

Автор - Alex_ST
Дата добавления - 24.11.2016 в 12:04
Manyasha Дата: Четверг, 24.11.2016, 13:02 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 1589
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
Alex_ST, здравствуйте. Может так?
[vba]
Код
Function testFunc(length As Long) As Long()
    Dim res() As Long
    ReDim res(length)
    For i = 0 To length
        res(i) = i
    Next i
    testFunc = res()
End Function
Sub ttt()
    Dim arr
    arr = testFunc(5)
    For i = 0 To UBound(arr)
        Debug.Print i, arr(i)
    Next i
End Sub
[/vba]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеAlex_ST, здравствуйте. Может так?
[vba]
Код
Function testFunc(length As Long) As Long()
    Dim res() As Long
    ReDim res(length)
    For i = 0 To length
        res(i) = i
    Next i
    testFunc = res()
End Function
Sub ttt()
    Dim arr
    arr = testFunc(5)
    For i = 0 To UBound(arr)
        Debug.Print i, arr(i)
    Next i
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 24.11.2016 в 13:02
Alex_ST Дата: Четверг, 24.11.2016, 13:13 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2901
Репутация: 505 ±
Замечаний: 0% ±

2003
Manyasha, спасибо.
Я, правда, не знаю, какая размерность будет у элементов массива. Поэтому и пытался сделать As Variant, но по привычке в сокращённой записи, т.е. просто опустив его.
Ну и, естественно, Function Qwerty()() не прошло (что не удивительно).
А Function Qwerty() As Variant() - работает.
[vba]
Код
Function Qwerty(Arr, Qwas) As Variant()
   Qwerty = Array(1, 2, 3, 4)
End Function
Sub test_Qwerty()
Debug.Print IsArray(Qwerty(1, 2))
   Dim Arr(): Arr = Qwerty(1, 2)
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 24.11.2016, 21:27
 
Ответить
СообщениеManyasha, спасибо.
Я, правда, не знаю, какая размерность будет у элементов массива. Поэтому и пытался сделать As Variant, но по привычке в сокращённой записи, т.е. просто опустив его.
Ну и, естественно, Function Qwerty()() не прошло (что не удивительно).
А Function Qwerty() As Variant() - работает.
[vba]
Код
Function Qwerty(Arr, Qwas) As Variant()
   Qwerty = Array(1, 2, 3, 4)
End Function
Sub test_Qwerty()
Debug.Print IsArray(Qwerty(1, 2))
   Dim Arr(): Arr = Qwerty(1, 2)
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 24.11.2016 в 13:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как задать функцию, возвращающую массив? (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!