Помогите пожалуйста с написанием макроса. Необходимо решить это именно с макросом, так как необходимо обработать большой массив данных.
На первом листе отражено как нужно. На остальных - пример данных. Нужно чтобы создавалась таблица по нажатию "Кнопки" создавалась новая книга.
Нужно чтобы данные собирались циклом из столбцов в строки и наоборот. Чтобы данные столбца исходной таблицы (A1:A6) были в шапке таблицы строкой A1:F1 (в каждом листе). А сами данные на каждом листе (по годам) в столбце были в строке. Т.е. Данные столбца B2:B6 в B2:F2.
Написал пример кода. Но все не то.
Пожалуйста, помогите разобраться. Спасибо
Нигде не нашел подобного примера. Очень нужно.
Добрый день!
Помогите пожалуйста с написанием макроса. Необходимо решить это именно с макросом, так как необходимо обработать большой массив данных.
На первом листе отражено как нужно. На остальных - пример данных. Нужно чтобы создавалась таблица по нажатию "Кнопки" создавалась новая книга.
Нужно чтобы данные собирались циклом из столбцов в строки и наоборот. Чтобы данные столбца исходной таблицы (A1:A6) были в шапке таблицы строкой A1:F1 (в каждом листе). А сами данные на каждом листе (по годам) в столбце были в строке. Т.е. Данные столбца B2:B6 в B2:F2.
Написал пример кода. Но все не то.
Пожалуйста, помогите разобраться. Спасибо
Нигде не нашел подобного примера. Очень нужно.DAN123
Sub CopyAndTransposeTable() Dim sh As Worksheet Dim myArr(), LastRow& For Each sh In ThisWorkbook.Sheets If sh.Name <> ActiveSheet.Name Then myArr = sh.UsedRange.Offset(, 1).Resize(, sh.UsedRange.Columns.Count - 1) myArr = TransposeArray(myArr) With ActiveSheet LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1 .Cells(LastRow, 2).Resize(UBound(myArr, 1), UBound(myArr, 2)) = myArr .Cells(LastRow, 1).Resize(UBound(myArr, 1)) = sh.Name End With End If Next sh End Sub
Function TransposeArray(ByRef SourceArray() As Variant) As Variant Dim X1&: X1 = LBound(SourceArray, 1) Dim X2&: X2 = UBound(SourceArray, 1) Dim Y1&: Y1 = LBound(SourceArray, 2) Dim Y2&: Y2 = UBound(SourceArray, 2) Dim TempArray As Variant, i&, j& ReDim TempArray(Y1 To Y2, X1 To X2) For i = X1 To X2 For j = Y1 To Y2 TempArray(j, i) = SourceArray(i, j) Next j Next i TransposeArray = TempArray End Function
[/vba]
DAN123, [vba]
Код
Sub CopyAndTransposeTable() Dim sh As Worksheet Dim myArr(), LastRow& For Each sh In ThisWorkbook.Sheets If sh.Name <> ActiveSheet.Name Then myArr = sh.UsedRange.Offset(, 1).Resize(, sh.UsedRange.Columns.Count - 1) myArr = TransposeArray(myArr) With ActiveSheet LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1 .Cells(LastRow, 2).Resize(UBound(myArr, 1), UBound(myArr, 2)) = myArr .Cells(LastRow, 1).Resize(UBound(myArr, 1)) = sh.Name End With End If Next sh End Sub
Function TransposeArray(ByRef SourceArray() As Variant) As Variant Dim X1&: X1 = LBound(SourceArray, 1) Dim X2&: X2 = UBound(SourceArray, 1) Dim Y1&: Y1 = LBound(SourceArray, 2) Dim Y2&: Y2 = UBound(SourceArray, 2) Dim TempArray As Variant, i&, j& ReDim TempArray(Y1 To Y2, X1 To X2) For i = X1 To X2 For j = Y1 To Y2 TempArray(j, i) = SourceArray(i, j) Next j Next i TransposeArray = TempArray End Function