Страницы: 1
RSS
VBA - массив
 
Доброй ночи всем.  
Помогите, пожалуйста, разобраться с массивами в VBA. Что-то делаю не так.  
Предложим есть ряд букв (A,B,C,D,E). Необходимо из них сделать массив, и тоже самое вывести, но с помощью функции.  
Пример для того, чтобы понять как оно работает (Для себя)  
 
Function test(range As Variant)  
Dim sel(1 To 5) As String  
Dim i%  
 
For i = 1 To i = 5  
sel(i) = range(i)  
Next  
 
test = sel(i)  
 
End Function  
 
Спасибо
 
Dim S As String  
Dim P() As String  
  S = "A,B,C,D,E"  
P = Split(S, ",")  
 
Не это?
 
а сплит зачем?  
 
Function test(range As Variant)  
'test = array("A","B","C","D","E")  
'test=range  
test=application.trim(application.trim(range)))  
End Function
Живи и дай жить..
 
не trim? конечно, а transpose
Живи и дай жить..
 
Доброе утро =)  
Спасибо, но по видимому я не правильно объяснил задачу.  
Прошу посмотреть пример. В примере необходимо так же выдать массив данных. У меня на данный момент выдает последнее значение массива.  
 
Спасибо
 
Тогда функция и должна возвращать массив. А она у Вас законно возвращает строку:  
Dim Support As String  
...  
EC = Support
Я сам - дурнее всякого примера! ...
 
Спасибо за подсказку.  
Прошу посмотреть пример. Моих знаний хватило только на данное решение =)  
Еще как сделать динамический диапазон я так и не могу разобраться.  
в самом начале я задал Dim Support(1 To 5) As String, а что если поменяется размер массива ? Как тогда?
 
Убираете Dim Support(1 To 5) As String, а вместо него в коде:  
ReDim Support(1 To support_range.Cells.Count)
Я сам - дурнее всякого примера! ...
 
Динамический массив задаётся не Dim, a ReDim a(), или можно сразу, наример ReDim a(1, 1), а потом по ходу ReDim a(1, 5).
 
Спасибо, получилось.  
Вопрос следующего характера, как сделать двумерный массив и при это получить размеры массива как у меня с support_range.Cells.Count?  
В приложение пример. Предположим задаем двумерный массив, делаем перемножения и выдаем одномерный.  
 
Спасибо
 
Ничего не понял, заниматься расследованиями откровенно лень.  
Но заставить что-то выводить можно так:  
 
Support2 = support_range(i + 2)
 
Ок, почитаю мат. часть =)
 
Матчасть такова - ячейки считаются слева направо сверху вниз.  
В Вашем случае после числа следующей будет текст, затем снова число.
 
Ан нет =) Я не собираюсь умножать текст на число.  
Исходя из текста вводится константа в зависимости от текста и перемножается на первое число.  
Предположим по простому надо (без текста):  
XYX*Y  
111  
224  
339  
4416  
5525  
 
X,Y - Вводим (двумерный массив?) Все это дело перемножаем и выводим.  
Но, для меня не понятно след.:  
ReDim Support(1 To support_range.Cells.Count) - как в случае с двумерным массивом?  
For i = 1 To support_range.Cells.Count - так же не понятно =(  
 
Спасибо
 
{quote}{login=Hugo}{date=08.12.2012 09:19}{thema=}{post}Ничего не понял,{/post}{/quote}Я вот тоже пытаюсь, но не получается "хотелку" вычислить :-) Может быть на листе покажете исходный "массив" и желаемый?
 
Прошу посмотреть пример.
 
Почему вдруг xlsx? Я сегодня к ним не готов... :(
 
Исправился.
 
Не это нужно было?  
Sub qqq()  
Dim i As Long, Arr()  
Arr = Range(Cells(2, 1), Cells(7, 3)).Value  
ReDim Arr2(1 To UBound(Arr))  
   For i = 1 To UBound(Arr)  
        Arr2(i) = Arr(i, 1) * Arr(i, 2) * Arr(i, 3)  
   Next  
End Sub
 
Да, ближе к тому.  
А можно, чтобы была как функция? Чтобы в функции задавался регион как массив и выдавался так же массив одномерный.  
 
П.С. Я не могу понять как работает Ubound. Теорию читал, но не поняятно =( Выдает последнее число массива или размер? (Что-то на подобие range.cells.count?)
 
Функция UBound (Visual Basic)  
http://msdn.microsoft.com/ru-ru/library/95b8f22f(v=vs.90).aspx  
Возвращает наибольший доступный индекс для указанного измерения массива.  
 
И зачем Вам одномерный массив, если результат на лист собираетесь выгружать? Зачем  лишние конвертации?
 
>> Да, ближе к тому  
Как понять "ближе? Результат нужный, правильный?  
 
>> и выдавался так же массив одномерный.  
А сейчас не так, разве?  
 
Ubound - размер (верхний). Аналог для лучшего восприятия - число строк диапазона на листе.
 
Прошу посмотреть пример.  
Тоже самое я сделал задав 3 региона, вопрос, как задать весь регион в функцию чтобы был с помощью динамического многомерного массива ?  
 
Function test(a As Range, b As Range, c As Range, Out As Integer)  
ReDim d(a.Cells.Count) As Double  
Dim i As Long  
 
For i = 1 To a.Cells.Count  
d(i) = a.Cells(i) * b.Cells(i) * c.Cells(i)  
Next  
 
test = d(Out)  
 
End Function
 
Помочь кто-то может?  
Или я плохо объесняю?
 
х.з., правильно ли понял... :)  
 
function test#(a as range, out%)  
dim i%  
test=1  
for i=1 to a.columns.count  
 test=test*a.cells(out,i)  
next  
end function  
 
то же с массивом  
function test#(a as range, out%)  
dim i%, arr  
test=1: arr=a.value  
for i=1 to ubound(arr,2)  
 test=test*arr(out,i)  
next  
end function
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
То, спасибо ;)
Страницы: 1
Читают тему
Наверх