Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswertung aus Pivot

Auswertung aus Pivot
03.05.2018 08:27:24
Kigi
Hallo zusammen!
Sitze gerade an einer Pivot-Auswertung und habe bisher folgende Pivot-Tabelle:
Userbild
Bei Zeilenbeschriftung in der ersten Spalte ist in gelb immer eine Seriennummer und untergeordnet die Datumsangabe wenn das Teil in die Reparatur kam. Die zweistelligen Bezeichnungen FA usw. sind Fehlercodes. Nun müsste ich aus der Pivot alle Seriennummern filtern in denen zum Beispiel die Fehlercodes CQ und FA aufgetreten sind (rot markiert). Wenn das Datum sogar mit einbezogen werden könnte wäre das super, da beispielsweise zuerst CQ und anschliessend FA vorkommen darf aber umgekehrt nicht.
Mit Formeln ausserhalb der Pivot bekomme ich es ohne Datum hin, jedoch bringt es die ganze Pivot durcheinander wenn ich die Angaben ausserhalb dann filter und da zukünftig mehr Daten hinzu kommen wäre es vollständig in der Pivot integriert vorteilhafter.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
doppelt!...owT
03.05.2018 09:54:27
Sandra.B
AW: so ähnlich
03.05.2018 10:10:27
Phi
@Angela,
bei diesen vielen Möglichkeiten sollte (muss) man/frau zuerst nach dem Datum sortieren, das erspart viele Prüfungen.
Verschachtelte "UND" und "ODER"-Prüfungen sind immer etwas kritisch, der folgende Code muss intenisv geprüft werden (da in der Beispieldatei kein Treffer enthalten ist)

Sub Phi()
'################## nach Eintrittsdatum sortiern #####################
'zum Prüfen DANACH nach Seriennummer sortieren
Ar = Cells(2, 1).CurrentRegion
With CreateObject("Scripting.Dictionary")
'Anlegen
For i = 2 To UBound(Ar)
If Not .exists(Ar(i, 1)) Then
.Item(Ar(i, 1)) = Ar(i, 2)
Else
.Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Ar(i, 2)
End If
'Debug.Print Ar(i, 1), .Item(Ar(i, 1))
Next i
'Auswerten
For Each k In .keys
Tr = Split(.Item(k), "|")
If UBound(Tr)  "FA" And Tr(0)  "SG" Then .Remove k: GoTo Nx
If Tr(0) = "SG" Then
If Tr(1)  "SG" And Tr(2)  "SG" Then .Remove k: GoTo Nx
End If
If Tr(0) = "FA" Then
If Tr(1)  "QC" Or Tr(2)  "QC" Or Tr(1)  "SG" Or Tr(2)  "SG" Then .Remove k
End If
Nx:
Next k
For Each k In .keys
r = r + 1
Cells(r, "AA") = k
Cells(r, "AB") = .Item(k)
Next k
End With
End Sub
(Firmen, die mit etwas Tamtam ihre Täschchen überteuert verkaufen, sollten nicht an einem VBA-Dienstleister sparen)
Anzeige
AW: so ähnlich
03.05.2018 10:13:15
Kigi
@Phi,
vielen Dank ich werde es testen!
AW: so ähnlich
03.05.2018 13:15:19
Kigi
@Phi
direkt mit der Pivot lässt es sich nicht machen oder?
Danke und viele Grüsse
AW: im Prinzip schon, aber...
03.05.2018 13:40:12
Phi
der Aufwand dürfte größer sein:
- die Reihenfolge der Datum (pl) muss geprüft werden
- die Reihenfolge der Codes muss geprüft werden
Falls es immer nur wenige Zeilen gibt, mag es gehen.
AW: im Prinzip schon, aber...
03.05.2018 13:58:07
Kigi
@Phi
dann muss ich nochmal schauen ob ich die Urpsrungsdatei nehme, da sind die Seriennummern allerdings noch doppelt vorhanden und nicht so schön gelistet wie in der Pivot.
Danke für deine Hilfe!
AW: Verbessert
03.05.2018 11:54:35
Phi
@Angela,
in diesen Fällen ist die Prüfung positiv:
FA QC xxx|leer
FA xxx QC
FA SG xxx|leer
FA xxx SG
SG SG SG
Folgender Code ist einfacher zu überblicken bzw zu warten:
(die Tabelle muss nach Datum sortiert sein)

Sub Phi()
'################## nach Eintrittsdatum sortiern #####################
'zum Prüfen DANACH nach Seriennummer sortieren
Ar = Cells(2, 1).CurrentRegion
With CreateObject("Scripting.Dictionary")
'Anlegen
For i = 2 To UBound(Ar)
If Not .exists(Ar(i, 1)) Then
.Item(Ar(i, 1)) = Ar(i, 2)
Else
.Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Ar(i, 2)
End If
'Debug.Print Ar(i, 1), .Item(Ar(i, 1))
Next i
'Auswerten
For Each k In .keys
If InStr(1, .Item(k), "|") > 0 Then
Tr = Split(.Item(k), "|")
Select Case Tr(0)
Case "FA"
If UBound(Tr) = 1 And Not (Tr(1) = "QC" Or Tr(1) = "SG") Then .Remove k
If UBound(Tr) > 1 Then
If Not ((Tr(1) = "QC" Or Tr(2) = "QC") Or (Tr(1) = "SG" Or Tr(2) = "SG"))  _
Then .Remove k
End If
Case "SG"
If UBound(Tr)  "SG" Or Tr(2)  "SG" Then .Remove k
End If
Case Else
.Remove k
End Select
Else
.Remove k
End If
Next k
For Each k In .keys
r = r + 1
Cells(r, "AA") = k
Cells(r, "AB") = .Item(k)
Next k
End With
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige