Datenvergleich: Neu – Fehlt – Geändert (CSV)

Fol­gende Auf­gaben­stel­lung wurde in einem Forum disku­tiert: Es existieren 2 csv-Dateien, die miteinan­der ver­glichen wer­den sollen. Auf der Basis des Files Testdaten1.csv sollen durch Excel 3 Ergeb­nisse berech­net wer­den:

  • Fehlende Daten­sätze
  • Überzäh­lige Daten­sätze (fehlen in der 2. Datei)
  • Daten­sätze mit Änderun­gen inner­halb der Dat­en

Aus unter­schiedlichen Grün­den habe ich nicht im Forum geant­wortet, nutze aber die Gele­gen­heit, solch eine inter­es­sante Auf­gabe als Lösungsmöglichkeit für Pow­er Query hier vorzustellen. Fol­gende bei­den Dateien liegen als Text­datei im csv-For­mat vor: Test-File1.csv und Test-File2.csv. Ich habe die bei­den Files im Verze­ich­nis C:\Data\ abgelegt; dieses Wis­sen ist für sie wichtig, wenn sie zum Ver­gle­ich meine fer­tige Auswer­tung laden. In dieser (zip-gepack­ten) Datei find­en Sie die bei­den Quell­dateien als auch meine Muster-Lösung.

Begin­nen Sie damit, nacheinan­der jede der bei­den Textfiles zu öff­nen­den (Vorge­hensweise in Excel 2016365): Dat­en | Neue Abfrage | Aus Datei | Aus csv. Der Import-Assis­tent erken­nt ohne ihr Zutun, dass hier kein Semi­kolon son­dern ein Kom­ma als Trennze­ichen der einzel­nen Spal­ten vor­liegt. Erweit­ern Sie die Schalt­fläche Laden ▼ und wählen Sie dort den Punkt Laden in… :

Vorbereitung auf das Laden als "Nur Verbindung"

Vor­bere­itung auf das Laden als „Nur Verbindung”

Und im fol­gen­den Dia­log markieren Sie Nur Verbindung erstellen. Dadurch erstellen Sie eine Kopie der Dat­en, ohne dass diese sofort in eine Tabelle geschrieben wer­den. Gehen Sie bei der zu ver­gle­ichen­den Datei den gle­ichen Weg. Im recht­en Seit­en­fen­ster (Arbeitsmap­pen­abfra­gen) sind anschließend bei­de Abfra­gen mit dem Ver­merk Nur Verbindung aufge­führt.

Öff­nen Sie nun die Abfrage Test-File1 beispiel­sweise durch einen Dop­pelk­lick auf den Ein­trag im recht­en Seit­en­fen­ster. Wählen Sie im Menü Start die Schalt­fläche Kom­binieren und erweit­ern Sie den Menüpunkt Abfra­gen zusam­men­führen ▼ durch einen Klick auf das Dreieck. Wählen Sie hier Abfra­gen als neue Abfrage zusam­men­führen. Unter­halb der Auflis­tung mit den ersten Dat­en aus Test-File1 Klick­en Sie in das leere Kom­bi­na­tions­feld und wählen dort anschließend die Abfrage Test-File2. Markieren Sie nun jew­eils ein beliebiges Feld in der Spalte ID; ganz unten im Fen­ster wird Ihnen angezeigt, dass die Auswahl mit 9 der 1. 10 Zeilen übere­in­stimmt:

Beide ID-Daten sind markiert, übereinstimmende Daten existieren

Bei­de ID-Dat­en sind markiert, übere­in­stim­mende Dat­en existieren

In der 1. Fragestel­lung geht es ja darum, welche Daten­sätze zwar in der Abfrage Test-File2 vorhan­den sind, jedoch in der Abfrage Test-File1 fehlen. Dazu erweit­ern Sie das Kom­bi­na­tions­feld Join-Art und wählen Rechter Anti-Join (Zeilen nur in zweit­er). Nach einem Klick auf die Schalt­fläche OK ist die Abfrage auf eine Zeile geschrumpft und schein­bar ste­hen dort keine der gewün­scht­en Dat­en drin. Der Ein­druck täuscht. Erweit­ern Sie das Feld Test-File2 Doppelpfeil durch einen Klick auf den Dop­pelpfeil in der Über­schrift und Ent­fer­nen Sie im Dia­log nur das Häkchen im allerun­ter­sten Punkt Ursprünglichen Spal­tenna­men als Prä­fix ver­wen­den. Ide­al­er­weise löschen Sie nun die ersten 4 Spal­ten und ent­fer­nen in den verbliebe­nen Über­schriften jew­eils die let­zten bei­den Zeichen (.1), damit nur die reine Über­schrift ID .. Ort ste­hen bleibt. Nor­maler­weise wer­den Sie nun der Deut­lichkeit wegen den Namen der Abfrage von Merge1 auf beispiel­sweise Fehlend ändern.

