Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
612to616
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
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenabgleich mittels VBA

Datenabgleich mittels VBA
25.05.2005 08:56:43
M. Usalis
Hallo Excel-Freunde,
ich habe zwei Excel-Dateien, die ich gerne miteinander vergleichen möchte. Eine Datei hat sehr vielen Tabellenblättern. Den Inhalt dieser Tabellenblätter möchte ich regelmäßig mit Daten in einer Spalte einer anderen Datei abgleichen. Daten, die in der Vergleichsdatei nicht vorhanden sind, sollen in der Ausgangsdatei farbig markiert werden.
Mit konventionellen Excel-Mitteln komme ich nicht weiter und hoffe, dass mir jemand einen VBA-Code liefern kann.
Gruß
M. Usalis

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 09:31:40
Fritz
Hi M.Usalis,
Da Du für Dein Problem ein VBA-Code benötigst, muß der natürlich auf Deine Bedingungen abgeändert werden. Stell am besten gleich eine bzw. 2 Beispielarbeitsmappen in Forum, damit die entsprechende Anpassung sofort erfolgen kann.
In der Recherche in diesem Forum gibt es übrigens einige Beispiel zur Lösung Deines Problems!

Fritz
AW: Datenabgleich mittels VBA
25.05.2005 10:06:40
M. Usalis
Hallo,
danke für den Hinweis, hier sind zwei Beispieldateien. In den Ausgangsdaten sollen die nicht gefundenen Daten farbig formatiert werden. Evtl. könnten auch die nicht vorhandenen Daten in die nächste leere Spalte der Vergleichdaten eingefügt werden. Das ganze sollte auch dann funktionieren, wenn die Daten nicht exakt übereinstimmen, sondern wenn in den Vergleichsdaten noch ein "XX" vor oder hinter den Daten steht.
Ausgangsdaten: https://www.herber.de/bbs/user/23193.xls
Vergleichdaten:

Die Datei https://www.herber.de/bbs/user/23194.xls wurde aus Datenschutzgründen gelöscht

Gruß
M. Usalis
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 11:32:47
Fritz
Hi M.Usalis,
Rückfragen:
1.) Welches ist die Ausgangsdatei und welches die Vergleichsdatei?
(Ausgangsdatei = Mappe mit Tabellenblatt "Liste"?)
2.) Die Daten, die verglichen werden, können nur einmal oder mehrmals in den Tabellenblättern vorkommen?
3.) In welcher Form sollen nicht gefundene Daten in einer freien Spalte eingetragen werden? (z.B. Datum des Vergleichs und Nr.?!)
Fritz
AW: Datenabgleich mittels VBA
25.05.2005 11:55:03
M. Usalis
Hi,
hier meine Antworten:
ES SOLL GEPRÜFT WERDEN, OB DATEN AUS DEN TABELLENBLÄTTER "M 20", "M 21" USW. SCHON IN DER MAPPE MIT DEM TABELLENBLATT "LISTE" VORHANDEN SIND. FALLS DIES NICHT DER FALL IST, SOLLEN DIESE DATEN AUS "M 20" USW. KOPIERT WERDEN UND IM TABELLENBLATT "LISTE" IN DER SPALTE MIT DEN VERGLEICHSDATEN IN DIE NÄCHSTE FREIE ZEILE EINGETRAGEN WERDEN. DABEI KÖNNEN DATEN IN DEN TABELLENBLÄTTER "M 20", "M 21" USW. AUCH MEHRFACH VORKOMMEN.
Ich hoffe, das sind alle benötigten Angaben und freue mich auf den VBA-Code.
Gruß
M. Usalis
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 14:01:31
Fritz
Hi M.Usalis,
Die gesuchten Begriffe(Artikel-Nr.?) können nach Deiner Darstellung in verschiedenen Spalten des jeweiligen Tabellenblattes stehen. Welche Daten sollen dann konkret kopiert werden, wenn die Nr. nicht gefunden wurde? Die Daten rechts oder links von der entsprechenden Zelle, die ganze Zeile ...?

Was soll kopiert werden, wenn diese Aussage zutrifft?
DABEI KÖNNEN DATEN IN DEN TABELLENBLÄTTER "M 20", "M 21" USW. AUCH MEHRFACH VORKOMMEN.
Du siehst, das einige Antworten noch ausstehen, bevor ein konkreter VBA-Code für die Lösung Deines Problems erstellt werden kann.
Fritz
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 14:15:28
M. Usalis
Hi Fritz,
kopiert werden soll nur der Inhalt der aktuellen Zelle, für die keine Übereinstimmung mit dem Blatt "Liste" gefunden werden konnte (das Kopieren der links oder rechts daneben liegenden Zelle wäre evtl. eine Option, die nicht unbedingt sein muss). Ich stelle mir die Prüfung so vor, dass sie spaltenweise erfolgt. In einer Spalte sollte ein Wert auch nur einmal vorkommen. Wenn der Wert in der nächsten Spalte erneut auftaucht, sollte er im Blatt "Liste" gefunden werden, da er ja vorher dorthin kopiert wurde.
Es reicht übrigens aus, wenn das Makro ein Tabellenblatt (z.B. "M 20") prüft. Beim nächsten Tabellenblatt könnte man das Makro ja dann neu starten, das wäre kein Problem.
Gruß
M. Usalis
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 18:59:58
IngGi
Hallo M. Usalis,
folgendes Makro geht davon aus, das deine Vergleichsdaten in Spalte A stehen. Es geht auch davon aus, dass bei den Ausgangsdaten, wenn vorne oder hinten noch ein "XX" steht, kein Leerzeichen zwischen "XX" und dem eigentlichen Inhalt (entsprechend Datei "Vergleichsdaten") steht. Den Dateinamen der Ausgangsdaten mußt du noch anpassen. Das Makro übernimmt bei nicht gefundenen Daten diese (ohne "XX") in die Liste in Vergleichsdaten und markiert außerdem die Zelle in Ausgangsdaten farbig.

