Страницы: 1
RSS
Вывод массива на лист без циклическим способом
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста есть ли способ вывести на лист массив заполненный с помощью цикла, без циклическим способом?
Вот пример небольшого кода:
Код
Sub Obmen_Massivami()

Dim Peremennaya_Massiva As Variant
Vsego_Elementov = 10
    
     ReDim Peremennaya_Massiva(1 To Vsego_Elementov)

For i = 1 To Vsego_Elementov
  Peremennaya_Massiva(i) = Cells(i, 1)
Next i

For i = 1 To Vsego_Elementov
   Cells(i, 3) = Peremennaya_Massiva(i)
Next i

[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva     

End Sub
Подскажите что нужно дописать к строке:
Код
[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva
Чтобы выводился весь заполненный первым циклом массив? А не только его Первое(Верхнее) значение.
Т.е. еще раз, как вывести на лист массив, не циклическим способом, но при этом заполненным с помощью цикла?
Или даже так, Есть объект Range(), к нему можно обратиться например так Range(Cells(1, 1), Cells(10, 1)), из этой записи понятно что объект Range обращается к диапазону (A1:A10), а как сделать подобное обращение в массиву и вывести на лист?

Прошу по возможности помочь разобраться.

Благодарю Вас.
 
Код
[E1].Resize(UBound(Peremennaya_Massiva)).Value = Application.Transpose(Peremennaya_Massiva)
 
Уважаемый k61  Благодарю Вас за ответ.
Все работает. Transpose это ведь транспонирование?
 
Я бы сделал так, только не ясно назначение второго цикла, да и забирать данные в массив быстрее не циклом.
Скрытый текст
Изменено: Nordheim - 12.02.2019 09:15:22
"Все гениальное просто, а все простое гениально!!!"
 
IgorBoot, Пример без использования циклов, результат такой же как и в Вашем примере.

Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Уважаемый Nordheim Благодарю Вас за ответ.
Вы Правы, второй цикл не имеет вообще никакого назначения, он был для проверки правильности вывода.
Спасибо за предложенное решение. Впредь буду более грамотно работать с массивами.
Спасибо Вам.
 
Опуская вопрос о циклах, в этом случае транспонирование не обязательно, это зависит от декларации массива.
Кроме того, как вы заполняете матрицу "автоматически" (без цикла), она есть декларирована с размером (строки, колонии), с первыми  размерами элементов с индексом = 1.
Код
Sub Obmen_Massivami()
    Dim Peremennaya_Massiva As Variant
    Dim Vsego_Elementov As Long
    
    Vsego_Elementov = 10
    'ReDim Peremennaya_Massiva(1 To Vsego_Elementov)
    ReDim Peremennaya_Massiva(1 To Vsego_Elementov, 1 To 1)
    
    For i = 1 To Vsego_Elementov
        'Peremennaya_Massiva(i) = Cells(i, 1)
        Peremennaya_Massiva(i, 1) = Cells(i, "A")
    Next i
    For i = 1 To Vsego_Elementov
        'Cells(i, 3) = Peremennaya_Massiva(i)
        Cells(i, "C") = Peremennaya_Massiva(i, 1)
    Next i
    
    '[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva
    [E1].Resize(Vsego_Elementov, 1).Value = Peremennaya_Massiva
End Sub
 
ocet p, На самом деле в данном случае достаточно вместо
Код
ReDim Peremennaya_Massiva(1 To Vsego_Elementov, 1 To 1)
записать  
Код
ReDim Peremennaya_Massiva(1 To Vsego_Elementov, 0)
Индекс второй мерности в примере не имеет значения.  ;)
"Все гениальное просто, а все простое гениально!!!"
 
Да, конечно, можно и так, правда, но это не всегда удобно. Во всем этом я имел в виду транспонирование, а не какой-то конкретный размер.
 
Код
ReDim Peremennaya_Massiva(1 To Vsego_Elementov, 1 To 1)
...
...Resize(UBound(Peremennaya_Massiva), UBound(Peremennaya_Massiva,2)...

Зачем такие имена переммых? Загромождается код
 
Цитата
ocet p написал:
Во всем этом я имел в виду транспонирование
Транспонирование не всегда подходит, потому что ограничено по размеру и в итоге можно получить ошибку.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
vikttur написал: Зачем такие имена переммых?
Не знаю, этот вопрос ко мне или к IgorBoot ?

Цитата
Nordheim написал: Транспонирование не всегда подходит ... можно получить ошибку
И поэтому я не очень люблю "эту транспонирование", и редко использую.
 
Цитата
ocet p написал: этот вопрос ко мне или к IgorBoot ?
Вопрос автору )
Страницы: 1
Наверх