HERBERS Excel-Forum - das Archiv
Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo liebe Profis

Ich habe ein Makro das zwei Tabellen vergleicht ,funktioniert auch so bis excel auf eine geänderte oder leere Zeile trifft.
Wie kann ich das im Makro ändern dass er trotzdem weiter vergleicht?

Code:

Dim i As Long
Dim ws1 As Excel.Worksheet
Dim ws2 As Excel.Worksheet
Dim sh1 As Range

MsgBox ("Veuillez ouvrir le fichier du mois prècèdent")
strDatei = Application.GetOpenFilename
If strDatei <> False Then
Set ws2 = Workbooks.Open(strDatei).Sheets(1)
Else
Exit Sub
End If
MsgBox ("Veuillez ouvrir le fichier du mois actuel")
strDatei = Application.GetOpenFilename
If strDatei <> False Then
Set ws1 = Workbooks.Open(strDatei).Sheets(1)
Else
Exit Sub
End If

Zeile = Range("H1048576").End(xlUp).Row
For i = 2 To Zeile
If ws1.Cells(i, 5).Value = ws2.Cells(i, 5).Value Then
ws1.Cells(i, 13).Value = ws2.Cells(i, 13).Value
End If
Next i


Vielen Dank
Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Piet
Hallo

ich vermute du meinst eine -Zeilenverschiebung- zwischen Datei1 und Datei2, so das der Datensatz nicht mehr übereinstimmt.
In dem Fall verwendest du besser die Such & Find Methode, einen Code dazu findest du unten. (ungetestet !!)
Am besten noch bei Dim als Variable festlegen mit --> Dim rFind as Range

mfg Piet

For i = 2 To Zeile

