Я должен обратить ряды диапазона.Код, который я написал, восстанавливает диапазон 1000 строк x 1000 столбцов за 2 минуты, 18 секунд, 587 мс.Может ли кто-нибудь предоставить более быстрый код?
Среднее время 1000 строк x 1000 столбцов: 2 минуты, 18 с, 587 мс
(Intel i7-6700 4 ГГц, 32 ГБ ОЗУ) (Windows 10Домашняя x64) (Excel Office 365 MSO (16.0.11328.20144) 32 бита)
Мне не нужно отключать вычисления, ячейки не имеют формул.Код GMalc короткий и очень быстрый: 8 с, 23 мс, но предложение @Rory быстрее, как сказал Рон: 1 с, 195 мс !!!Спасибо
Sub InvertRangeRows(ByRef rngRange_IO As Range)
Dim RowI&, RowRange&, RowArray&, RowFirst As Long
Dim RowLast&, ColumnFirst&, ColumnLast As Long
Dim ArrayRange As Variant, ArrayInverted As Variant
Dim RowCurrent As Variant
Application.ScreenUpdating = False
ArrayRange = rngRange_IO
ReDim ArrayInverted(1 To UBound(ArrayRange))
For RowI = UBound(ArrayRange) To LBound(ArrayRange) Step -1
RowCurrent = Application.WorksheetFunction.Index(ArrayRange, RowI, 0)
RowRange = RowRange + 1
ArrayInverted(RowRange) = RowCurrent
Next RowI
With rngRange_IO
RowFirst = .Row
RowLast = RowFirst + UBound(ArrayRange) - 1
ColumnFirst = .Column
ColumnLast = ColumnFirst + UBound(ArrayRange, 2) - 1
End With
With rngRange_IO.Worksheet
For RowI = RowFirst To RowLast
RowArray = RowArray + 1
.Range(.Cells(RowI, ColumnFirst), .Cells(RowI, ColumnLast)) _
= ArrayInverted(RowArray)
Next RowI
End With
Application.ScreenUpdating = False
End Sub