Вы можете сделать это в диапазоне, я вижу два способа сделать это, используя копирование и вставку или просто реплицируя транспонированную версию данных:
'Copy and paste method
Worksheets("Model").Range("C120:C" & range("C" & rows.count).end(xlup).row).Copy 'Using the .end(xlup) will find the last row of data without looping until blank.
Worksheets("Data").Range("H2").PasteSpecial xlPasteValues,,,True 'The True here is what tells the pastespecial to transpose
'Transpose method
Worksheets("Data").Range("H2:J2").Value = application.transpose(Worksheets("Model").range("C120:C122"))
У каждого есть свои преимущества, Метод копирования и вставки проще, потому что вам не нужно знать конечный столбец, поэтому он легче работает для динамического диапазона c, метод транспонирования не использует буфер обмена, поэтому он меньше влияет на вашу систему.
Лучшим кодом метода был бы метод транспонирования.
Затем вы можете настроить простой For Next
l oop для работы с любым количеством диапазонов данных.
Dim DataRow As Long, MyDat As Worksheet, MyModel As Worksheet
Set MyDat = Worksheets("Data")
Set MyModel = Worksheet("Model")
For DataRow = 2 To MyDat.Range("E" & Rows.Count).End(xlUp).Row
MyModel.Range("B4:D4").Value = MyDat.Range("E" & DataRow & ":G" & DataRow).value
Calculate
MyDat.Range("H" & DataRow & ":J" & DataRow).Value = Application.Transpose(MyModel.Range("C120:C122"))
Next