Друзья, помогите, пожалуйста! Перекопал интернет в поисках макроса для преобразования таблиц в плоские, но для решения такой задачи не нашел варианта. Есть таблица, в ней в шапке из числовых показателей - количество, сумма, цены и другие. Как сделать, чтобы шапка один раз сохранилась, а месяцы ушли вниз в столбцы?
Друзья, помогите, пожалуйста! Перекопал интернет в поисках макроса для преобразования таблиц в плоские, но для решения такой задачи не нашел варианта. Есть таблица, в ней в шапке из числовых показателей - количество, сумма, цены и другие. Как сделать, чтобы шапка один раз сохранилась, а месяцы ушли вниз в столбцы?SHLANG
Sub ertert() Dim x, y(), i&, j&, k&, n&, s$ x = Sheets("Sheet1").Range("A3").CurrentRegion.Value ReDim y(1 To UBound(x, 1) * UBound(x, 2), 1 To 11): k = 4 With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 4 To UBound(x) For j = 3 To UBound(x, 2) s = x(i, 1) & "~" & x(i, 2) & "~" & x(2, j) & "~" & x(1, j) If .Exists(s) Then n = .Item(s) Else n = n + 1: .Item(s) = n y(n, 1) = x(i, 1): y(n, 2) = x(i, 2) y(n, 3) = x(2, j): y(n, 4) = x(1, j) End If If .Exists(x(3, j)) Then k = .Item(x(3, j)) Else k = k + 1: .Item(x(3, j)) = k End If y(n, k) = x(i, j) Next j Next i End With With Sheets("Sheet2") .Range("A2:K" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents With .Range("A2").Resize(n, 11) .Value = y() .Sort Key1:=.Cells(1, 3), Order1:=xlAscending End With .Activate End With End Sub
[/vba]
Привет, SHLANG попробуйте вот это вот: [vba]
Код
Sub ertert() Dim x, y(), i&, j&, k&, n&, s$ x = Sheets("Sheet1").Range("A3").CurrentRegion.Value ReDim y(1 To UBound(x, 1) * UBound(x, 2), 1 To 11): k = 4 With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 4 To UBound(x) For j = 3 To UBound(x, 2) s = x(i, 1) & "~" & x(i, 2) & "~" & x(2, j) & "~" & x(1, j) If .Exists(s) Then n = .Item(s) Else n = n + 1: .Item(s) = n y(n, 1) = x(i, 1): y(n, 2) = x(i, 2) y(n, 3) = x(2, j): y(n, 4) = x(1, j) End If If .Exists(x(3, j)) Then k = .Item(x(3, j)) Else k = k + 1: .Item(x(3, j)) = k End If y(n, k) = x(i, j) Next j Next i End With With Sheets("Sheet2") .Range("A2:K" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents With .Range("A2").Resize(n, 11) .Value = y() .Sort Key1:=.Cells(1, 3), Order1:=xlAscending End With .Activate End With End Sub