Здравствуйте. Требуется модифицировать скрипт (создавался для другого задания - он работает корректно только с 4 строками в сегменте, а сейчас их может быть 12) Если не получится, то создать новый
[vba]
Код
Sub proba() Dim I As Long, J As Long, LastRow As Long, K As Integer LastRow = Cells(Rows.Count, 1).End(xlUp).Row J = 1 For I = 2 To LastRow If Cells(I, 2) <> "" Then J = J + 1: Cells(J, "I") = Format(Cells(I, 2), "*0.00"): K = 0 End If K = K + 1: Cells(J, 4 + K) = Cells(I, 1) Next End Sub
[/vba]
По сути необходимо транспонировать данные столбца B по данным в столбце A Пример файла прилагается.
Спасибо.
Здравствуйте. Требуется модифицировать скрипт (создавался для другого задания - он работает корректно только с 4 строками в сегменте, а сейчас их может быть 12) Если не получится, то создать новый
[vba]
Код
Sub proba() Dim I As Long, J As Long, LastRow As Long, K As Integer LastRow = Cells(Rows.Count, 1).End(xlUp).Row J = 1 For I = 2 To LastRow If Cells(I, 2) <> "" Then J = J + 1: Cells(J, "I") = Format(Cells(I, 2), "*0.00"): K = 0 End If K = K + 1: Cells(J, 4 + K) = Cells(I, 1) Next End Sub
[/vba]
По сути необходимо транспонировать данные столбца B по данным в столбце A Пример файла прилагается.
У меня так получилось, при условии, что область переноса очищена [vba]
Код
Sub ReTable() Dim i As Long Dim iLastRow As Long Dim Col As Integer Dim stroka As Integer iLastRow = Cells(Rows.Count, "B").End(xlUp).Row stroka = 3 For i = 3 To iLastRow Col = 4 Cells(stroka, Col) = Cells(i, "A") Do Col = Col + 1 Cells(stroka, Col) = Cells(i, "B") i = i + 1 Loop While Cells(i, "A") = "" And i < iLastRow + 1 stroka = stroka + 1 i = i - 1 Next End Sub
[/vba]
У меня так получилось, при условии, что область переноса очищена [vba]
Код
Sub ReTable() Dim i As Long Dim iLastRow As Long Dim Col As Integer Dim stroka As Integer iLastRow = Cells(Rows.Count, "B").End(xlUp).Row stroka = 3 For i = 3 To iLastRow Col = 4 Cells(stroka, Col) = Cells(i, "A") Do Col = Col + 1 Cells(stroka, Col) = Cells(i, "B") i = i + 1 Loop While Cells(i, "A") = "" And i < iLastRow + 1 stroka = stroka + 1 i = i - 1 Next End Sub
Sub proba() Dim iCol&, iRow&, LastRow&, i& Dim shOut As Worksheet: Set shOut = ThisWorkbook.ActiveSheet Dim shIn As Worksheet: Set shIn = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
LastRow = shOut.Cells(shOut.Rows.Count, 2).End(xlUp).Row iRow = 2 ' строка с которой начинаем заполнение For i = 3 To LastRow iCol = 1 'колонка с которой начинаем заполнение shIn.Cells(iRow, iCol) = shOut.Cells(i, 1) Do: iCol = iCol + 1 shIn.Cells(iRow, iCol) = shOut.Cells(i, 2) i = i + 1 If i > LastRow Then GoTo ExitSub Loop Until shOut.Cells(i, 1) <> "" i = i - 1 iRow = iRow + 1 Next
ExitSub: shIn.Cells.EntireColumn.AutoFit End Sub
[/vba] шапку добавите сами?
ABkeeper, ну или так [vba]
Код
Sub proba() Dim iCol&, iRow&, LastRow&, i& Dim shOut As Worksheet: Set shOut = ThisWorkbook.ActiveSheet Dim shIn As Worksheet: Set shIn = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
LastRow = shOut.Cells(shOut.Rows.Count, 2).End(xlUp).Row iRow = 2 ' строка с которой начинаем заполнение For i = 3 To LastRow iCol = 1 'колонка с которой начинаем заполнение shIn.Cells(iRow, iCol) = shOut.Cells(i, 1) Do: iCol = iCol + 1 shIn.Cells(iRow, iCol) = shOut.Cells(i, 2) i = i + 1 If i > LastRow Then GoTo ExitSub Loop Until shOut.Cells(i, 1) <> "" i = i - 1 iRow = iRow + 1 Next