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
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' |
| AG | AH | AI | AJ |
3 | | | Werte | |
4 | KND-Nr. | Kunde | Summe von St. | Summe von Umsatz |
5 | 61340 | Cuba | 11 | 39990,85 |
6 | 62270 | Nicole | 3 | 25078 |
7 | | Simon | 2 | 0 |
8 | | unbestimmt | 0 | 0 |
9 | 62967 | Su | 4 | 7119,66 |
10 | 60089 | Chrigi | 2 | 5400 |
11 | | Lara | 1 | 0 |
12 | 60118 | Fritz | 3 | 165 |
13 | 62710 | unbestimmt | 0 | 0 |
14 | | Urs | 3 | 1100,55 |
15 | 62751 | Dani | 3 | 821 |
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.
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
Hallo Cuba,
im Moment habe ich dafür keine Zeit, veilleich heute Abend, falls kein anderer bis dahin eine Lösung gepostet hat.
OK Atilla
Das wäre sehr nett
LG
cuba
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
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
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.
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
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