Подскажите, как из массива вставить в диапазон все значения разом, без циклического заполнения ячеек?
Код
Private Sub CommandButton1_Click()
Dim a(1 To 20) As Integer, i&
Range("A:A").ClearContents
For i = 1 To 20
a(i) = Int(Rnd() * 21)
Cells(i, 1).Value = a(i)
Next i
End Sub
Private Sub CommandButton1_Click()
Dim a(1 To 20, 1 To 1), i&
Range("A:A").ClearContents
For i = 1 To 20
a(i, 1) = Int(Rnd() * 21)
Next
Range("A1").Resize(20, 1).Value = a
End Sub
Private Sub CommandButton1_Click()
Dim a(1 To 20) As Integer, i&
Range("A:A").ClearContents
For i = 1 To 20
a(i) = Int(Rnd() * 21)
Next i
[a1:a20] = WorksheetFunction.Transpose(a) 'вывод массива А в Диапазон А1:А20 без цикла
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
- у этого метода есть куча недостатков. Поэтому рекомендую в первом коде заполнять сразу двумерный массив, чтоб потом его выгрузить на лист без всяких транспонирований как в примере Юрия.
Hugo, полностью согласен. Зачем вообще транспонировать, если в том же цикле можно формировать СРАЗУ ДВУМЕРНЫЙ массив a(n строк, 1 столбец)…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Для интереса проверил скорость выполнения макросов: циклом, выгрузкой из двумерного массива и транспонированием, все работают в диапазоне [b1:b1000] и вот что получилось: 1. Двумерный массив отстает.
2. Скорость выполнения одинаковая.
3. Двумерный опять отстает.
4. Двумерный опережает транспонирование.
5. Двумерный опять опережает транспонирование.
6. Сравнялись.
Почему такие разбросы по скорости? Цикл стабильно медленно работает, а при транспонировании и выгрузки из двумерного массива скорости всегда разные и опережают друг друга.
p.s. замерялась скорость выполнения по отношению к циклическому заполнению диапазона.
НСС, ну раз вы тестить взялись то давайте рассказывайте: • как вы обеспечивали "равные условия"? При разнице в сотые доли секунды, такие тесты, как пук в воздух (из-за обычных колебаний производительности). Возьмите массив 10000 строк и 10 столбцов хотя бы. Или просто 100 000 строк и 1 столбец • сравните с самописными функциями транспонирования, которые не имеют серьёзных ограничений штатной (спойлер - у меня на массиве 2 000 000 строк х 3 столбца отработала за 1,5 сек БЕЗ ВЫГРУЗКИ) • при разнице в сотни раз (с заполнением циклом) какой смысл сравнивать? Оставьте 2х кандидатов для более точного сравнения • ну и конечно приложите тестовый стенд с кодами под спойлером, чтобы остальные могли перепроверить ваши данные
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