Я создал новую версию в VBA, которая будет делать то, что вы ожидаете.Поток, чтобы узнать, когда система прекращает поиск, основан на содержимом, поэтому, пока столбец слева для годового содержимого будет пустым, система продолжит поиск, но когда найдет значение (например, НАУКА), она прекратит поиск.Эта первая часть является примером того, как вы можете вызвать функцию, чтобы указать исходные и конечные листы, а также значения в целых числах, где можно найти ваш диапазон:
Private Sub TestingCall()
Call SpecialTranspose("Ark2", "Ark1", 1, 5)
End Sub
Private Sub SpecialTranspose(strSRCSheet As String, strDSTSheet As String, lngRow As Long, lngCol As Long)
Dim iRow, iCol As Long
Dim dstRow, dstCol As Long
dstRow = 1
dstCol = 1
iRow = lngRow + 1
While Len(Sheets(strSRCSheet).Cells(iRow, lngCol - 1).Value) = 0
iCol = lngCol
While Len(Sheets(strSRCSheet).Cells(iRow, iCol).Value) > 0
Debug.Print iRow, iCol
Sheets(strDSTSheet).Cells(dstRow, dstCol).Value = Sheets(strSRCSheet).Cells(lngRow, iCol).Value
Sheets(strDSTSheet).Cells(dstRow, dstCol + 1).Value = Sheets(strSRCSheet).Cells(iRow, iCol).Value
dstRow = dstRow + 1
iCol = iCol + 1
Wend
iRow = iRow + 1
Wend
End Sub