Zwei XML Dateien auf doppelte Einträge überprüfen

thrillkill

Lieutenant
Registriert
Nov. 2004
Beiträge
762
Ich habe zwei große Dateien (ca. 500.000 Zeilen) und will diese auf doppelte Einträge abgleichen. Die aktualisierung der Dateien und der Datenabgleich wird alle paar Tage erfolgen.

Wie stelle ich das am einfachsten ein?

Bin für Tipps dankbar.
 
Soll der Prozess alle paar Tage automatisch ablaufen ohne dein zutun?
Oder reicht eine halb automatisierte Lösung per VBA, Excel oder Zusatzprogramm?

Das wäre eine wichtige Info um den Schwierigkeitsgrad einzuschätzen.
 
Wäre ausreichend, wenn ich das semi-manuell mache.

Excel steht zur verfügung und ich kann auch andere Programme besorgen (falls nicht zu teuer).

Aufbau der beiden Dateien kann ich selbst gestalten. Geht um den Abgleich von Emailadressen.
 
- willst du das er die doppelten Einträge oder die "nicht doppelten" Einträge zum Schluss anzeigt?
- hast du Office 2007 oder neuer zur Verfügung? (nicht Excel 2003)

Dann kann ich dir eine einfache Methode zeigen.
 
Zuletzt bearbeitet:
Simple Methode ohne Komfort:

- Öffne Excel 2007 oder neuer mit einer neuen (leeren) Datei
- Kopier dir die Spalte mit den Emails aus Datei1 in die erste Spalte
- Kopier dir die Spalte mit den Emails aus Datei2 in die zweite Spalte

- Öffne den VBA Editor mit ALT+F11
- Öffne links in der Baumstrucktur Tabelle1
- Kopier den folgenden Code dort in den leeren Editor und setzte den Mauscursor irgendwo in das Modul.
- Drück F5 und warte, bis der Cursor wieder blinkt. Diese Stelle dauert wahrscheinlich 2-5min, da das Abarbeiten solcher Datenmengen dauert
- Wechsel zurück zu deiner Excel Tabelle
- Mit den Autofiltern kannst du nun auf "nicht leere" filtern. Du siehst damit alle Emails, welche NICHT doppelt waren. Also die Unterschiede zwischen den beiden Listen.

PHP:
Sub MeinVergleich()

letztezeile = Sheets(1).Cells.Find(what:="*", Lookat:=xlPart, after:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

For i = 1 To letztezeile
    
    Set gefunden = Nothing
    Set gefunden = Sheets(1).Columns(2).Find(what:=Cells(i, 1).Value)

    If Not gefunden Is Nothing Then
        Cells(i, 1) = ""
        gefunden.Value = ""
    End If
    
    Sheets(1).Cells.AutoFilter

Next i

End Sub


PS: Wenn du statt der Unterschiede nur die Doppelten sehen willst, dann sag bescheid.
Das kann man auch basteln.
 
Danke für die Antworten.

@nixdagibts Den Code habe ich eingefügt allerdings lief das insgesamt 15 Minuten, dann habe ich abgebrochen. Ist das normal oder stimmt da was nicht? Ich sollte erwähnen, dass ich das englische Gebietsschema eingestellt habe (deutsche Befehle z.B. WENN aber z.B. komma statt semikolon).

@ryan_blackdrago es funktioniert, rechnet aber auch mehrere Minuten lang.

Mir scheint fast, dass Excel bei einer halben Million Zellen an seine Grenzen stößt.
 
Nimm doch mal nur 1000 Zeilen und teste es nochmal.
Wenn es dann klappt, dann weißt du, dass es an deiner Datenmenge liegt.
 
Stimmt.

Mit 1000 funktioniert es. Geht es auch, dass die Zellen nicht gelöscht, sondern markiert werden?
 
farblich markiert über den Zellen-Hintergrund (danach kann man nicht filtern)
oder mit einem X in einer leeren Spalte (filterbar)?
 
Im Optimalfall sind die doppelten Mails noch zum kopieren auswählbar, weil sie weiterverarbeitet werden müssen.
 
PHP:
Sub MeinVergleich()

    letztezeile = Sheets(1).Cells.Find(what:="*", Lookat:=xlPart, after:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    For i = 1 To letztezeile
    
        Set gefunden = Nothing
        Set gefunden = Sheets(1).Columns(2).Find(what:=Cells(i, 1).Value)

        If Not gefunden Is Nothing Then Cells(i, 3) = "doppelt"
        
    Next i

    Sheets(1).Cells.AutoFilter Field:=3, Criteria1:="doppelt"

End Sub

Jetzt wird in der 2ten Spalte "doppelt" hingeschrieben.
Dieses doppelt bezieht sich auf die Email Adressen der 1. Spalte.

Nach wie vor völlig ohne Komfort. Es geht erstmal nur ums Kernprinzip und die Performance
Man könnte das Makro zum Beispiel auch auf einen Button in der Excel Symbolleiste binden.
Oder eine Eingabemaske, wo beide XML-Files nur ausgewählt werden und den Rest macht das Programm (Spalten suchen, vergleichen, markieren, Rest ausblenden)
 
Zuletzt bearbeitet:
Das hat auch funktioniert!

Werde es aber wohl nicht nutzen können, weil die Datenmenge zu groß ist :(
Es läd viel zu lange.
 
Zurück
Oben