Страницы: 1
RSS
Выгрузка массива
 

Уважаемые гуру форума, прошу проконсультировать в чисто теоретическом вопросе. Ситуация такая. Предположим, что имеется массив размером 5х4 и этот массив выгружается в ячейку А2. При этом в ячейках столбца С у нас имеется формула (любая). При выгрузке означенного массива формула разумеется затрется. Я пытаюсь бороться с этим 2 способами:

Способ 1 . Формирую 2 массива (5х2 и 5х1) и вставляю их в соответствующие ячейки

Код
Private Sub CommandButton1_Click()    ReDim Arr(1 To 5, 1 To 2)    ReDim Arr2(1 To 5, 1 To 1)        For j = 1 To 5            Arr(j, 1) = 1            Arr(j, 2) = 2            Arr2(j, 1) = 3        Next j    Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr 'выгрузка результата    Cells(2, 4).Resize(UBound(Arr2, 1), UBound(Arr2, 2)).Value = Arr2End Sub

Способ 2. После выгрузки массива восстанавливаю формулу в «затершихся» ячейках

Код
Private Sub CommandButton2_Click()    ReDim Arr(1 To 5, 1 To 4)        For j = 1 To 5            Arr(j, 1) = 1            Arr(j, 2) = 2            Arr(j, 4) = 3        Next j    Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr 'выгрузка результата    Cells(1, 3).AutoFill Destination:=Range(Cells(1, 3), Cells(6, 3)), Type:=xlFillDefault 'восстанавливаем формулуEnd Sub

Оба варианта работают, но очень хотелось бы знать какой из вариантов более правильный и грамотный. И еще вопрос про данную ситуацию. Можно ли каким-либо способом выгружать массив сразу в 2 места (т.е. часть массива (первые 2 колонки) в ячейку А2, а вторую часть (3 колонку) в ячейку С2)? Или может быть можно каким-либо способом указать в массиве для Arr(j, 3), что в этом элементе массива должна оказаться та формула которая уже имеется на листе?

Заранее спасибо всем откликнувшимся за консультации

 
Цитата
OlegO написал: какой из вариантов более правильный и грамотный
Оба варианта правильные в зависимости от конкретной ситуации, но, при прочих равных, первый вариант быстрее. На ощутимо больших объемах будет заметно

Цитата
OlegO написал: выгружать массив сразу в 2 места
Код
    Cells(2, 1).Resize(UBound(Arr, 1), 2).Value = Arr 'выгружаем 2 первых столбца массива
    Cells(2, 4).Resize(UBound(Arr, 1), 1).Value = Application.Index(Arr, , 4)  'выгружаем 4-й столбец массива
Согласие есть продукт при полном непротивлении сторон
 
Спасибо за ответ, прошу прощения за столь поздний отклик на него (были проблемы с ПК)
 
Цитата
Sanja написал: 'выгружаем 4-й столбец массива
Такой способ медленнее чем два массива. Опять же для БОЛЬШИХ объемов будет актуально
Согласие есть продукт при полном непротивлении сторон
 
Способ 1.2.
Код
Sub Test1()
    Dim Arr1(1 To 5, 1 To 4), Arr2, j As Long
    Arr2 = [C2:C6].Formula
    For j = 1 To 5
        Arr1(j, 1) = 1
        Arr1(j, 2) = 2
        Arr1(j, 3) = Arr2(j, 1)
        Arr1(j, 4) = 4
    Next
    [A2:D6].Value = Arr1
End Sub
Страницы: 1
Наверх