ich habe in einem Excel-Arbeitsblatt drei Listen mit Kennwerten. In den drei Listen gibt es Übereinstimmungen von Zahlenfolgen. Alle Werte mit Übereinstimmung sollen dann gemeinsam in eine neue Liste geschrieben werden.
Ich durchlaufe also mit einer Schleife eine Liste Schritt für Schritt.
Es soll also bei jedem Wert nach Übereinstimmungen gesucht werden, bis die Liste abgearbeitet ist.
Ein Kennwert in der dritten Liste sieht z.B so aus: 20140226_U2057
in der zweiten Liste steht dann z.B. : 20140226_U1057
Die beiden letzten Zahlen (also jeweils 57) und die Datumskennung (also jeweils 20140226)
stimmen überein. D.h. diese beiden Werte sollen zusammen in eine vierte Liste geschrieben werden.
Ich brauche also eine Möglichkeit nach den ersten 8 und den letzten 2 Ziffern in der Kennung zu suchen, diese dann mit den Kennzahlen aus der anderen Liste zu vergleichen und bei Übereinstimmung in eine neue Liste zu schreiben.
wofür ist Deine erste Liste?
Insgesamt erkenne ich Dein Problem nicht. Sind Dir die Befehle Left() und Right() geläufig?
Die Verschachtelung der Schleifen ist ein bisschen kompliziert, aber da muss man durch.
Bei der neuen Liste würde ich evtl. auf select zurückgreifen und keine Schleife verwenden, aber das ist Geschmackssache …
ich will gerne versuchen, dir zu helfen. Da fehlen aber noch etliche Angaben, damit man einen Code schreiben kann:
Soll das Übertragen nach Blatt 4 nur passieren, wenn Übereinstimmungen in allen 3 Blättern vorhanden ist, oder schon bei Übereinstimmung in nur 2 Blättern?
Stehen die übereinstimmmenden Zahlenfolge immer in der selben Zeile in jedem Blatt?
Um wieviel Zeilen ungefähr geht es insgesamt?
Wie heißen die 4 Blätter?
In welchen Spalten stehen die Zahlenfolgen, und in welche Spalte des 4. Blattes sollen die Übereinstimmungen geschrieben werden?
Sollen nur diese übereinstimmenden Zahlefolgen übertragen werden, oder sind in den Zellen rechts und links davon noch weitere Angaben, die auch kopiert werden sollen?
Du siehst, es gibt noch viel zu klären, bevor man einen Code schreiben kann.
Wenn du die Fragen beantwortet hast, ergeben sich daraus bestimmt noch weitere.
Am besten wäre es allerdings, du würdest zusätzlich mal eine Besipielmappe hochladen (z.B. hier: http://www.file-upload.net/) und den Link, den du beim hochladen bekommst, hier posten.
Also fangen wir mal an…
Da fehlten in der Tat noch ein Paar Angaben
Ich wollte nicht gleich eine Beispieldatei hochladen. Die Listen sind alle in einer Tabelle. Es wäre aber auch kein Problem pro Liste ne separate Tabelle anzulegen.
Die erste Liste ganz links zeigt die Rohdaten aus einer Datenbank.
Die folgenden Listen sortieren dann jeweils „Eintrag“, „Umtrag“ und „Austrag“ aus und schreiben sie nach Datum sortiert untereinander. Das hat soweit gut funktioniert.
Jetzt will ich in ner weiterern Liste, diese kann auch gerne in nem neuen Tabellenblatt stehen, den Verlauf der Charge darstellen.
D.h. alle Zeilen mit der gleichen Kennung (also dem Datum am Anfang und den beiden Kennziffern am Ende) müssen nun am besten als „Paket“ untereinander stehen, sodass zu sehen ist, wie der Verlauf war.
Ich hoffe ich konnte hiermit den Sachverhalt ein wenig besser darstellen.
Vielen Dank schon einmal für die schnellen Antworten. Echt klasse!
ich habe mir deine Mappe angeschaut. Was mir noch nicht klar ist:
Maßgeblich ist der Eintrag in Spalte R. Stimmt das?
Mit welcher Spalte beim „Umsetzen“ soll er verglichen werden, AB oder AD?
Und beim „Austragen“ soll Spalte R dann mit AN verglichen werden?
Ich habe schon einiges gecoded. Wenn du mir die Fragen noch beantwortest, bekommst du bald einen Makro zum testen.
so ähnlich hab ich mir das vorgestellt
Eines hab ich noch vergessen. Es sollen die Werte nur in die neue Liste geschrieben werden, wenn ein vollständiger Durchlauf gegeben ist. Also wenn Eintrag, Umsetzen und Austrag mit der entsprechenden Kennung vorhanden sind.
Anfangen mit der Abfrage muss man also bei „Austragen“. Die Spalte AN muss dann mit der Spalte AD in „Umsetzen“ verglichen werden. Gibt es eine Übereinstimmung soll dann AD mit R aus „Eintrag“ verglichen werden. Ist diese Übereinstimmung auch gegeben sollen die jeweiligen Bereiche aus Eintrag, Umsetzen und Austragen untereinander geschrieben werden.
Als Beispiel: in der neuen Liste steht dann in Zeile 2 die Werte aus Spalte M bis W aus Eintragen.
in Zeile 3 die Werte aus Spalte Y-AI aus Umsetzen und in Zeile 4 die Werte aus Spalte AK-AU aus Austragen.
Im Idealfall hat man dann in der neune Liste die Wertepaare der 3 Listen.
bei der Durchsicht deiner Mappe ist mir noch einiges aufgefallen:
Es gibt oft identische Austräge 2x, z.B. in den Zellen AN2 und AN3, oder auch AN6 und AN7. Was soll dann passieren? Sollen dann die identischen Zeilenbündel mehrmals „geschnürt“ werden, oder nur 1x?
Es gibt oft auch identische Umsetzungen, z.B. in AD3 und AD4 oder in AD5 bis AD8. Werden die dann im „Paket“ alle zwischen Eintrag und Austrag geschrieben, oder nur das erste Vorkommen, oder was?
Weiterhin gibt es identische Eintragungen, z.B. in R3 und R4, sowie in R5 und R6. Welcher ist dann der richtige?
Du siehst, du kannst deine Antworten immer noch verbessern. Klär mich auf.
mir ist gestern Abend noch genau dieselbe Problematik aufgefallen.
Das mit den doppelten Eintragungen ist richtig. Wenn doppelte Einträge vorkommen müssen diese auch ins „Paket“ mit aufgenommen werden.
Die werden zur Betrachtung der Vorgänge benötigt.
Es kann dann also sein, dass ein „Paket“ aus z.B. jeweils 2-3 Einträgen, Umsetzungen und Austrägen besteht.
Ich hoffe das macht die Sache nicht unnötig kompliziert…
Ich hoffe das ist jetzt wirklich alles gewesen…sorry für die ständigen Erklärungsversuche
also ist das jetzt so: Es kommen immer alle Ein-, Um- und Austragungen mit gleicher Endnummer und gleichem Datum in ein Paket zusammen, egal wieviele Zeilen das dann sind. Stimmt das so?
Wonach soll sich denn die Reihenfolge der Einträge im Paket richten?
Das wird zwar um etliches komplizierter zu coden, ist aber machbar.
ich habe jetzt mal Code geschrieben. Kopiere ihn in ein Standard-Modul in deiner Mappe und starte dann mal den Makro „paketeSchnüren“.
Option Explicit
Option Base 0
Sub paketeSchnüren()
Dim zeilenA As Variant, zeilenU As Variant, zeilenE As Variant
Dim weg As Variant
Dim zA1 As Long, zA2 As Long, zU As Long, zE As Long, zZ As Long
Dim wegCnt As Long
Dim quelle As Worksheet, ziel As Worksheet
Set quelle = Worksheets("Tabelle1")
' Tabellenblatt für "Pakete"
Set ziel = Worksheets("Tabelle2")
' Alte Liste löschen
ziel.Range("A2:K" & ziel.Cells(ziel.Rows.Count, 1).End(xlUp).Row).ClearContents
zZ = 2
With quelle
ReDim weg(0)
' Alle "Austräge" durchgehen
For zA1 = 2 To .Cells(.Rows.Count, 40).End(xlUp).Row
wegCnt = 1
' Wenn schon ein gleicher "Austtrag" registriert ist, kein neues "Paket" anfangen
While wegCnt 0 And UBound(zeilenU) \> 0 Then
' Alle passenden "Einträge" ins "Paket" kopieren
For zE = 1 To UBound(zeilenE)
.Range("M" & zeilenE(zE) & ":W" & zeilenE(zE)).Copy Destination:=ziel.Range("A" & zZ & ":K" & zZ)
zZ = zZ + 1
Next zE
'Alle passenden "Umträge" ins Paket" kopieren
For zU = 1 To UBound(zeilenU)
.Range("Y" & zeilenU(zU) & ":AI" & zeilenU(zU)).Copy Destination:=ziel.Range("A" & zZ & ":K" & zZ)
zZ = zZ + 1
Next zU
' Alle passenden "Austräge" ins "Paket" kopieren
For zA2 = 1 To UBound(zeilenA)
.Range("AK" & zeilenA(zA2) & ":AU" & zeilenA(zA2)).Copy Destination:=ziel.Range("A" & zZ & ":K" & zZ)
zZ = zZ + 1
Next zA2
' "Paket" abschließen
zZ = zZ + 1
End If
weiter: Next zA1
End With
' "Paket"-Liste anzeigen
ziel.Activate
End Sub
vielen, vielen Dank erst einmal für die Mühen.
Konnte am Wochenende nicht auf meine Arbeitsrechner zugreifen und scheibe deshalb erst jetzt.
Ich probier den Code gleich mal aus und versuche ihn zu verstehen.
Melde mich in Kürze wieder.
…hab den Code gerade eben getestet und die Liste kontrolliert.
Das passt perfekt! Alle Einträge sind vorhanden und die Vorgänge im Code sind für mich auch nachvollziehbar…ich wäre nur nie von alleine draufd gekommen
Tausend Dank!
…hab den Code gerade eben getestet und die Liste
kontrolliert.
Das passt perfekt!
Freut mich!
Alle Einträge sind vorhanden und die
Vorgänge im Code sind für mich auch nachvollziehbar…
Dann bist du aber richtig gut. Wenn ich diesen Code von einem Fremden bekommen hätte, hätte ich ziehmlich lange gebraucht, um alles zu verstehen, zumal das ja nur wirklich dürftig kommentiert ist.