Sub Datenabgleich()
Dim rng As Range, wks As Worksheet
For Each wks In Workbooks("Ausgangsdaten.xls").Worksheets 'Dateinamen anpassen
For Each rng In wks.UsedRange
If IsEmpty(rng) = False Then
'Prüfung mit Vergleichsdaten ohne "XX"
If ThisWorkbook.Worksheets("Liste").Columns("A:A") _
.Find(what:=rng, lookat:=xlWhole) Is Nothing Then
'wenn nicht gefunden, in Datei "Vergleichsdaten.xls" kopieren ...
rng.Copy Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
'... und in Datei "Ausgangsdaten.xls" farbig markieren
rng.Interior.ColorIndex = 22
'Prüfung mit Vergleichsdaten mit "XX" vorne
ElseIf ThisWorkbook.Worksheets("Liste").Columns("A:A") _
.Find(what:=Right(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing Then
'wenn nicht gefunden, in Datei "Vergleichsdaten.xls" kopieren ...
Right(rng, Len(rng) - 2).Copy Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
'... und in Datei "Ausgangsdaten.xls" farbig markieren
rng.Interior.ColorIndex = 22
'Prüfung mit Vergleichsdaten mit "XX" hinten
ElseIf ThisWorkbook.Worksheets("Liste").Columns("A:A") _
.Find(what:=Left(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing Then
'wenn nicht gefunden, in Datei "Vergleichsdaten.xls" kopieren ...
Left(rng, Len(rng) - 2).Copy Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
'... und in Datei "Ausgangsdaten.xls" farbig markieren
rng.Interior.ColorIndex = 22
End If
End If
Next rng 'nächste Zelle
Next wks 'nächstes Tabellenblatt
End Sub

Gruß Ingolf
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 21:18:19
IngGi
Hallo M. Usalis,
vergiß das erste Makro von mir. Da steckt ein Denkfehler drin. Ich hab's nachfolgend nochmal korrigiert. Es gelten aber auch hier dieselben Voraussetzungen, wie für meinen ersten Versuch.

Sub Datenabgleich()
Dim rng As Range, wks As Worksheet
For Each wks In Workbooks("Ausgangsdaten.xls").Worksheets 'Dateinamen anpassen
For Each rng In wks.UsedRange
If IsEmpty(rng) = False Then
With ThisWorkbook.Worksheets("Liste").Columns("A:A")
If .Find(what:=rng, lookat:=xlWhole) Is Nothing And _
.Find(what:=Right(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing And _
.Find(what:=Left(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing Then
If .Find(what:=rng, lookat:=xlWhole) Is Nothing Then
rng.Copy Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
If .Find(what:=Right(rng, Len(rng) - 2), lookat:=xlWhole) _
Is Nothing Then
Right(rng, Len(rng) - 2).Copy _
Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
If .Find(what:=Left(rng, Len(rng) - 2), lookat:=xlWhole) _
Is Nothing Then
Left(rng, Len(rng) - 2).Copy _
Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
rng.Interior.ColorIndex = 22
End If
End If
Next rng 'nächste Zelle
Next wks 'nächstes Tabellenblatt
End Sub

Gruß Ingolf
Anzeige
AW: Datenabgleich mittels VBA
25.05.2005 21:23:01
IngGi
Hallo M. Usalis,
Katastrophe, muß leider noch ein zweites Mal korrigieren:

Sub Datenabgleich()
Dim rng As Range, wks As Worksheet
For Each wks In Workbooks("Ausgangsdaten.xls").Worksheets 'Dateinamen anpassen
For Each rng In wks.UsedRange
If IsEmpty(rng) = False Then
With ThisWorkbook.Worksheets("Liste").Columns("A:A")
If .Find(what:=rng, lookat:=xlWhole) Is Nothing And _
.Find(what:=Right(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing And _
.Find(what:=Left(rng, Len(rng) - 2), lookat:=xlWhole) Is Nothing Then
If .Find(what:=rng, lookat:=xlWhole) Is Nothing Then
rng.Copy Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
If .Find(what:=Right(rng, Len(rng) - 2), lookat:=xlWhole) _
Is Nothing Then
Right(rng, Len(rng) - 2).Copy _
Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
If .Find(what:=Left(rng, Len(rng) - 2), lookat:=xlWhole) _
Is Nothing Then
Left(rng, Len(rng) - 2).Copy _
Destination:=ThisWorkbook.Worksheets("Liste") _
.Range("A65536").End(xlUp).Offset(1, 0)
End If
rng.Interior.ColorIndex = 22
End With
End If
Next rng 'nächste Zelle
Next wks 'nächstes Tabellenblatt
End Sub

Gruß Ingolf
Anzeige
AW: Datenabgleich mittels VBA
27.05.2005 09:19:48
M. Usalis
Hi IngGi,
leider funktioniert es nicht. Er gibt mir immer einen Fehler beim Kompilieren (End With ohne With) aus.
Das Blatt "LIste" ist übrigens in einer anderen Datei, ist das beim Makro berücksichtigt?
Gruß
Markus
AW: Datenabgleich mittels VBA
27.05.2005 10:22:20
Fritz
Hi M.Usalis,
Anbei habe ich mal eine Lösung zur farblichen Hervorhebung der Daten in den Vergleichsmappen.
Ausgangspunkt ist hierbei:
1.) Arbeismappen "Ausgang.xls" und "Vergleich.xls" sind geöffnet
2.) Makro wird über Schaltfläche "vergleichen" im Tabellenblatt "Liste" gestartet
3.) Es werden in allen Tabellenblättern der Mappe "Vergleich" die gefundenen Nr. farblich hervorgehoben
Diese Lösung ist aber nur für ein Teil Deines Problem. Für die Übertragung der Daten, die nicht farblich gekennzeichnet wurden soll ja eine Übernahme in das Tabellenblatt "Liste" erfolgen.
Dazu ist es notwendig, genau festzulegen, welche Nummern das sind!
Der Aufbau der Nummern muß als Suchschlüssel herangezogen werden. Sind die Nummern immer nach dem gleichem Prinzip aufgebaut.
z.B. 2 Buchstaben zu Beginn und dann 3 Ziffern: OP388
maximal 5 Stellen?
https://www.herber.de/bbs/user/23285.zip

Fritz
Anzeige
AW: Datenabgleich mittels VBA
27.05.2005 13:44:27
M. Usalis
Hi Fritz,
danke erst einmal für diesen Code, er funktioniert schon ganz gut. Die zu kopierenden Daten folgen leider keinem konkreten Schema. Am Besten wird der gesamte Zellinhalt kopiert und in das Blat "Liste" eingefügt. Geht das?
Gruß
M. Usalis
AW: Datenabgleich mittels VBA
27.05.2005 14:52:00
Fritz
Hi M.Osalis,
Natürlich geht das! Dann mußt Du natürlich manuell anschließend überprüfen, welche Daten dort hingehören und welche nicht!
Es wäre zu überlegen, ob diese Vorgehensweise Sinn macht!?
Wie würdest Du es denn manuell machen? Da hast Du doch auch Suchkriterien oder wonach gehst Du dabei vor?

Fritz
AW: Datenabgleich mittels VBA
27.05.2005 15:30:17
M. Usalis
Hi,
manuell ist der Ableich sehr schwierig. Wenn ich die Daten aber einmal in "Liste" habe, dann kann ich diese sortieren und über eine einfache Formel die doppelten Daten kennzeichnen. So habe ich es mir zumindest gedacht.
Übrigens: Wenn die Daten farblich gekennzeichnet werden, die schon in "Liste" vorhanden sind, wäre es hilfreich, wenn alle Übereinstimmungen und nicht nur die erste erkennbar wäre. Meine Aussage, dass die Daten nur beim ersten Vorkommen gekennzeichnet werden sollen, bezog sich darauf, dass die Daten, die NOCH NICHT in "Liste" existieren, farblich gekennzeichnet werden.
Gruß
M. Usalis
Anzeige
AW: Datenabgleich mittels VBA
29.05.2005 08:56:58
Hajo_Zi
Hallo Usalis,
ich habe jetzt nicht den gesamten Beitrag gelesen. Aber Wie folgt kennzeichnest Du jeden Wert ab dem 2. mal vorkommen.
AW: Datenabgleich mittels VBA
30.05.2005 08:17:56
M. Usalis
Hallo,
noch ist mein Problem nicht endgültig gelöst. Wer hilft mir weiter?
Gruß
M. Usalis
AW: Datenabgleich mittels VBA
30.05.2005 08:33:59
Hajo_Zi
Hallo Usalis,
was ist noch offen?
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
AW: Datenabgleich mittels VBA
30.05.2005 14:30:35
M. Usalis
Hallo!
Das Makro von Fritz ist zwar nicht schlecht, aber es fehlt die Übertragung der nicht gefundenen Daten auf das andere Tabellenblatt (s. außerdem meine Anmerkungen zum Makro vom 27.05.2005 im Forum)
Gruß
M. Usalis

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige