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.
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:
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
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