HERBERS Excel-Forum - das Archiv

Thema: Pivot

Pivot
jürschen81
Hallo zusammen,
ich habe eine Pivottabelle erstellt. kann ich wenn ich auf die Datenklicke und die Daten im Tabellenblatt drin sind, das es dann automatisch nach Spalte K sortiert.

Wäre sowas möglich.

danke
AW: Pivot
Yal
Hallo Jürschen,

komplett automatisiert ist theoretisch möglich, erfordert aber das Anwenden von VBA (Programmiersprache), was ich bei Anfänger nicht empfehlen würde.

Darüber hinaus ist deine Problembeschreibung nicht ausreichend, um eine genauere Antwort zu geben.
Ich gehe davon aus, dass in Spalte K die Summe der Spalten angezeigt wird. Prinzipiel sortiert eine PT (Pivottabelle) nach dem Stammdaten (das Feld, das im Quadrant "Zeilen" verschoben wurde). Du kannst auf die Pivottabelle auf diese Zeilenüberschriften rechtsklicken und "Sortieren", "weitere Sortieroptionen...", "Aufsteigen (A bis Z) Nach.." anwählen und "Summe von xxx" schalten.

VG
Yal
AW: Pivot
jürschen81
Hallo Yal,
ich möchte es sortiert haben, wenn ich auf die Werte klick, kommen ja die Daten in einen neuen Tabellenblatt und dort soll es sortiert werden.
Also nicht direkt in der Pivo

Danke
AW: Pivot
Yal
Hallo Jürschen,

wenn Du auf einer Wert in einem Pivot klickst, öffnet sich eine Detailansicht in ein neues Blatt. Diese Daten werden als Tabelle angezeigt, spricht mit sogenannte Filterschaltfläche. Es ist daher nur noch 2 Klick entfernt, dass Du diese Schaltfläche in Spalte K anklickst und auf-oder absteigend sortierst.

Gegenüber diese minimale Anstrengung würde ich deutlich von einem VBA-Automatisierung abraten.

Nur um deine Neugierigkeit zu stillen, würde den Code so aussehen und müsste in dem Workbook-Codepane abgelegt werden:
Private Sub Workbook_NewSheet(ByVal Sh As Object)

If Sh.ListObjects.Count = 1 Then
With Sh.ListObjects(1).Sort
.SortFields.Clear
.SortFields.Add2 Key:=Sh.ListObjects(1).ListColumns(11), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub


VG
Yal
AW: Pivot
Yal
Habe vergessen: der Code sortiert natürlich aufsteigend. Aber es ist klar erkennbar, was man ändern muss, um absteigend sortieren zu lassen ;-)

VG
Yal
AW: Pivot
jürschen81
Hallo nochmal,

kann man diesen Code so anpassen, damit es auf alle neuen Tabellenblätter anpasst:

Columns("A:N").Select
ActiveSheet.ListObjects("Tabelle2").ShowAutoFilterDropDown = False
Range("Tabelle2[#All]").Select
ActiveWorkbook.Worksheets("Tabelle2").ListObjects("Tabelle2").Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("Tabelle2").ListObjects("Tabelle2").Sort.SortFields. _
Add2 Key:=Range("Tabelle2[Kommidatum]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Tabelle2").ListObjects("Tabelle2").Sort.SortFields. _
Add2 Key:=Range("Tabelle2[MHD]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Tabelle2").ListObjects("Tabelle2").Sort.SortFields. _
Add2 Key:=Range("Tabelle2[Prüfung1]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle2").ListObjects("Tabelle2").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("K4").Select
Columns("I:I").ColumnWidth = 19.14
End Sub

Danke schön :-)
AW: Pivot
Yal
Hallo Jürschen,

Computer brauchen extrem präzise Anweisungen. Entscheidungen können nicht eigenständig betroffen werden (VBA hat noch keine KI). Deine Fragestellung muss auch sehr präzise sein: "alle neue Tabelle" kann nicht funktionieren. Wenn ein Blatt (nicht mit Tabelle verwechseln) erzeugt wird, ist das Blatt, das genau davor erzeugt wurde, nicht mehr neu. Anders gesagt: für ein Computer gibt immer nur ein einziges "neues Blatt".

Um das zu erreichen wird das Ereignis abgefangen, der durch das Erzeugen von einem neues Blatt entsteht: "Workbook_NewSheet". Dieses Ereignis entsteht -wie der Name es zeigt- auf Arbeitsmappe-Ebene ("Workbook"), daher muss der Code in dem Codepane "DieseArbeitsmappe" abgelegt werden.
Der Code ist im wesentlichen sehr ähnlich zum Vorigen:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim LO As ListObject

If Sh.ListObjects.Count = 1 Then
Application.EnableEvents = False
Set LO = Sh.ListObjects(1)
LO.ShowAutoFilterDropDown = False
With LO.Sort
.SortFields.Clear
.SortFields.Add2 Key:=LO.ListColumns("Kommidatum"), Order:=xlAscending
.SortFields.Add2 Key:=LO.ListColumns("MHD"), Order:=xlAscending
.SortFields.Add2 Key:=LO.ListColumns("Prüfung1"), Order:=xlAscending
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("K4").Select
Columns("I:I").ColumnWidth = 19.14
Application.EnableEvents = True
End If
End Sub

Ungetestet, da keine Beispieldatei.

VG
Yal
AW: Pivot
Juerschen81
Cool danke dir für alles.
:)
AW: Pivot
jürschen81
Super :-)

Danke Dir :-)