Страницы: 1
RSS
запись диапазонов в 2 мерный массив построчно
 
Добрый день.
Возникла небходимость в цикле производить запись range(cells(i,1),cells(i,20), в 2 мерный массив arr(n,20)
Можно ли как либо обойтись без цикла FOR J ? Чтобы не записывать по как   arr(n,J)=rg.cells(i,J) дополнительным циклом.
Пример
Код
for i=1 to rg.rows.count
if .....
n=n+1
ReDim Preserve ax(n, 20)
'тут хочется без цикла что то похожее на
[I]?диапазон[/I] ?( arr(n,1) ,arr(n,20)) = range rg(cells(i,1),cells(i,20)
 
А зачем?
Я иногда собираю коллекцию (или словарь) индексов исходного массива, или просто строк листа.
В любом случае можно собрать такую коллекцию, затем одним циклом переложить данные в созданный под размер массив, если уж так необходим этот отдельный массив.
Если конечно не упираемся в недостаток памяти...
 
Т. е я пытаюсь для себя выяснить можно ли обратиться к строке или столбцу массива по аналогии с range. Во первых, так код короче, ну и выполняется он быстрее.
Одномерный массив ведь позволяет считать без цикла целый диапазон например arr() = Range(Cells(10, 1), Cells(10, 25))
 
Была такая тема, поищите поиском. Через обращение к памяти, но, если не ошибаюсь, можно было обратиться не к строке, а только к столбцу.

Цитата
Sla_0412 написал:
Одномерный массив ведь позволяет считать без цикла целый диапазон например arr() = Range(Cells(10, 1), Cells(10, 25))
получите двумерный массив (1 To 1, 1 To 25).

Фактически вам нужен не двумерный массив, а одномерный массив двумерных массивов (1,n)... а это совсем другая история.
Рекомендую всё же сначала забрать данные с листа в обычный двумерный массив, сразу все, а не бегать и собирать построчно.
А уже потом его в памяти пересобрать в массив массивов, если очень надо.
Цитата
Sla_0412 написал:
ну и выполняется он быстрее.
например? :) Разве что выгрузка одной конкретной строки диапазона на лист? Сомнительный выигрыш.
Думаю, вам нужна пересборка типа
Код
ReDim RowsArray(1 To Ubound(Source,1))
ReDim OneRow(1 to Ubound(Source,2))
For j = 1 to Ubound(Source,1)
    For i = 1 to Ubound(Source,2)
        OneRow(1,i)=Source(j,i)
    Next i
    RowsArray(j)=OneRow
Next j
несильно замедлит работу и гораздо быстрее, чем построчная сборка с листа, например.
Обращаться к строке можно будет типа RowsArray(stroka), к ячейке как RowsArray(stroka)(stolbec)
Но смысла в этом не вижу, гораздо проще разово собирать нужные строки одним маленьким циклом перед выгрузкой
F1 творит чудеса
 
Спасибо всем за ответы. Все же проще 2 мя циклами сделать участок кода. Информация была полезной.
Страницы: 1
Наверх