Это еще один подход, основанный на массивах, который может быть полезен в других ваших общих приложениях.Эта подпрограмма может передавать данные в sheet2
.Однако я прокомментировал использование 2-го листа и использовал только активный лист.Вы можете изменить ссылки согласно вашему требованию.Он работает правильно для меня, и соответствующий файл доступен для вашей ссылки на Dropbox.
Sub FillWS3()
Dim i As Long, j As Long, currentRow As Long
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Dim period As Variant
Dim trperiod As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
' Set references to worksheets
Set ws1 = ThisWorkbook.Worksheets("Worksheet1")
Set ws2 = ThisWorkbook.Worksheets("Worksheet2")
' Determine last row in column A in worksheet1
lastRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
' Determine last column in column A in worksheet1
lastCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column
currentRow = 1
i = 1
Set rng = Application.InputBox("please select range", Type:=8)
period = rng.Value
'period = ws1.Range(Cells(1, 1), Cells(lastRow, lastCol)).Value
trperiod = Application.Transpose(period)
For i = LBound(trperiod, 1) To UBound(trperiod, 1)
For j = LBound(trperiod, 2) To UBound(trperiod, 2)
ws1.Cells(currentRow, 12).Value = trperiod(i, j)
currentRow = currentRow + 1
Next j
Next i
End Sub
Полученные результаты
РЕДАКТИРОВАТЬ: Согласно @PEHХорошее предложение: я удалил метод Transpose
и изменил цикл массива.Отредактировал код следующим образом.
Sub FillWS3()
Dim i As Long, j As Long, currentRow As Long
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Dim period As Variant
Dim trperiod As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
' Set references to worksheets
Set ws1 = ThisWorkbook.Worksheets("Worksheet1")
Set ws2 = ThisWorkbook.Worksheets("Worksheet2")
' Determine last row in column A in worksheet1
lastRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
' Determine last column in column A in worksheet1
lastCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column
currentRow = 1
i = 1
Set rng = Application.InputBox("please select range", Type:=8)
period = rng.Value
'period = ws1.Range(Cells(1, 1), Cells(lastRow, lastCol)).Value
'trperiod = Application.Transpose(period)
For j = LBound(period, 2) To UBound(period, 2)
For i = LBound(period, 1) To UBound(period, 1)
ws1.Cells(currentRow, 12).Value = period(i, j)
currentRow = currentRow + 1
Next i
Next j
End Sub