19.09.2017, 21:04 (Dieser Beitrag wurde zuletzt bearbeitet: 19.09.2017, 21:04 von n8lauscher.)
Hallo Liebe Excel-Profis
ich habe zwei Tabellen in einem Blatt zusammengefügt und muss diese auswerten.
Es geht hier um Versandkosten und darum diese entsprechend zu kontrollieren.
Da es mehrere Tausend - Datensätze sind - kann ich diese nicht manuell kontrollieren und möchte dies mit einer Excel-Formel erledigen
Auftrag_einzeilig
in dieser Tabelle stehen pro Auftrag (Auftragsnummer) die berechneten Versandkosten (Versandkosten)
Leider werden vom Spediteur aber nicht die entsprechenden Artikel gelistet, die entsprechend versendet worden sind. Daher fällt zunächst einmal die Kontrolle der berechneten Versandkosten schwierig aus.
Ich müsste jetzt jeden Auftrag einzeln öffnen, gucken wie oft (Menge) welcher Artikel (Produkt) versendet wurde - und diesen dann manuell eintragen.
Ich würde das ganze gerne mit Excel lösen.
Hierfür habe ich aus unserem Auftragsprogramm mir die entsprechenden Datensätze exportiert und diese in die Tabelle Auftrag_detail kopiert.
Auftrag_detail
In dieser Tabelle steht jeweils die Auftragsnummer (Auftragsnummer), die Menge (RowQuantity), die Artikelnummer (ItemNo) und die wenn es sich um eine Variante handelt entsprechende Varianten-Artikelnummer (ItemVariationNo).
Was soll dabei rauskommen:
die Menge und die Artikelnummer soll aus Tabelle Auftrag_detail herausgefiltert und entsprechend in die Tabelle Auftrag_einzeilig kopiert werden.
folgende Bedingung muss beachtet werden:
wenn in Auftrag_detail RowBundleItemID=-1 ist - dann soll als Artikelnnummer in Auftrag_einzeilig - die ItemNo + RowQuantity übertragen werden.
wenn nicht dann soll als Artikelnnummer in Auftrag_einzeilig - die ItemVariationNo + RowQuantity übertragen werden.
Das ganze soll wenn möglich komplett automatisch funktionieren und so sein, dass die Tabelle Auftrag_einzeilig immer wieder mit neuen zu prüfenden Datensätzen befüllt werden kann.
Entsprechend wir sich auch die Tabelle Auftrag_detail erweitern.
ich hoffe Ihr versteht - was mein Ziel ist.
Würde mich freuen, wenn mir einer von den Profis hier helfen könnte!
Sheets("Auftrag detail").Activate
With CreateObject("Scripting.Dictionary")
Ar = Cells(1).CurrentRegion
For i = 2 To UBound(Ar)
If Ar(i, 5) = -1 Then
Tx = Ar(i, 2) & "|" & Ar(i, 3)
Else
Tx = Ar(i, 2) & "|" & Ar(i, 4)
End If
If .exists(Ar(i, 1)) Then
.Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Tx
Else
.Item(Ar(i, 1)) = Tx
End If
Next i
'### Ausgabe
Sheets("Auftrag_einzeilig").Activate
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If .exists(Cells(i, "A").Value) Then
Tx = Split(.Item(Cells(i, "A").Value), "|")
Cells(i, "F").Resize(, UBound(Tx) + 1) = Tx
End If
Next i
Debug.Print .Count
End With
End Sub
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • n8lauscher
Sheets("Auftrag detail").Activate
With CreateObject("Scripting.Dictionary")
Ar = Cells(1).CurrentRegion
For i = 2 To UBound(Ar)
If Ar(i, 5) = -1 Then
Tx = Ar(i, 2) & "|" & Ar(i, 3)
Else
Tx = Ar(i, 2) & "|" & Ar(i, 4)
End If
If .exists(Ar(i, 1)) Then
.Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Tx
Else
.Item(Ar(i, 1)) = Tx
End If
Next i
'### Ausgabe
Sheets("Auftrag_einzeilig").Activate
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If .exists(Cells(i, "A").Value) Then
Tx = Split(.Item(Cells(i, "A").Value), "|")
Cells(i, "F").Resize(, UBound(Tx) + 1) = Tx
End If
Next i
End With
End Sub
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • n8lauscher
22.09.2017, 11:38 (Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2017, 11:38 von n8lauscher.)
@Fennek
Hallo Fennek,
ich habe die Anforderung noch einmal aktualisiert.
Deine erste Lösung war schon recht hilfreich - leider hat sich aber herausgestellt, dass ich doch die Daten ein wenig anders auswerten muss.
Auch sind noch zwei weitere Herausforderungen aufgetreten, Die Auftragsnummern enthalten mitunter auch einen String - welcher nicht mit verarbeitet werden soll.
Auch soll - wenn die Auftragnummer nicht in der Artikelliste gefunden wird - dies dann gemeldet werden.
Habe daher die Exceldatei noch einmal überarbeitet.
24.09.2017, 06:21 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2017, 06:21 von schauan.)
Hallöchen,
hier mal auf Basis der Autofilter-Formel von excelformeln.de ein Formel-Ansatz. Voraussetzung wäre, dass Deine ID immer numerisch ist. Ich habe zuerst die Originallösung angewendet und dann in eine waagerechte geändert. Beachte in der waagerechten die Angaben A1, A2, A3 usw. am Ende der Formel. Im Original passt sich das automatisch beim Runterziehen an, hier habe ich es manuell eingetragen.
hier mal was angepasstes. Da fehlt allerdings noch die Bundle-Sache. Da wäre es sicher einfacher, wenn Du die Liste auch nach den Bundles sortierst und diese ans Ende des Artikels stellst. Ich könnte in der Formel noch eine Prüfung einbauen, allerdings hättest Du dann ein Produkt 1, dann zwei Leere, und dann ein Produkt 4. Bei der vorgeschlagenen Sortierung wäre die "Lücke" nicht der Fall, weil die leeren dann ans Ende kämen.