Supportnet / Forum / Tabellenkalkulation
Vergleich zweier Excel-Tabellen
Frage
Hallo zusammen.
Ich möchte gerne zwei Excel-Tabellen miteinander vergleichen anahnd der dort hinterlegten Namen und Adressen.
Als Ergebnis hätte ich gern eine Auflistung der Datensätze, die nicht in beiden Tabellen vorkommen.
Wie könnte ich dies wohl am besten hinbekommen?
Antwort 1 von pelle
Hallo poorfirele,
mit diesen etwas wenigen Angaben ist dies nicht so einfach!
Was heisst nicht in beiden Tabellen vorkommen (Vergleichskriterien?)
Wenn Du ein eindeutiges (nicht mehrfach vorkommenden)Vergleichsfeld hast,
könnte Dir evtl. die SVERWEIS-Funktion weiterhelfen.
Alternativ wäre zu überleen, die Tabellen in Access zu importieren und
über 2 Verknüpfungsfragen abzugleichen.
Aber wie gesagt, man braucht ein paar Infos mehr!
gruss
pelle
Ps.: Kannst ja mal Beipsieltabellen schicken!
mit diesen etwas wenigen Angaben ist dies nicht so einfach!
Was heisst nicht in beiden Tabellen vorkommen (Vergleichskriterien?)
Wenn Du ein eindeutiges (nicht mehrfach vorkommenden)Vergleichsfeld hast,
könnte Dir evtl. die SVERWEIS-Funktion weiterhelfen.
Alternativ wäre zu überleen, die Tabellen in Access zu importieren und
über 2 Verknüpfungsfragen abzugleichen.
Aber wie gesagt, man braucht ein paar Infos mehr!
gruss
pelle
Ps.: Kannst ja mal Beipsieltabellen schicken!
Antwort 2 von Koebi
Grüezi
Mit diesem Code soll das funktionieren.
Der Code ist nicht von mir. Deshalb besteht auch die Chance, dass er funktioniert.:-)
Gruss
Köbi
Mit diesem Code soll das funktionieren.
Sub doppelte_Daten_suchen()
' Vergleicht Tabelle 2 mit Tablle 1 und schreibt Werte
' aus Tabelle 2, die in Tabelle 1 nicht vorkammen in Tabelle 3
Dim verg1(500), verg2(500), dopp%(500), num(500)
' Tabelle 1 einlesen
Worksheets("Tabelle1").Activate
y = 2
Do While Cells(y, 1) <> ""
verg1(y) = Cells(y, 2)
y = y + 1
Loop
' Tabelle 2 einlesen
Worksheets("Tabelle2").Activate
z = 2
Do While Cells(z, 1) <> ""
num(z) = Cells(z, 1)
verg2(z) = Cells(z, 2)
z = z + 1
Loop
For r = 2 To y - 1
For s = 2 To z - 1
If r = s Then s = s + 1
If verg1(r) = verg2(s) Then 'And dopp(s) = 0
dopp(s) = 1
Cells(s, 3) = "gleich"
End If
Next s
Next r
' In Tabelle 3 schreiben
Worksheets("Tabelle3").Activate
zz = 1
For u = 1 To z - 1
If dopp(u) = 0 Then
Cells(zz, 1) = num(u)
Cells(zz, 2) = verg2(u)
zz = zz + 1
End If
Next u
End Sub
Der Code ist nicht von mir. Deshalb besteht auch die Chance, dass er funktioniert.:-)
Gruss
Köbi
Antwort 3 von want2cu
hallo poorfirele,
du könntest das z.B so lösen, dass du ein Hilfsspalte in jede tabelle einfügst, damit man nachher noch auseinanderhalten kann, aus welcher Quelltabelle die datensätze kommen.
Dann packst du alle datensätze in eine Tabelle und sortierst den Krempel nach Nachname, Vorname etc.
In eine Hilfsspalte fügst du dann eine Funktion ein, die z.B. den Inhalt des namensfeldes mit dem darüber stehenden Eintrag vergleicht und dann bei UNgleichheit z.B. den Text "UNGLEICH" ausgibt. Dann per Autofilter diese Datensätze ausfiltern und dann hast du das von dir gewünschte Ergebnis.
So, es gibt vielleicht was supereleganteres aber so hat es zumindest bei geklappt bei ca. 5000 Datensätzen. Wenn es erheblich mehr sein sollten, dann wird es wohl nur über Access gehen.
Wenn du nicht klar kommst, dann poste bitte noch mal.
CU
Klaus
du könntest das z.B so lösen, dass du ein Hilfsspalte in jede tabelle einfügst, damit man nachher noch auseinanderhalten kann, aus welcher Quelltabelle die datensätze kommen.
Dann packst du alle datensätze in eine Tabelle und sortierst den Krempel nach Nachname, Vorname etc.
In eine Hilfsspalte fügst du dann eine Funktion ein, die z.B. den Inhalt des namensfeldes mit dem darüber stehenden Eintrag vergleicht und dann bei UNgleichheit z.B. den Text "UNGLEICH" ausgibt. Dann per Autofilter diese Datensätze ausfiltern und dann hast du das von dir gewünschte Ergebnis.
So, es gibt vielleicht was supereleganteres aber so hat es zumindest bei geklappt bei ca. 5000 Datensätzen. Wenn es erheblich mehr sein sollten, dann wird es wohl nur über Access gehen.
Wenn du nicht klar kommst, dann poste bitte noch mal.
CU
Klaus
Antwort 4 von Teddy7
Hallo poorfirele !
Der code von Köbi schein schon o.k. zu sein, aber für größere datenmengen läuft das Makro ziemlich lange (Das reicht für eine ganze Kanne Kaffee oder auch zwei).
Die Lösung von Klaus hat auch was, aber sonderlich elegant ist das nicht.
Man könnte ein Makro schreiben das das schöner hinbekommt, aber dazu muß man wissen, wie die Tabellen aufgebaut sind und vor allem welche Felder geprüft werden müssen um ein "vorhanden" feststellen zu können.
Das kann ja nicht nur der Nachname sein.
In dem Makro wird man dann beide Originaltabellen aufsteigend sortieren, damit man bei einem Treffer weiß, daß man bei der nächsten Suche mit dieser Zeile beginnen kann - das spart unglaublich viel Zeit.
Wenn Du sowas haben willst, dann poste mal ein paar Details.
Gruß
Teddy
Der code von Köbi schein schon o.k. zu sein, aber für größere datenmengen läuft das Makro ziemlich lange (Das reicht für eine ganze Kanne Kaffee oder auch zwei).
Die Lösung von Klaus hat auch was, aber sonderlich elegant ist das nicht.
Man könnte ein Makro schreiben das das schöner hinbekommt, aber dazu muß man wissen, wie die Tabellen aufgebaut sind und vor allem welche Felder geprüft werden müssen um ein "vorhanden" feststellen zu können.
Das kann ja nicht nur der Nachname sein.
In dem Makro wird man dann beide Originaltabellen aufsteigend sortieren, damit man bei einem Treffer weiß, daß man bei der nächsten Suche mit dieser Zeile beginnen kann - das spart unglaublich viel Zeit.
Wenn Du sowas haben willst, dann poste mal ein paar Details.
Gruß
Teddy
Antwort 5 von poorfirele
danke für die tipps
@köbi
dein code hat super funktioniert. habe den befehl in der mittagspause gestartet und als ich zurück kam, voila!
@want2cu
deine idee war auch nicht schlecht, aber für meinen fall nicht anwendbar, da die datenmenge zu groß war und ich irgendwie nicht richtig damit zurecht kam. aber dennoch danke für den tipp!
vielen dank noch mal an alle!
@köbi
dein code hat super funktioniert. habe den befehl in der mittagspause gestartet und als ich zurück kam, voila!
@want2cu
deine idee war auch nicht schlecht, aber für meinen fall nicht anwendbar, da die datenmenge zu groß war und ich irgendwie nicht richtig damit zurecht kam. aber dennoch danke für den tipp!
vielen dank noch mal an alle!
Antwort 6 von poorfirele
ich habe das makro von köbi (s.o.) heute mal in excel 87 ausprobiert und ich bekomme die fehlermeldung:
Fehler beim Kompilieren
End Sub erwartet
was bedeutet dies und was muß ich ändern, damit das makro unter excel 97 funktioniert?
Fehler beim Kompilieren
End Sub erwartet
was bedeutet dies und was muß ich ändern, damit das makro unter excel 97 funktioniert?
Antwort 7 von poorfirele
und hoch damit.
Weiß niemand was diese Fehlermeldung bedeutet?
Weiß niemand was diese Fehlermeldung bedeutet?
Antwort 8 von sicci
Hallo poorfirele,
.. sie bedeutet genau, was sie sagt: VBA erwartet am Ende eines Makros als letzte Zeile "End Sub". Schau mal ins Makro rein: hast es sicher nicht mitkopiert, in Köbis ist's nämlich drin.
Gruß
sicci
.. sie bedeutet genau, was sie sagt: VBA erwartet am Ende eines Makros als letzte Zeile "End Sub". Schau mal ins Makro rein: hast es sicher nicht mitkopiert, in Köbis ist's nämlich drin.
Gruß
sicci

