Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1648to1652
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

Liste Zeilenweise über mehrere Spalten vergleichen

Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 10:42:08
Stefan
Hallo liebes Forum,
habe hier schon oft Lösungen für meine Probleme gefunden, aber zu meinem aktuellem Problem finde ich leider nichts.
Es gibt zwar viele Beiträge zu dem Thema, auch in den Vorlagen, aber nichts was ich als Anfänger so weit anpassen kann,
dass es mir Hilft.
Ich bekomme aus einer Software Monatlich mehrere Exeltabellen generiert.
Der Aufbau der Tabellen ist immer gleich. Daten von Spalte A bis Spalte U.
Die Länge der Daten ist aber extrem unterschiedlich, und kann bei weit mehr als 20.000 Zeilen liegen.
Die Vergleichenden Dateien haben annähernd die gleichen Anzahlen an Zeilen.
Ich muss nun die Monatlichen Änderungen in diesen Listen Filtern und herausarbeiten.
Die Vergleichstabelle kann weniger Datensätze enthalten, so dass ich nicht Zeile 1 mit 1 und Zeile 2 mit 2 vergleichen kann.
Sondern jede Zeile mit der Kompletten Liste abgleichen muss.
Es können Änderungen in fast jeder Spalte vorkommen.
Es können Komplette Datensätze neu hinzukommen, oder bisher vorahndene komplett entfallen,
somit auch die Reihenfolge nicht mehr übereinstimmen.
Ich bräuchte nun eine 3te Tabelle, in welcher mir sämtliche Einträge aufgelistet werden, welche
a) eine Datenänderung aufweisen
b) Daten welche nicht mehr vorhanden sind in neuer Tabelle
c) Daten welche neu sind und in Vergleichstabelle nicht vorhanden waren
Um es noch etwas anders zu Formulieren:
Wenn komplette Zeile aus Datei/Tabelle 1 in Datei/Tabelle 2 identisch, in beiden Dateien die Zeile ausblenden.
Alles was am Ende in beiden Dateien nicht ausgeblendet ist, in eine Datei zusammenschreiben.
Kann man das so umsetzen?
Eine Beispieldatei habe ich angehängt, in der Datei sind die Blätter alle in einer Datei, im realen werden es mindestens
2 Dateien. Ob die Änderungen ebenfalls in eine neue Datei geschrieben werden, oder in eine der Vergleichsdateien wäre egal.
Wäre für jede Hilfe und Anstoß in die richtige Richtung Dankbar!
Gruß
Stefan
Beispieldatei:
https://www.herber.de/bbs/user/124524.xls

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: geht, aber
10.10.2018 11:03:22
Fennek
Hallo,
die Aufgabe ist in Excel lösbar, erfordert aber recht viel Aufwand (xl ist kein Datenbank-Programm).
Es muss getrennt auf "gleich", "neu" und "gelöscht" geprüft werden, am besten, nachdem man eine Zeile in einen String zusammen gefasst hat.
Deine Beispieldatei zeigt aber nicht die möglichen Varianten und xl2003 ist auch schon etwas überholt.
mfg
(i.M. weiß ich nicht, ob ich an dieses Thema möchte, jedenfalls nicht ohne bessere Beispieldatei)
AW: geht, aber
10.10.2018 11:27:41
Stefan
Hallo Fennek,
erstmal Danke, für die schnelle Reaktion.
Excel welches genutzt wird, ist Version 2013. Nur die Daten, welche automatisiert aus einem Großrechnersystem erstellt werden und an mich verschickt werden, werden unter einer Version Excel 2003 erstellt und als .xls bereitgestellt. Verarbeiten würde ich die Daten unter der 2013 Version von Excel.
Welche "Varianten" müssten den noch aufgezeigt werden?
Entschuldige die Vorstellungen eines Anfängers, aber dachte, man könnte einfach Zeile nach Zeile über alle Spalten vergleichen, und wenn übereinstimmung gefunden, dann in einer Hilfsspalte eine 1 setzen.
Wenn keine übereinstimmung gefunden wurde in der "Ausgangsdatei" eine 0 setzen.
Und am Ende alle Zeilen mit einer 0 aus der "Ausgangsdatei" und alle Zeilen, welche in der Vergleichsdatei keinen Wert erhalten haben in eine neue Datei verschieben.
Das Zusammenfassen zu einem "String", scheint nicht zu klappen, da die Spalten unterschiedliche Formate aufweisen. Zumindest bin ich mit meinen Kentnissen am Verketten der Zeilen gescheitert.
Gruß
Stefan
Anzeige
kleiner Fortschritt?
10.10.2018 11:50:54
Stefan
Muss mich korrigeren, über die Formel:
=A2& " " &B2& " " &C2& " " &D2& " " &E2& " " &F2& " " &G2& " " &H2& " " &I2& " " &J2& " " &K2& " " &L2& " " &M2& " " &N2& " " &O2& " " &P2& " " &Q2& " " &R2& " " &S2& " " &T2& " " &U2
Konnte ich alles "verketten" und wenn ich die Ergebnisse in einer Tabelle zusammen kopiere (als Werte), kann ich über die Funktion Duplikate entfernen auch alles Doppelte entfernen.
Leider hilft mir das noch nicht viel. Außer dass man die Spalten zu einem "String" zusammenfassen kann, und er auch in beiden Dateien gleich ist, und somit Doppelte erkannt werden.
Anzeige
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 11:47:12
PeterK
Hallo
Um eine "Datenänderung" zu erkennen, bedarf es eines eindeutigen Schlüssels. Z.B. Wird im Feld "Typennummer" der Wert von KA1 auf KA3 geändert, ist das nun ein neuer Datensatz oder nur eine Änderung?
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 13:06:00
Stefan
Hallo PeterK,
sobald sich etwas ändert, ist es eigentlich ein neuer Datensatz.
Nur wenn die Zeile komplett übereinstimmt, dann ist es eine bereits vorhandene Datenzeile.
Gruß
Stefan
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 13:09:04
PeterK
Hallo
Damit ist Punkt a) deiner Ursprungsanfrage nicht möglich. Es gibt nur neue oder glöschte Datensätze. Stimmt das?
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 13:28:46
Stefan
Hallo PeterK,
die Antwort ist: Jein ;-)
Man kann natürlich einen Datensatz, welcher geändert wurde auch als neuen Datensatz betrachten.
Somit müsste in der Auswertung aber das selbe herauskommen.
Denn dann würde in der neuen Tabelle ein neuer Datensatz gefunden, und in der Ausgangsdatei ein Datensatz, welcher keinen "Gegenpart" in der zweiten Datei mehr hat.
Das Ergebnis wäre für mich das gleiche.
Ob nun als Beispiel:
Ursprungsdatei Datei:
KA1 Projekt M3 - AU276 45A 602 555 WINDLAUF 1 K 21 105-01 1 F1 00 2162221 K E25080 0,05349999996 0,05349999996 0,01909999998 0,01909999998 0,01909999998 00 - für alle
Vergleichs Datei:
KA1 Projekt M3 - BU276 45A 602 555 WINDLAUF 1 K 21 105-01 1 F1 00 2162221 K E25080 0,05349999996 0,05349999996 0,01909999998 0,01909999998 0,01909999998 00 - für alle
Ob dies nun als "Änderung" oder als 2 Datensätze ohne einen Gegenpart ausgewertet wird, wäre egal!
Anzeige
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 11:50:55
EtoPHG
Hallo Stefan,
Siehe Verwendungsmöglichkeiten für Inquire!
Ab und an lohnt es sich mit Neuerungen die Microsoft mitgeteilt werden auseinanderzusetzen, als sich immer nur auf Forum und Helfer abzustützen ;-)
Gruess Hansueli
AW: Liste Zeilenweise über mehrere Spalten vergleichen
10.10.2018 12:54:21
Stefan
Hallo EtoPHG,
hab mir dieses Tool nun mal angesehen, im Grunde ein SUPER Tool, aber leider aufgrund der Möglichkeit, dass einzelne Zeilen herausfallen können, klappt es leider nicht. Bei reinen Änderungen in einer Zeile, liefert es Top Ergebnisse, aber leider wird auch alles was durch eine Verschiebung ausgelöst wird, auch als Fehler ausgegeben.
Oder kann man das irgendwo einstellen?
Leider ist das Tool bei mir komplett in Englisch, und damit nicht durchgängig verständlich...
Besten Danke,
Stefan
Anzeige
AW: zu komplex (offen!!!!)
10.10.2018 13:11:01
Fennek
Hallo Stefan,
bei so vielen Zeilen werden Formeln zu langsam, d.h. es muss mit Arrays gearbeitet werden.
Der folgende Code fasst jede Zeile zusammen, so dass man z.B. mit "CountIf()" gleiche bestimmen kann.

