Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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)
Antworten 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
Antworten 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
Antworten 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
Antworten Top
#5
OK Atilla

Das wäre sehr nett

LG

cuba
Antworten 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
Antworten 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)
Antworten 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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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