Für die Abfrage mit der zweit­en Fragestel­lung gehen Sie prinzip­iell genau­so vor. Öff­nen Sie wiederum die Abfrage Test-File1, was hier übri­gens ganz leicht durch einen Klick auf den entsprechen­den Ein­trag im linken Seit­en­fen­ster geht. Wiederum Abfra­gen als neue Abfrage zusam­men­führen und bei­de Dat­en der ID-Spal­ten markieren. Da die Fragestel­lung dieses Mal jene Daten­sätze erfassen soll, die in der 2. Abfrage fehlen, wählen Sie bei Join-Art den vor­let­zten Punkt Link­er Anti-Join (Zeilen nur in erster) das Ergeb­nis wird sich so darstellen:

Das Ergebnis für den Linken Anti-Join

Das Ergeb­nis für den Linken Anti-Join

Die gewün­scht­en Dat­en ste­hen ja bere­its in den ersten 4 Spal­ten, darum kön­nen Sie die die let­zte Spalte Test-File2 sofort löschen. Geben Sie nun diese Abfrage noch einen „sprechen­den” Namen, beispiel­sweise Überzäh­lig.

Auch wenn die let­zte Fragestel­lung etwas mehr Aufwand bedeutet wird es sie nicht wun­dern, dass die ersten Schritte mit dem Kom­binieren der bei­den Abfra­gen iden­tisch sind. Als Join-Art wählen Sie hier den Inner Join (nur übere­in­stim­mende Zeilen). Erweit­ern Sie die 5. Spalte durch einen Klick auf den Dop­pelpfeil und sie brauchen nur darauf zu acht­en, dass das Häkchen beim Kon­trol­lkästchen Ursprünglichen Spal­tenna­men… nicht geset­zt ist. Die Abfrage beste­ht jet­zt aus 8 Spal­ten, wobei die Über­schriften der 2. Hälfte jew­eils den Zusatz .1 tra­gen. Sie kön­nen schon an dieser Stelle den Namen der Abfrage ändern, beispiel­sweise auf Unter­schiede.

Wählen Sie nun den Menüpunkt Spalte hinzufü­gen und dort im Menüband Benutzerdefinierte Spalte. Sie kön­nen den neuen Spal­tenna­men so belassen oder wenn Ihnen das lieber ist beispiel­sweise iden­tisch eingeben. In das Feld mit der Spal­tenformel geben Sie nach dem vorgegebe­nen = diese Funk­tion ein:
[ID]=[ID.1] and [Name]=[Name.1] and [Straße]=[Straße.1] and [Ort]=[Ort.1]

Die jew­eili­gen Spal­tenna­men in den eck­i­gen Klam­mern übernehmen Sie vorzugsweise durch einen Dop­pelk­lick auf den Namen der Spalte im recht­en Rah­men, wodurch die eck­i­gen Klam­mern automa­tisch mit einge­fügt wer­den. Das Ergeb­nis ist eine Spalte, wo entwed­er der Wert TRUE oder FALSE ste­ht.

Fil­tern Sie nun in diese Spalte so, dass der Wert FALSE erhal­ten bleibt und es wer­den jene Zeilen übrig bleiben, wo min­destens ein Wert in den kom­mu­nizieren­den Spal­ten unter­schiedlich ist. Sie kön­nen sich nun entschei­den, ob Sie alle 8 Spal­ten zu Ver­gle­ich­szweck­en beste­hen lassen wollen oder ob sie sich auf die ersten 4 Spal­ten für die Darstel­lung in der endgülti­gen Abfrage beschränken. Ent­fer­nen Sie also nun nur die let­zte Spalte (iden­tisch) oder auch die 4 Spal­ten davor, falls Sie nur die Dat­en der ersten csv darstellen wollen.

Je nach Anforderun­gen und Wun­sch kön­nen Sie nun ganz ein­fach Schließen & laden wählen oder aber die Alter­na­tive Schließen & laden in… Im erst­ge­nan­nten Fall wird für jede Abfrage ein neues Tabel­len­blatt erzeugt und die Query automa­tisch als Tabelle dort hinein geschrieben. Hier ist es dann sin­nvoll, jedes Tabel­len­blatt den Ergeb­nis­sen entsprechend neu zu benen­nen. In der Alter­na­tive wer­den sie jew­eils gefragt, ob sie die Abfrage über­haupt in ein­er Tabelle spe­ich­ern wollen und falls ja, in ein neues oder ein beste­hen­des Arbeits­blatt. Hier ist eine indi­vidu­elle Posi­tion­ierung möglich.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits freuen …

Dieser Beitrag wurde unter Allgemein, Verschiedenes, Daten zusammenführen, Daten-Import / -Export, Filtern & Sortieren, Foren-Q&A, Join-Art, Power Query, PQ-Formeln (Sprache M), Vergleichen (Daten, Tabellen, Abfragen) abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.