Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Probleme mit Pivottabelle
#1
Hallo nochmals

Ich tue mich schwer mit der Erstellung der Pivottabelle. Die Bescheibung von Peter konnte ich zwar nachvollziehen, verstanden habe ich es aber nicht so recht.....

Ich habe die Liste mal mit Namen versehen, die Umsätze ab Originaldatei eingefügt, alles kopiert und die Spalten A bis E wieder mit Werten einkopiert.

Eigentlich wollte ich, dass die Tabelle wie folgt aussehen könnte:

Order ¦ KND-Nr. ¦ Kunde ¦ Umsatz

Ich kann probieren was das Zeug hält, bin heute extra nicht zur Arbeit und blieb zu Hause, aber das Ding bekomme ich einfach nicht hin. Selbst wenn ich versuche, die Parameter anders einzustellen, komme ich nicht auf die gewünschte Ansicht.

Man sieht auch, dass ich einen kläglichen Versuch gemacht habe, die Kundenbezeichnung nachträglich mit einer Formel dazu zu stellen, auch das klappt nicht.

Irgendwie bin ich so leicht am Verzweifeln.......

Ach ja, die zweite Sortierung (die erste ist hier korrekt dirn; Order abwärts) => innerhalb der Anzahl Order die Beträge abwärts, funktioniert auch nicht.

Bitte nochmals um Hilfe

Liebe Grüsse
cuba


Angehängte Dateien
.xlsx   cuba.xlsx (Größe: 150,3 KB / Downloads: 3)
to top
#2
Hallo Cuba,

"Order" wäre in der Beispielmappe "St", richtig?

Du hast alles richtig gemacht. "St" steht im Wertebereich und wird aufsummiert. Die Summierten Werte können nicht im Zeilenbereich stehen. Deshalb wirst Du "St" mit diesen Werten auch nicht als Erste Spalte anzeigen können.
Die Sortierung geht auch nicht anders. Di Pivottabelle ist zwar sehr mächtig, kann aber auch nicht alles.

Mehr als dieses Aussehen geht nicht mit der Pivot:
Arbeitsblatt mit dem Namen 'Tabelle1'
 AGAHAIAJ
3  Werte 
4KND-Nr.KundeSumme von St.Summe von Umsatz
561340Cuba1139990,85
662270Nicole325078
7 Simon20
8 unbestimmt00
962967Su47119,66
1060089Chrigi25400
11 Lara10
1260118Fritz3165
1362710unbestimmt00
14 Urs31100,55
1562751Dani3821
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Wenn Du es anders darstellen möchtest, dann wäre wahrscheinlich der Einsat von VBA die bessere Wahl für für Dich.
Gruß Atilla
to top
#3
Hallo Attila

Ja, Order sind St.

Hmmm..... ich bin absolut kein VBA-Kenner, ich wende es nur an.

Wie würde dann eine VBA-Lösung aussehen?

LG
cuba
to top
#4
Hallo Cuba,

im Moment habe ich dafür keine Zeit, veilleich heute Abend, falls kein anderer bis dahin eine Lösung gepostet hat.
Gruß Atilla
to top
#5
OK Atilla

Das wäre sehr nett

LG

cuba
to top
#6
Hallo Cuba,

dann teste mal unten stehenden Code in einer Kopie Deiner Datei:

Code:
Option Explicit

