Daten-Abgleich (1)

Tabellenblätter einer Mappe vergleichen

Gegeben sei eine Arbeitsmappe mit zwei rel­e­van­ten Tabel­len­blät­tern. Im ersten Blatt sind 50.000 Artikel­num­mern aufge­führt, im zweit­en eine Unter­menge der Num­mern des ersten Blattes. Das dritte Blatt ist per Makro gegen (verse­hentlich­es) Löschen geschützt, es dient als Kopi­er-Vor­lage für das erste Blatt, damit Sie nach einem Pro­belauf rasch wieder die Aus­gangssi­t­u­a­tion her­stellen kön­nen. Aus diesem Grunde wer­den Sie auch das Aus­führen von Makros geson­dert erlauben müssen oder in Kauf nehmen, dass das Reserve-Blatt den­noch verse­hentlich gelöscht wer­den kann.

Alle Datensätze aus Blatt 2 löschen

Wenn Sie diese Arbeitsmappe herun­ter­laden wer­den Sie anhand der Reg­is­ter­beze­ich­nun­gen rasch erken­nen, was geschehen soll: Im Blatt Alle Artikel sollen von den 50.000 Posi­tio­nen all jene Artikel gelöscht wer­den, die im Arbeits­blatt Löschen aufge­führt sind.

Dabei sind zwei mehr oder weniger erschw­erende Dinge zu beacht­en: Bei­de Lis­ten sind nicht sortiert (und sollen auch in dieser Rei­hen­folge bleiben) und es sind keine Zahlen, son­dern wegen der führen­den Nullen, die beim kopieren auch so über­nom­men wer­den sollen Texte, die wie Zahlen ausse­hen. Daher auch das kleine, grüne Dreieck in den Zellen oben links. Übri­gens: Wie Sie diese Fehler-Sym­bole kom­fort­a­bel ent­fer­nen kön­nen, sehen Sie in diesem Beitrag.

Wie so oft im Win­dows- und Excel-Leben führen viele Wege zum Ziel. Zwei davon, bei­de ohne VBA/Makros werde ich Ihnen hier vorstellen. Und für bei­de Lösun­gen gilt, dass Sie eine Hil­f­ss­palte anle­gen müssen. Dazu schreiben Sie in B1 eine beliebige Über­schrift; die ist unbe­d­ingt erforder­lich, weil anschließend noch gefiltert wer­den soll. Ich selb­st ver­wende meist „sprechende” Beze­ich­nun­gen in Kurz­schreib­weise, beispiel­sweise 2del (to delete, zu löschen).

Wenn Sie mit Excel 2003 oder neuer arbeit­en, empfehle ich Ihnen, irgend­wo in Spalte A oder Spalte B zu Klick­en und dann StrgL (Excel 2003 oder neuer) oder (in Excel 2007 oder neuer) StrgT zu betäti­gen. Es wird sich solch eine Nach­frage öff­nen:

Bestätigungs-Nachfrage für die Tabellen-Erstellung

Bestä­ti­gungs-Nach­frage für die Tabellen-Erstel­lung

Acht­en Sie darauf, dass das Häkchen beim Menüpunkt Tabelle hat Über­schriften geset­zt ist. Das Ganze führt zu ein­er deut­lich sicht­baren Änderung der Darstel­lung:

Farbliche Hervorhebung der Zeilen

Far­bliche Her­vorhe­bung der Zeilen

Sie haben damit eine so genan­nte Intel­li­gente Tabelle erstellt, die einige Vorteile hat.  Im fol­gen­den Abschnitt set­ze ich eine solche Liste voraus, im näch­sten Abschnitt ver­wende ich nicht nur eine andere Formel son­dern arbeite auch ohne diese Form der Liste, damit Sie auch bei älteren Excel-Ver­sio­nen davon prof­i­tieren kön­nen. Die Auf­gabe ist bei­de Male die gle­iche: In Tabelle Alle Artikel sollen alle Daten­sätze gelöscht wer­den, die im Blatt Löschen aufge­führt sind 😛 .

▲ nach oben …

Lösung mit ZÄHLENWENN()

Ich ver­sichere Ihnen, dass das erstellen der Formel schneller geht als die Berech­nung durch Excel wenn Sie so vorge­hen, wie hier aufgezeigt:

  • Klick­en Sie in B2
  • Geben Sie dort den ersten Teil ein­er Formel ein: =ZÄHLENWENN(Löschen!A:A;
  • Klick­en Sie auf A2
  • Fügen Sie nun an die Formel eine schließende Klam­mer ) sowie >0 an.

Die kom­plette Formel sieht nun so aus, falls Sie exakt den obi­gen Angaben gefol­gt sind:
=ZÄHLENWENN(Löschen!A:A;[@[Artikel-Nr.]])>0
Wenn Sie die Formel nun per Eingabe (Return, Enter) abschließen, ist Excel einige Zeit mit der Berech­nung beschäftigt. Dazu ein klein­er Hin­weis: Etwas schneller würde es gehen, wenn Sie in der Formel nicht Löschen!A:A (also die kom­plette Spalte) son­dern den exak­ten Bere­ich ver­wen­det hät­ten, also Löschen!A2:A19500. Alter­na­tiv wäre auch diese Formel möglich:
=ZÄHLENWENN(Löschen!$A$2:$A$19500;‘Alle Artikel’!A2)
Sie ist etwas schneller, weil eine Berech­nung weniger stat­tfind­et. Und da kann ich bzw. kön­nen Sie dann auf größer Null fil­tern, was dann zum gle­ichen Ergeb­nis führt.

Spätestens jet­zt haben Sie aber auch einen enor­men Vorteil der Intel­li­gen­ten Tabellen ken­nen gel­ernt. Sie haben die Formel ein einziges Mal einge­tra­gen und schon wird sie in allen 50.000 Zeilen angewen­det.

Eine kleine Erk­lärung zur Formel bin ich Ihnen schuldig. Mit ZÄHLENWENN() an sich lasse ich mir die Anzahl der Daten­sätze berech­nen, die in der zweit­en Tabelle genau den Wert aus Spalte A haben. Gibt es den Wert nicht, dann ist das Ergeb­nis 0, son­st min­destens 1. Dann „behaupte” ich, dass das Ergeb­nis dieser Funk­tion größer Null ist. Diese Aus­sage kann entwed­er stim­men oder nicht. Sie ist WAHR oder FALSCH. Und genau dieses Ergeb­nis ste­ht jet­zt in Spalte B. Und die vielle­icht etwas kryp­tisch anmu­tende For­mulierung [@[Artikel-Nr.]] ste­ht für „Alle Zeilen der Spalte mit der Beze­ich­nung Artikel-Nr.” in der Über­schrift.

Nun in B2 rechts auf den Klick­en und in der Fil­ter-Auswahl nur das WAHR anzeigen lassen. Das Ergeb­nis stellt sich nun so dar:

Die gefilterten Datensätze

Die gefilterten Daten­sätze

Um nun möglichst kom­fort­a­bel die Daten­sätze zu löschen, gehen Sie so vor:

  • Klick­en Sie auf den Zeilenkopf von A3, welch­es ja die erste sicht­bare Zeile des Daten­bere­ichs ist. Jet­zt ist die kom­plette Zeile markiert.
  • Nun StrgShift. Automa­tisch wer­den alle Zeilen bis Zeile 50001 markiert
  • Recht­sklick und aus dem Kon­textmenü Zeile löschen anklick­en
  • Die Warn­mel­dung lesen, ver­ste­hen und bestäti­gen.

Nach mehr oder weniger kurz­er Wartezeit wer­den die Daten­sätze gelöscht sein. Anschließend den Fil­ter aus B1 aufheben und dann kon­trol­lieren, ob der unter­ste Daten­satz immer noch in Zeile 50.001 ste­ht. Das wird nicht der Fall sein, es ist die Zeile 30.282. Damit ist die Auf­gabe gelöst.

▲ nach oben …

Lösung ohne Intelligente Tabelle, Funktion VERGLEICH()

Vor­sicht Glat­teis! Diesen Satz stelle ich hier an den Anfang, weil ich Sie erst ein­mal ein wenig aufs Glat­teis führe. Diesen sehr ver­bre­it­eten Fehler soll­ten Sie ein­fach ein­mal sel­ber machen, um daraus zu ler­nen. Aber erst ein­mal zu den notwendi­gen Vor­bere­itun­gen. Entwed­er laden Sie sich die Tabelle noch ein­mal hier vom Blog herunter oder Sie sor­gen auf eine Ihnen genehme Art dafür, dass das Arbeits­blatt Alle Artikel wieder den ursprünglichen Zus­tand hat. Dazu müssen Sie in jedem Fall die Tabelle in einen nor­malen Bere­ich umwan­deln. Das geht so:

  • Recht­sklick in die Tabelle
  • Tabelle | In Bere­ich kon­vertieren
  • Bestäti­gen und eventuell die Hin­ter­grund­farbe ent­fer­nen. A1 dann noch die Schrift­farbe auf schwarz set­zen.

Als erstes soll­ten Sie des späteren Fil­terns wegen in B1 eine beliebige Über­schrift ein­fü­gen. Und anschließend kommt in B2 die : 
=VERGLEICH(A2; Löschen!A2:A19500)
… und es kommt ein Ergeb­nis her­aus, welch­es kein Fehler­w­ert ist. Na gut, ziehen Sie nun die Formel ein­fach ein­mal bis B10 nach unten. OK, kein #Fehler! … Aber wonach soll dann gefiltert wer­den? Na gut, Ein­stieg in die Radikal-Kur. Bis Zeile 50 nach unten kopieren. Ah ja, jet­zt kom­men die ersten Fehler­mel­dun­gen. Vielle­icht kann ja das als Indika­tor herange­zo­gen wer­den? Nein, keineswegs. Sie wer­den die Diskrepanz rasch erken­nen, wenn Sie die Formel ganz nach unten, bis zur let­zten Daten­zeile kopieren. Das geht ganz gut per Dop­pelk­lick auf das Aus­fül­lkästchen. Ab Zeile 19501 kommt nur noch #NV. Ver­suchen Sie doch ein­fach ein­mal, dem Fehler auf die Spur zu kom­men!

Zugegeben, es sind mehrere Fehler in der Formel. Den einen soll­ten Sie erken­nen, wenn Sie die Formeln in den Zeilen 2 bis 4 ver­gle­ichen. Der Bezug auf den zu durch­suchen­den Bere­ich im Blatt Löschen ist rel­a­tiv und nicht abso­lut. Darum sind die ganzen unteren Ergeb­nisse auch #NV. Wenn Sie die Formel bere­its in B2 anpassen:  
=VERGLEICH(A2; Löschen!A$2:A$19500)
und dann nach unten kopieren, dann sieht das Ergeb­nis etwas anders aus. Einige Fehler­mel­dun­gen sind noch vorhan­den, aber längst nicht mehr in dem Aus­maß wie vorher. Aber es muss noch ein gravieren­der Fehler in der Formel sein. Der erste Wert, Zeile 3 müsste irgend­wie so gekennze­ich­net oder auswert­bar sein, dass die Zeile gelöscht wer­den soll.

Sie wer­den auf die Lösung kom­men, wenn Sie die VERGLEICH()-Formel ein­mal kon­se­quent analysieren. Es gibt noch einen drit­ten, wenn auch optionalen Para­me­ter. Und wenn Sie diesen auf 0 set­zen, dann wird nach genau dem zu ver­gle­ichen­den Wert gesucht. Hier noch ein­mal die neue Formel:
=VERGLEICH(A2; Löschen!A$2:A$19500; 0)
Bingo,alle zu löschen­den Zeilen sind mit einem Fehler­w­ert #NV verse­hen. Bleibt nur noch die „Kleinigkeit” diese Zeilen zu fil­tern und dann zu löschen. Kurz und knapp: Mit dem Aut­oFil­ter geht das nicht. Dazu bedarf es des Erweit­erten Fil­ters. Damit wer­den alle Zeilen mit dem bewussten Fehler­w­ert gefiltert. – Wollen Sie den­noch den Aut­oFil­ter ver­wen­den, dann bietet sich beispiel­sweise solch eine Formel an:
=ISTFEHLER(VERGLEICH(A2; Löschen!A$2:A$19500; 0))
wo ‑wie im ersten Beispiel- WAHR oder FALSCH zurück gegeben wird. Alter­na­tiv geht natür­lich auch ISTNV() als Funk­tion, denn es soll ja speziell dieser Fehler­typ abge­fragt wer­den.

Um nun möglichst kom­fort­a­bel die Daten­sätze zu löschen, gehen Sie so vor:

  • Klick­en Sie auf den Zeilenkopf von A3, welch­es ja die erste sicht­bare Zeile des Daten­bere­ichs ist. Jet­zt ist die kom­plette Zeile markiert.
  • Nun StrgShift. Automa­tisch wer­den alle Zeilen bis Zeile 50001 markiert
  • Recht­sklick und aus dem Kon­textmenü Zeile löschen anklick­en
  • Die Warn­mel­dung lesen, ver­ste­hen und bestäti­gen.

Nach mehr oder weniger kurz­er Wartezeit wer­den die Daten­sätze gelöscht sein. Anschließend den Fil­ter aus B1 aufheben und dann kon­trol­lieren, ob der unter­ste Daten­satz immer noch in Zeile 50.001 ste­ht. Das wird nicht der Fall sein, es ist die Zeile 30.282. Damit ist die Auf­gabe gelöst.

Hin­weis: Bei dieser Menge von Dat­en dauert die Berech­nung der Tabelle nach bei­den Meth­o­d­en ziem­lich lange. Meine Empfehlung: Schal­ten Sie ‑auf welchem Wege auch immer- die automa­tis­che Berech­nung auf Manuell. Das find­en Sie beispiel­sweise unter dem Menüpunkt Formeln | Berech­nung­sop­tio­nen. Immer wenn Sie wollen, das die Anzeige aktu­al­isiert wird, ein­fach F9 und die Berech­nung des kom­plet­ten Blattes wird durchge­führt.

[NachOben­Let­zte Verweis=„ML: Daten­ab­gle­ich (1)”]
Dieser Beitrag wurde unter Ohne Makro/VBA, Tabelle und Zelle abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.