Set rFind = ws2.Columns(5).Find(ws1.Cells(i, 5), After:=ws2.[e1], LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
ws1.Cells(i, 13).Value = ws2.Cells(i, 13).Value
End If
Next i
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet

Vielen Dank für deine Antwort.
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Piet
Hallo Lucien

ja, du hast Recht, Hut ab. Find beachtet meines Wissens ausgeblendete Zeilen nicht!
Probiere es bitte mal mit 2 For Next Schleifen. Das dauert wahrscheinlich länger, mal sehen.
Ich hoffe das meine Makro evtl. Zeilenverschiebungen durch Variable a und v ausgleicht!
Hierzu benötigst du die Zeile Variable bitte zweimal, für Tabelle1+2 separat ermittelt!
Ich bin gespannt auf deine Rückmeldung.

mfg Piet



Sub Tabellen_vergleichen()
Dim i&, j&, a&, v&, Zeile1&, Zeile2&
Zeile1 = ws1.Cells(Rows, Count, 1).End(xlUp).Row
Zeile2 = ws2.Cells(Rows, Count, 1).End(xlUp).Row
v = Abs(Zeile2 - Zeile1) + 2 'Zeilenverschiebung!

'2 For Next Schleifen, hoffentlich klappt es!
For i = 2 To Zeile1
If i < v Then a = 2 Else a = i - v
For j = a To Zeile2
If ws1.Cells(i, 5) = ws2.Cells(j, 5) Then
ws1.Cells(i, 13).Value = ws2.Cells(i, 13).Value
Exit For
End If
Next j
Next i
End Sub

AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Piet
Nachtrag -- würde ich die zweite For Next Schleife IMMER bei 2 starten, läuft das Makro bei langen Tabellen ewig lange!
Deshalb meine Idee mit Variable a als Startzelle zu beginnen. Das ich ich bisher aber noch NIE getestet. Bin gespannt.

AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Pier
Vielen Dank für deine Tipps
Kann das leider erst am Dienstag auf der Arbeit testen.
Melde mich auf jeden Fall wieder.
Mit freundlichen Grüßen
Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet

Leider funktioniert das Makro nicht.
Frage mich ob ich nicht einfach per makro den Filter deaktiviere und später aktiviere.
Mit dem neuen Code kopiert er nichts.
Mit freundlichen Grüßen Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet

Der Code funktioniert , der Code war in zwei kleinen Punkten falsch.
Jetzt bleibt das Problem wenn in ws1 200 zeilen sind und in ws2 nur 198 dann funktioniert der Code nicht.
Wenn die Zeilen stimmen mit unterschiedlichen Einträgen klapp der Code.
Warum nicht wenn die Mappe ws2 weniger Zeilen hat oder sie unterschiedlich sind?
Gruss Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Piet
Hallo Lucien

schade das meine Idee so nicht geklappt hat, aber bei 200-1000 Zeilen kein Problem.
Der untere Code läuft bei mir in einer Testdatei, dauert vielleicht einen Tick länger.
Bei Datensätzen über 1000 macht sich aber die Laufzeit ab Zeile 2 bemerkbar.

mfg Piet

Sub Tabellen_vergleichen()

Dim i&, j&, a&, v&, Zeile1&, Zeile2&
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Zeile1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Zeile2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row

'2 For Next Schleifen, so klappt es bei mir!
For i = 2 To Zeile1
For j = 2 To Zeile2
If ws1.Cells(i, 5) = ws2.Cells(j, 5) Then
ws1.Cells(i, 13).Value = ws2.Cells(i, 13).Value
Exit For
End If
Next j
Next i
End Sub
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet
Zuerst einmal vielen Dank für deine Zeit.
Der Code funktioniert auch bei mir.

Nur wenn die die beiden Tabellen die gleiche Anzahl von Zeilen haben.
Lösche ich in der Tabelle 2 eine Zeile stoppt das Makro.
Wie kann ich das verhindern?
Gruss Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet
Habe gerade getestet.
Wenn ich in der zweiten Tabelle eine zeile lösche läuft das Makro nicht mehr korrekt durch. Es überspringt Zeilen.
Wenn ich alle Zeilen gleich lasse in beiden Tabellen dann läuft das Makro top.
Was könnte das noch sein?
Danke im voraus
Mit freundlichen Grüßen
Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Piet
Hallo

deine Rückmeldung verwirrt mich jetzt total. Ich kann mir keinen Reim darauf machen!!
Die Find Methode arbeitet normalerweise gerade -bei Zeilenverschiebungen- korrekt!
Hast du die Möglichkeit zwei Dateien mit anonymen Daten hochzuladen, damit ich mir das mal ansehen kann.
Ohne die Datei vor mir zu sehen fällt mir dafür im Augenblick KEINE Erklärung ein!

mfg Piet
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet
Vielen Dank für deine Rückmeldung

Ich bekomme die Dateien nicht hochgeladen mit dem Handy.
Ich versuche es wenn ich zu Hause bin.
Ich versuche mich klarer auszudrücken.
Ich habe zwei Excel Mappen.
Diese haben identische Kolonnen aber die Zeilen können verschieden sein.
Die Kolonne 5 von Mappe 1 sollte mit der Kolonne 5 von der Mappe 2 verglichen werden und den Text aus der Mappe1 Kolonne 13 sollte bei Übereinstimmung in die Mappe 2 in Kolonne 13 kopiert werden
Das funktioniert mit deiner Hilfe solange bis dann in der Mappe 2 die immer ändern wird Zeilen fehlen oder hinzugekommen sind.
Das Makro sollte dies ignorieren und einfach weiter vergleichenY
Das tut es aber nur mit Unterbrechungen obwohl die beiden Texte der Kolonne 5 übereinstimmen.
Ich werden zu Hause die Mappen hochladen.
Vielen Dank für dein Bemühen.
Mit freundlichen Grüßen Lucien
AW: Vergleich 2 er Tabellen trotz leerer Zeilen
Lkrys
Hallo Piet
Ich habe herausgefunden wieso es nicht geht.
Die Mappe enthaltten filtrierte Zeilen.
Kann es daran liegen und wenn ja , gibt es eine Lösung?
Mit freundlichen Grüßen Lucien