Страницы: 1
RSS
Заполнение массива с помощью цикла Do While loop
 
Код
ReDim ArrSbor (1 to 1, 1 to 1) as variant
x=1
y=1

Do while List.Cells (x,1) <> ""
     ReDim Preserve ArrSbor (1 to x, 1 to y) 
                  For y=1 to 10
                       ArrSbor (x,y)=List.Cells (x,y)
                  Next y  
 x=x+1  
Loop
Помогите пожалуйста разобраться в массиве.

Допустим на листе есть таблица, количество столбцов которой известно, а вот со строками дело обстоит сложнее. Хочу сделать цикл Do While по строкам, чтобы в массив попадали только те строки, в которых первая ячейка заполнена, List.Cells (i,1) <> "".
Внутри цикла Do Loop сделать цикл For Next для добавления ячеек по столбцам.

Проблема в том, что если используется комманда Redim Preserve, то переменную можно использовать только в правой части массива. Так же читал, что массивы можно транспонировать, но что в моем случае необходимо сделать я так и не понял(
 
Изменено: CovalevSA - 27.03.2017 16:06:15
 
Вы правильно пишете, что
Цитата
CovalevSA написал:
если используется комманда Redim Preserve, то переменную можно использовать только в правой части массива
а делаете наоборот:  x=x+1 , а затем ReDim Preserve ArrSbor (1 to x, 1 to y)
плюс изначально у Вас y=1, потом ReDim Preserve ArrSbor (1 to x, 1 to y), а потом цикл от y=1 до 10. Как только y=2, всё, выход за границы массива
Код
Do while List.Cells (x,1) <> ""
     ReDim Preserve ArrSbor (1 to 10, 1 to x) 
                  For y=1 to 10
                     ArrSbor (y,x)=List.Cells (x,y)   
                  Next y
 x=x+1
Loop
соответственно, выгружать потом наоборот
 
yozhik, спасибо большое за разъяснения! Все сработало:)
 
CovalevSA, смутила Ваша фраза
Цитата
CovalevSA написал:
цикл Do While по строкам, чтобы в массив попадали только те строки, в которых первая ячейка заполнена
Если у Вас первая попавшаяся в столбце незаполненная ячейка - это конец списка, тогда все нормально. Если у Вас в списке встречаются строки с пустой первой ячейкой, а далее идут снова заполненные, то цикл Ваш будет работать до первой незаполненной без обработки последующих. Т.е., вроде как по смыслу можно понять, что делаем выборку заполненных ячеек, а код обработки получаем до первой незаполненной
Изменено: yozhik - 27.03.2017 16:55:25
 
yozhik, первая пустая ячейка будет концом списка. В дальнейшем возможно прийдется написать условие, чтобы перешагивать через пустые ячейки и дальше набирать данные в массив. Но это потом, я только начал изучать VBA)
Изменено: CovalevSA - 27.03.2017 17:29:28
 
CovalevSA в помощь изучению
Код
Dim lLastRow As Long
Dim lLastCol As Long
lLastRow = Cells(Rows.Count,1).End(xlUp).Row 'последняя заполненная ячейка в 1 столбце
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column 'последняя заполненная ячейка в 1 строке
 
Может там вообще достаточно использовать
Код
ArrSbor=List.Cells(1,1).currentregion.value

файла ведь никто не видел...
Изменено: Hugo - 27.03.2017 17:59:32
Страницы: 1
Читают тему
Наверх