Zahlenfolge erkennen

Hallo zusammen,

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.

Wäre super, wenn mir jemand weiterhelfen könnte.

MfG
Thomas

Hallo Thomas,

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 …

Viel Erfolg

Thomas

Hallo Thomas,

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…

Gruß, Andreas

Hallo Andreas,

hier mal der Link zu der Beispieldatei.

http://www.file-upload.net/download-9333952/Tunnelbe…

Da fehlten in der Tat noch ein Paar Angaben :wink:
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!

MfG Thomas

Noch nicht ganz klar
Hallo Thomas,

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.

Gruß, Andreas

Hallo Andreas,

so ähnlich hab ich mir das vorgestellt :wink:
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.

Ich hoffe die Erklärungen werden besser :wink:

Beste Grüße Thomas

jetzt klarer
Hallo Thomas,

deine Erklärungen machen sich. Ich glaube, ich habs jetzt kapiert. Heute Abend kann ich mich ans neue Coden setzen.

Gruß, Andreas

… und weitere Fragen:
Hallo Thomas,

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.

Gruß, Andreas

Guten Morgen Andreas,

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

Grüße Thomas

Hallo Thomas,

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.

Gruß, Andreas

Bitte mal testen
'nabend Thomas

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

Alternativ habe ich dir deine komplette Mappe mit dem neuen Makro hochgeladen:
http://www.file-upload.net/download-9356462/Tunnelbe…

Probier mal aus, ob’s so tut, wie du es dir vorstellst.
Die Reihenfolge in den einzelnen Paketen ist jetzt:

  • Alle „Einträge“, in der Reihenfolge, wie sie in der Liste standen
  • Alle „Umträge“, in der Reihenfolge, wie sie in der Liste standen
  • Alle „Austräge“, in der Reihenfolge, wie sie in der Liste standen

Feedback wäre nett.

Gruß, Andreas

Guten Morgen Andreas,

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.

Beste Grüße
Thomas

…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 :wink:
Tausend Dank!

Hallo Thomas

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

ich wäre
nur nie von alleine draufd gekommen :wink:

Dafür sind wir ja hier.

Tausend Dank!

Biddeschööön!