Sub zusammenfassen()
   Dim i As Long
   Dim lngLetzte As Long
   Dim vntA
   Dim feld
   Dim objDic1
   Set objDic1 = CreateObject("Scripting.Dictionary")
  
   'Überschriften
   vntA = Array("Order", "KND-Nr.", "Kunde", "Umsatz")
  
   Application.ScreenUpdating = False                   'Bildschirmaktualisierung aus
  
   With Worksheets("Tabelle1")
      .Columns("AC:AF").ClearContents                    'Inhalte der Spalten "AC:AF" löschen
      .Range("AC3:AF3") = vntA                           'Überschriften in den Bereich "AC3:AF3" eintragen
      lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row   'letzte belegte Zeile in Spalte A
      feld = .Range("A4:E" & lngLetzte)                  'Bereich AC3 bis AF bis zur letzten belgeten in ein Variant Array schreiben
      For i = LBound(feld) To UBound(feld)               'Alle Array Zeilen durchlaufen
         If feld(i, 1) <> 0 Then                         'wenn Zelle in Spalte nicht 0 dann einlesen
            objDic1(feld(i, 1)) = objDic1(feld(i, 1)) + feld(i, 4)   'Unicate in Dictionary einlesen und die Spalte D aufaddieren
         End If
      Next i
      
      'Daten in die entsprechenden Saplten schreiben
      .Range("AD4:AD" & objDic1.Count) = WorksheetFunction.Transpose(objDic1.keys)  'Unicate in Spalte AD
      .Range("AC4:AC" & objDic1.Count) = WorksheetFunction.Transpose(objDic1.items) 'Summen von "St" in Spalte AC
      .Range("AE4:AE" & objDic1.Count).FormulaLocal = "=SVERWEIS(AD4;$A$4:$B$" & lngLetzte & ";2;0)"  'In Spalte AE SVERWEIS() Formel zur Ermittlung der Kundennamen
      .Range("AF4:AF" & objDic1.Count).FormulaLocal = "=SUMMEWENN($A$4:$A$" & lngLetzte & ";AD4;$E$4:$E$" & lngLetzte & ")"   ''In Spalte AE SUMMEWENN()() Formel zur Ermittlung der Kundennamen
      .Range("AE4:AE" & objDic1.Count).Value = .Range("AE4:AE" & objDic1.Count).Value  'Formeln mit ihren Werten überschreiben
      .Range("AF4:AF" & objDic1.Count).Value = .Range("AF4:AF" & objDic1.Count).Value  ''Formeln mit ihren Werten überschreiben
      
      'erst nach Spalte AC dann nach Spalte AF absteigend sortieren
       .Range("AC3:AF" & objDic1.Count).Sort Key1:=.Range("AC4"), Order1:=xlDescending, Key2:=.Range("AF4"), Order2:=xlDescending, Header:=xlYes, _
           OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
           DataOption1:=xlSortNormal
  
   End With
  
   Application.ScreenUpdating = True   'Bildschirmaktualisierung ein

End Sub
Gruß Atilla
to top
#7
Hallo Atilla

Wow!

Wo soll ich den Code eingeben? in der Arbeitsmappe oder in der Tabelle? oben habe ich dann Allgemein drin. Muss ich da auf Worksheet wechseln?

Excel macht zwar bei beiden Varianten keinen Mucks..... Datei ist dann mit Makro gesichert.

LG

cuba


Angehängte Dateien
.xlsx   cuba.xlsx (Größe: 33,94 KB / Downloads: 2)
to top
#8
Hallo Cuba,

den Code in ein allgemeines Modul einfügen und einer Schaltfläche zuweisen.

Wie das geht, schau hier: Makro einer Schaltfläche zuweisen

Der Code kann automatisch beim aktivieren der Tabelle,in der die Ergebnisse aufgelistet werden sollen, starten.

Dazu Rechtsklick auf den Tabellenreiter und Code anzeigen wählen.
Im Codefenster rechts dann folgenden Code noch einfügen:

Code:
Private Sub Worksheet_Activate()
   Call zusammenfassen
End Sub

Die Datei muss als .xlsm gespeichert werden und bei aktivierten Makros geöffnet sein.
Gruß Atilla
to top
#9
Hallo,

der Code muss in ein allgemeines Modul und kann dann mit Alt-F8 aufgerufen werden:

- Öffne mit Alt+F11 den VBA-Editor
- mit Strg+R den Projekt-Explorer öffnen und aktivieren
- die gewünschte Datei per Doppelklick markieren
- Tastenkombination Alt+E und dann M drücken
- in der rechten Fensterhälfte ist jetzt ein leeres Modul eingefügt worden
- in dieses Modul muss der Code eingefügt werden
- im Projektexplorer wird das Modul unter der Datei angezeigt
- speichen und den VBA-Editor mit Alt+F4 schliessen
- das Makro bzw. die Funktion steht dir jetzt in dieser Datei zur Verfügung und kann mit Alt-F8 aufgerufen werden
Gruß
Peter
to top
#10
Hi Atilla

Sei bitte so gut und stell doch die Datei ins Forum, so kann ich "spicken", sonst ist mir das zu hoch!

LG
cuba
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste