Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivot Tabelle 12 Monate in Zeilen drehen

Pivot Tabelle 12 Monate in Zeilen drehen
16.04.2014 18:13:22
lutz
Hallo Excel-Spezialisten,
ich habe ein Problem mit einer Pivot-Tabelle und könnte etwas Hilfe gebrauchen.
Meine Tabelle hat 12 Monate in 12 Spalten und 4 vorangestellte Werte (Fabrik, Währung, Warengruppe, Hierarchie) d.h. ab Spalte E-P habe ich dann meine 12 Monate.
Nun brauche ich für einen Upload aber die 12 Monate in 12 Zeilen.
Also müßte ich die Pivottabelle eigentlich Zeilenweise transponieren und die Ausdrücke in Spalte A-D immer wieder wiederholen.
Hat jemand eine Idee wie man das machen kann (Makro geht auch)
Wenn ich einen Doppelklicj auf die Pivot mache, habe ich wieder meine Monatsspalten...
Auch die Gesamte Pivottabelle zu Transponieren sieht nicht gut aus und selbst wenn ich nur die Werte nehme auch nicht.
Kann jemand helfen?
Vielen Dank und vuiele Grüße Lutz

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot Tabelle 12 Monate in Zeilen drehen
17.04.2014 07:40:43
Philipp
Hallo Lutz,
ich hab da eine Formel für einen anderen User gebastelt.
Schau's dir mal an.
https://www.herber.de/bbs/user/90215.xls
Ohne explizites Beispiel ist es schwierig es genauer zu machen.
Gruß
Philipp

AW: Pivot Tabelle 12 Monate in Zeilen drehen
17.04.2014 08:37:44
Lutz
Hallo Philipp,
vielen Dank, ich hatte auch schon an so etwas in der Art gedacht und teste das nachher mal aus.
Vielen Danbk und schöne Ostertage
Lutz

AW: Pivot Tabelle 12 Monate in Zeilen drehen
17.04.2014 08:13:31
fcs
Hallo Lutz,
mir ist noch nicht 100% klar, wie die Daten am Ende aussehen sollen.
Probiere mal folgendes:
Ziehe mal die 12 Monats Felder in den Datenbereich des Pivot-Tabellenberichts.
Falls das Wertefeld im Spaltenbereich plaziert wird, dann ziehe es in den Zeilenbereich.
Falls die Optik dann immer noch nicht passt, dann müssen die Ausgangsdaten in eine für Pivotauswertungen besser geeignete Form gebracht werden. Das kann man dann per Makro machen.
Gruß
Franz
Sub Daten_Umgruppieren()
' Daten_Umgruppieren für Pivot-Auswertung
Dim wks As Worksheet, ZeileTitel As Long, Zeile As Long
Dim Spalte As Long, SpalteMonat As Long, SpalteWerte As Long
Dim Zeile1 As Long, Zeile2 As Long, rngA_D As Range
ZeileTitel = 1      'ggf. anpassen!
SpalteMonat = 17    'Zielspalte für Monatsnamen
SpalteWerte = 18    'Zielspalte für Werte zu Monaten
Set wks = ActiveSheet
'Blatt mit Ausgangsdaten kopieren
wks.Copy after:=wks
Set wks = ActiveSheet
wks.Name = "PivotData"
Application.ScreenUpdating = False
With wks
Zeile1 = ZeileTitel + 1
Zeile2 = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngA_D = .Range(.Cells(Zeile1, 1), .Cells(Zeile2, 4))
.Cells(ZeileTitel, SpalteMonat).Value = "Monat"
.Cells(ZeileTitel, SpalteWerte).Value = "Wert"
For Spalte = 5 To 16 'Spalten E bis P mit Werten zu den Monaten
'Zielzeile für Daten zu Monat
Zeile = Zeile1 + (Spalte - 5) * rngA_D.Rows.Count
'Datenblock in Spalten A bis D kopieren
rngA_D.Copy Destination:=.Cells(Zeile, 1)
'Werte zum Monat verschieben in neue Wertespalte
.Range(.Cells(Zeile1, Spalte), .Cells(Zeile2, Spalte)).Cut _
Destination:=.Cells(Zeile, SpalteWerte)
'Monatsname in Titelzeile kopieren in neue Monatsspalte
.Cells(ZeileTitel, Spalte).Copy _
Destination:=.Range(.Cells(Zeile, SpalteMonat), _
.Cells(Zeile + rngA_D.Rows.Count - 1, SpalteMonat))
Next
.Range(.Columns(SpalteMonat), .Columns(SpalteWerte)).EntireColumn.AutoFit
'alte Monatsspalten löschen
.Range(.Columns(5), .Columns(16)).Delete shift:=xlShiftToLeft
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Pivot Tabelle 12 Monate in Zeilen drehen
17.04.2014 08:47:54
Lutz
Hallo Franz,
vielen Dank. ich teste das nachher im Büro und melde mich dann.
Ich hatte gestern noch 2 Codes gefunden die zumindest im Prinzip funktionieren:
Sub tttt()
Dim vntArr, oDaten, i As Long, j As Long
Dim sKey As String, arrDaten(), arrKeys, arrItems
Set oDaten = CreateObject("Scripting.Dictionary")
vntArr = Cells(1, 1).CurrentRegion
For i = 2 To UBound(vntArr)
For j = 3 To UBound(vntArr, 2) - 1
If vntArr(i, j) > 0 Then
sKey = vntArr(i, 1) & "|" & vntArr(i, 2) & "|" & vntArr(1, j)
If Not oDaten.exists(sKey) Then oDaten.Add sKey, vntArr(i, j)
End If
Next
Next
arrKeys = oDaten.Keys
arrItems = oDaten.items
ReDim arrDaten(1 To oDaten.Count + 1, 1 To 4)
arrDaten(1, 1) = "Artikel"
arrDaten(1, 2) = "Bezeichnung"
arrDaten(1, 3) = "Baugruppe"
arrDaten(1, 4) = "Menge"
For i = 0 To UBound(arrKeys)
arrDaten(i + 2, 1) = Split(arrKeys(i), "|")(0)
arrDaten(i + 2, 2) = Split(arrKeys(i), "|")(1)
arrDaten(i + 2, 3) = Split(arrKeys(i), "|")(2)
arrDaten(i + 2, 4) = arrItems(i)
Next
With Worksheets.Add
.Cells(1, 1).Resize(UBound(arrDaten), 4) = arrDaten
End With
End Sub