Sub F_en()
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Sheets("Alt").Cells(1).CurrentRegion.Copy
.GetFromClipboard
Alt = Split(.GetText, vbCrLf)
For i = 1 To UBound(Alt)
Debug.Print Alt(i)
Next i
Debug.Print
Application.CutCopyMode = False
Sheets("Neu").Cells(1).CurrentRegion.Copy
.GetFromClipboard
Neu = Split(.GetText, vbCrLf)
For i = 1 To UBound(Neu)
Debug.Print Neu(i)
Next i
Application.CutCopyMode = False
End With
End Sub
Erwarte keinen weiteren Input von meinerseite, aber es hier noch viele andere.
mfg
https://www.herber.de/bbs/user/124536.xlsm
Teste den Code nur in der Beispieldatei.
Anzeige
AW: zu komplex (offen!!!!)
10.10.2018 13:32:23
Stefan
Hallo Fennek,
ich Danke dir für Deine bsiherige Hilfe, ich weiß, dass dies eine rießen Datenmenge ist, und somit schwer zu händeln.
Vielen dank auch für deinen ersten Ansatz,
ich hoffe dass ich auf diesem weiter aufbauen kann, und weitere Hilfreiche Tipps aus dem Forum bekomme!
AW: Liste Zeilenweise über mehrere Spalten vergl
10.10.2018 13:50:42
Daniel
Hi
könntest du so umsetzen:
1. in beiden Tabellen in Spalte V den Tabellennamen bzw den Monat eintragen, damit du später weißt, aus welcher Tabelle die jeweilige Zeile kommt.
2. beide Tabellen untereinander in eine Tabelle kopieren
3. die neue Tabelle nach allen Spalten sortieren. Zeilen, die in beiden Tabellen in allen Spalten gleich sind sollten jetzt direkt bei einander stehen.
3. füge folgende Formel in Spalte W ein, um gleiche Zeilen zu kennzeichnen, Formel für W2, dann nach unten ziehen
=WENN(SUMMENPRODUKT(((A2:U2A3:U3)*1)*SUMMENPRODUKT((A2:U2A1:U1)*1))=0;"Gleich";"Änderung")
die Zeilen, die gleich sind, kannst du dann ausblenden oder löschen und dir den Rest dann genauer anschauen (daher auch vor dem Zusammmenkopiern Punkt 1 ausführen.
bei der genannten Datenmenge kannst du nicht in zwei Tabelle jede Zeile der einen Tabelle mit jeder Zeile der anderen Tabelle vergleichen.
Das gibt dir bei 20.000 Zeilen 20.000 * 20.000 Zeilenvergleiche, damit ist dann selbst Excel irgendwann überfordert.
Durch die Sortierung (und im Sortieren ist Excel sehr schnell) berauchst du dann nur noch jede Zeile mit ihren beiden Nachbarzeilen zu vergleichen, um festzutellen, ob es eine Übereinstimmung gibt oder eine geänderte Zeile vorliegt, was die ganze Sache 10.000x schneller macht.
Ich gehe natürlich davon aus, dass es in den beiden Tabellen selbst keine Zeilen gibt, die in allen Spalten übereinstimmen, so dass jede Zeile ein Unikat ist.
Gruß Daniel
Anzeige
AW: Liste Zeilenweise über mehrere Spalten vergl
10.10.2018 14:19:16
Stefan
Hallo Daniel,
der erste Test scheint ganz gut! Vielen Dank für Deine Lösung!
Ich hoffe das es weiterhin so gut klappt!
VIELEN DANK!
AW: einer geht noch
10.10.2018 15:24:19
Fennek
Hallo,
der folgende Code zeigt Unterschiede zwischen "Alt" und "Neu", die sheets müssen wie in meinem Beispiel von vorhin benannt werden.

Sub F_en()
Anf = timer
'Daten an Array übergeben
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Sheets("Alt").Cells(1).CurrentRegion.Copy
.GetFromClipboard
Alt = Split(.GetText, vbCrLf)
Application.CutCopyMode = False
Sheets("Neu").Cells(1).CurrentRegion.Copy
.GetFromClipboard
Neu = Split(.GetText, vbCrLf)
Application.CutCopyMode = False
End With
'Alt
For i = 1 To UBound(Alt)
If IsError(Application.Match(Alt(i), Neu, 0)) Then
Sheets("Alt").Cells(i + 1, 1).Interior.Color = vbRed
Else
Sheets("Alt").Cells(i + 1, 1).Interior.Color = vbGreen
End If
Next i
'Neu
For i = 1 To UBound(Neu)
If IsError(Application.Match(Alt(i), Neu, 0)) Then
Sheets("Neu").Cells(i + 1, 1).Interior.Color = vbRed
Else
Sheets("Neu").Cells(i + 1, 1).Interior.Color = vbGreen
End If
Next i
Msgbox timer - Anf
End Sub
Bitte berichte die Laufzeit in der 30.000 Zeilen-Datei.
mfg
Anzeige
AW: einer geht noch
11.10.2018 11:22:33
Stefan
Also läuft soweit ganz gut, es wird die erste Spalte verglichen.
Dies könnte man ja über eine Verkettung der Zellen lösen.
Also erstmal TOP!
Die Laufzeit aktuell war bei 68,28125 Sekunden bei 8653 Datensätzen.
Werde mal versuchen, ob ich es selbst nun soweit anpassen kann, das in beiden Tabellen die Zellen in z.B. Spalte "W" Zusammengesetzt werden, und diese dann zueinander vergleiche!
Vielen Dank für Deine Hilfe!
AW: ES WERDEN ALLE(!) Spalten verglichen
11.10.2018 11:29:32
Fennek
Hallo,
der Code fasst ALLE Spalten einer Zeile zusammen und vergleicht dieser mit der anderen Tabelle. Nur in Spalte A wird eine farblich Markierung gesetzt.
Lösche bitte

Else
Sheets("Neu").Cells(i + 1, 1).Interior.Color = vbGreen
damit nur die Unterschiede markiert werden und damit es schneller läuft.
mfg
(IMHO ist die Variante des Concadinate das zur Zeit "hot staff" in der dt Forenwelt, nicht von mir entdeckt, d.h. ich muss damit noch etwas üben)
Anzeige
AW: ES WERDEN ALLE(!) Spalten verglichen
11.10.2018 11:51:39
Stefan
67,39844 Sekunden
ABER es werden in beiden Versionen die Fehler nicht erkannt!
Habe es gerade mit beiden Versionen nochmals versucht, aber es wird immer alles grün, oder gar nichts eingefärbt!
AW: getestet in meiner Datei
11.10.2018 12:39:24
Fennek
Hallo,
es wäre besser, wenn du eine Datei, 2 Sheets "Alt" und"Neu" mit allen möglichen Fällen (=, neu, gelöscht, geändert) hochladen würdest.
Ca 10-20 Zeilen sollten reichen.
mfg
AW: Spalte P un Q
11.10.2018 14:40:24
Fennek
sorry, in den genannten Spalten sind so viele Unterschiede, dass es keinen Spass macht, die von Hand zu prüfen.
Anzeige

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige