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 написал: если используется комманда 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
CovalevSA написал: цикл Do While по строкам, чтобы в массив попадали только те строки, в которых первая ячейка заполнена
Если у Вас первая попавшаяся в столбце незаполненная ячейка - это конец списка, тогда все нормально. Если у Вас в списке встречаются строки с пустой первой ячейкой, а далее идут снова заполненные, то цикл Ваш будет работать до первой незаполненной без обработки последующих. Т.е., вроде как по смыслу можно понять, что делаем выборку заполненных ячеек, а код обработки получаем до первой незаполненной
yozhik, первая пустая ячейка будет концом списка. В дальнейшем возможно прийдется написать условие, чтобы перешагивать через пустые ячейки и дальше набирать данные в массив. Но это потом, я только начал изучать VBA)
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 строке