Sub xxx()
Dim Zeilen As Long
Dim Spalten As Long
Dim neueZeile As Long
neueZeile = 1
For Zeilen = 2 To 4
For Spalten = 2 To 4
Sheets(2).Cells(neueZeile, 1) = Cells(Zeilen, 1)
Sheets(2).Cells(neueZeile, 2) = Cells(1, Spalten)
Sheets(2).Cells(neueZeile, 3) = Cells(Zeilen, Spalten)
neueZeile = neueZeile + 1
Next Spalten
Next Zeilen
End Sub

Der erste ist vielleicht etwas allgemeiner aber den 2ten kann ich etwas besser verstehen.
Ich habe jetzt mal eine Beispieldatei hochgeladen - siehe hier: https://www.herber.de/bbs/user/90223.xlsm
Ich habe Deinen Code mit meinem Beispiel getestet und er klappt (er sortiert das nur anders aber wenn ich nach a in Spalte A filtere kommt das richtige raus - vielen Dank. Dein Code scheint wirklich perfekt zu sein - ich muß mal sehen, ob ich das verstehe und bei Gelegenheit anpassen kann.
Vielen Dank und viele Grüße
Lutz

Anzeige
AW: Pivot Tabelle 12 Monate in Zeilen drehen
19.04.2014 08:19:27
fcs
Hallo Werner,
du musst in meinem Makro noch eine Anweisung zum Sortieren einfügen, um die Daten in die gewünschte Reihenfolge zu bringen.
Gruß
Franz
Sub Daten_Umgruppieren()
' Daten_Umgruppieren für Pivot-Auswertung
Dim wks As Worksheet, ZeileTitel As Long, Zeile As Long
Dim Spalte As Long, SpalteMonat As Long, SpalteWerte As Long
Dim Zeile1 As Long, Zeile2 As Long, rngA_D As Range
ZeileTitel = 1      'ggf. anpassen!
SpalteMonat = 17    'Zielspalte für Monatsnamen
SpalteWerte = 18    'Zielspalte für Werte zu Monaten
Set wks = ActiveSheet
'Blatt mit Ausgangsdaten kopieren
wks.Copy After:=wks
Set wks = ActiveSheet
wks.Name = "PivotData"
Application.ScreenUpdating = False
With wks
Zeile1 = ZeileTitel + 1
Zeile2 = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngA_D = .Range(.Cells(Zeile1, 1), .Cells(Zeile2, 4))
.Cells(ZeileTitel, SpalteMonat).Value = "Monat"
.Cells(ZeileTitel, SpalteWerte).Value = "Wert"
For Spalte = 5 To 16 'Spalten E bis P mit Werten zu den Monaten
'Zielzeile für Daten zu Monat
Zeile = Zeile1 + (Spalte - 5) * rngA_D.Rows.Count
'Datenblock in Spalten A bis D kopieren
rngA_D.Copy Destination:=.Cells(Zeile, 1)
'Werte zum Monat verschieben in neue Wertespalte
.Range(.Cells(Zeile1, Spalte), .Cells(Zeile2, Spalte)).Cut _
Destination:=.Cells(Zeile, SpalteWerte)
'Monatsname in Titelzeile kopieren in neue Monatsspalte
.Cells(ZeileTitel, Spalte).Copy _
Destination:=.Range(.Cells(Zeile, SpalteMonat), _
.Cells(Zeile + rngA_D.Rows.Count - 1, SpalteMonat))
Next
.Range(.Columns(SpalteMonat), .Columns(SpalteWerte)).EntireColumn.AutoFit
'alte Monatsspalten löschen
.Range(.Columns(5), .Columns(16)).Delete shift:=xlShiftToLeft
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
.Cells(ZeileTitel, 1), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add Key:= _
.Cells(ZeileTitel, 2), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add Key:= _
.Cells(ZeileTitel, 3), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add Key:= _
.Cells(ZeileTitel, 4), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add Key:= _
.Cells(ZeileTitel, 5), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez", _
DataOption:=xlSortNormal
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.SetRange wks.Range(wks.Cells(ZeileTitel, 1), wks.Cells(Zeile + rngA_D.Rows.Count - 1, _
6))
.Apply
End With
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Pivot Tabelle 12 Monate in Zeilen drehen
25.04.2014 20:28:37
Lutz
Hallo Franz,
sorry ich war im Urlaub.
Vielen Dank - läuft perfekt.
Viele Grüße Lutz

348 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige