Когда дело доходит до скорости:
Медленный доступ к данным Excel в VBA, вставка строки (или столбца) безумно медленная, в то время как все, что делается в памяти (переменные VBA), настолько быстро, что вы почти не можете измерить ее.
Поэтому я предлагаю прочитать все данные из вашего рабочего листа в память, «умножить» там строки и записать все обратно сразу.
Следующий пример кода считывает данные в2-мерный массив и скопируйте его во 2-й массив, который в 4 раза больше.Этот 2-й массив записывается обратно на лист.Я протестировал его с 1000 строк и время выполнения было 0 с.
Недостаток: возможно, вам придется позаботиться о форматировании
With ActiveSheet
Dim lastRow As Long, lastCol As Long
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
lastRow = .Cells(.Rows.Count, 1).End(xlUp).row
Dim origData, copyData
origData = .Range(.Cells(1, 1), .Cells(lastRow, lastCol)) ' Read data from sheet
ReDim copyData(1 To lastRow * 4, 1 To lastCol) ' new array is 4 times the size
Dim r As Long, c As Long, i As Long
For r = 1 To lastRow ' All rows in orig data
For c = 1 To lastCol ' All columns in orig data
For i = 1 To 4 ' Copy everything 4 times
copyData((r - 1) * 4 + i, c) = origData(r, c)
Next i
Next c
Next r
.Range(.Cells(1, 1), .Cells(lastRow * 4, lastCol)) = copyData ' Write back to sheet
End With