Anzeige
Archiv - Navigation
1548to1552
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
Inhaltsverzeichnis

Vergleich über VBA von 2 Tabellen

Vergleich über VBA von 2 Tabellen
04.04.2017 11:19:36
2
Hallo liebes Forum,
ich bin schon seit mehreren Tagen auf der Suche, um ein Problem zu lösen. Jedoch finde ich immer nur Schnipsel die ich leider auf Grund mangelnder VBA Kenntnisse:( nicht vereinen kann. Ich hoffe ihr könnt mir da weiterhelfen.
Ich habe zwei eigentlich identische Tabellen (1 und 2).
In der zweiten Tabelle, kann es zu Aktualiesierungen kommen. Dementsprechend möchte ich gerne, dass die beiden Tabellen auf Unterschiede bzw. auf Übereinstimmungen verglichen werden.
1. Spalte B ID(Text und Zahl) vergleichen und falls "Neue" gefunden, komplette Zeile in Tabelle 3 kopieren
2. Es kann sein, dass die IDs übereinstimmen, aber in Spalte E der Text unterschiedlich ist. Diese würde ich dann gerne auch in Tabelle 3 kopieren und farblich markieren (Sowohl in Tabelle2 und 3)komplette Zeile!
Das ist es eigtl schon, aber ich scheiter leider dran!
Vielen Dank schon mal
VG
Fabs

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 11:32:00
2
Hallo fabs,
kannst Du bitte eine Mappe hochladen, damit wir sehen, wie die Daten strukturiert sind?
VG Anton
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 12:29:33
2
Hallo Anton,
danke für deine schnelle Antwort:)
Hab mal einen kleinen Ausschnitt erstellt. Dateien die verglichen werden sollen schwanken von der Zeilenanzahl.
Sollten noch iwelche Angaben fehlen, werde ich so schnell wie möglich antworten.
VG
Fabs
https://www.herber.de/bbs/user/112625.xlsx
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 12:31:25
2
Achso bei dem Text in Spalte E können auch Leerzeilen in begriffen sein sowie Zahlen und Formeln!
Anzeige
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 16:24:17
2
Hi Fabs,
danke für die Datei. Ich schaus mir heute Abend nach der Arbeit an.
VG Anton
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 19:11:23
2
Hallo Anton,
super :) Danke
AW: Vergleich über VBA von 2 Tabellen
04.04.2017 21:56:56
2
Hi Fabs,
hier mal meine Lösung:
Sub Vgl()
Dim rngZelle As Range
Dim rngZelleVgl As Range
Dim rngBereich As Range
Dim wksBlatt As Worksheet
Dim wksBlattVgl As Worksheet
Dim wksBlattZ As Worksheet
Dim x As Long
Dim z As Long
Dim s As Long
x = 2
s = 0
Set wksBlatt = ThisWorkbook.Worksheets("Tabelle1")
Set wksBlattVgl = ThisWorkbook.Worksheets("Tabelle2")
Set wksBlattZ = ThisWorkbook.Worksheets("Tabelle3")
With wksBlatt
.Range("A1:F1").Copy wksBlattZ.Range("A1")
Set rngBereich = .Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row)
wksBlattZ.Range("A2:F" & .Cells(.Rows.Count, 2).End(xlUp).Row).ClearContents
For Each rngZelle In rngBereich
Set rngZelleVgl = wksBlattVgl.Range(rngZelle.Address)
If rngZelleVgl.Value  rngZelle.Value Then
rngZelleVgl.EntireRow.Copy wksBlattZ.Range("A" & x)
x = x + 1
ElseIf rngZelleVgl.Value = rngZelle.Value And rngZelleVgl.Offset(0, 3).Value   _
rngZelle.Offset(0, 3).Value Then
For i = 1 To Len(rngZelleVgl.Offset(0, 3))
If Mid(rngZelleVgl.Offset(0, 3), i, 1)  Mid(rngZelle.Offset(0, 3), i, 1) Then
rngZelleVgl.Offset(0, 3).Characters(Start:=i, Length:=i).Font.Color = RGB( _
255, 0, 0)
End If
Next i
For z = Len(rngZelleVgl.Offset(0, 3)) To 1 Step -1
If Mid(rngZelleVgl.Offset(0, 3), z, 1) = Mid(rngZelle.Offset(0, 3), Len( _
rngZelle.Offset(0, 3)) - s, 1) Then
rngZelleVgl.Offset(0, 3).Characters(Start:=z, Length:=z).Font.Color = RGB(10, _
0, 0)
Else
GoTo sprung
End If
s = s + 1
Next z
sprung:
rngZelleVgl.EntireRow.Copy wksBlattZ.Range("A" & x)
x = x + 1
End If
s = 0
Next rngZelle
End With
End Sub
Ist jetzt nicht die eleganteste aber es funktioniert - zumindest bei mir :)
VG Anton
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 10:30:33
2
HAllo Anton,
klappt schon ganz gut. Leider kopiert er, nachdem er unterschiedliche Zellen festgestellt hat alle anderen die direkt darunter sind auch in Tabelle 3, obwohl diese keine Unterschiede aufweisen?!?
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 11:05:48
2
Hallo Fabs,
welche weiteren Zeilen? Bei mir wird in Deinem Beispiel die Zeile

FM_983	FM_5089	I….	val	sjhgfirhviebv	> komplett neu vorhanden
neben den Zeilen mit Textänderungen kopiert. Das liegt daran, dass er zusätzlich die Object ID Master Zeile für Zeile vergleicht. Zeile 9 weißt in beiden Tabellenblättern unterschiedliche Werte auf, daher wird Zeile 9 aus Tabelle2 in Tabelle3 kopiert.
Willst Du nur auf Textänderungen prüfen?
VG Anton
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 12:07:55
2
Hi Anton,
so soll es auch sein und so ist es korrekt. Jedoch kopiert er in meiner original Datei auch Zeilen die in Tabelle 1 und 2 komplett identisch sind.
1.Es werden die Zeilen kopiert die in B identisch und in E Unterschiede aufweisen:)
2.Es werden die Zeilen kopiert die neu in Tabelle 2 sind:)
3.In meiner Tabelle 2 (original) sind genau 4 neue Anforderungen die er auch kopiert, aber danach alle anderen auch die darunter sind und keinen Unterschied aufweisen. Bis auf die letzten vier der Tabelle 2 die dann unten in Tabelle 3 fehlen aber auch keine Unterschiede haben. Könnte es sein das sowas wie ein Abbruchkriterium fehlt oder er iwie begrenzt wird auf eine bestimmte Zeilenanzahl? Weil dann müssten ja eigtl die letzten 4 auch noch mit kopiert werden?
Hoffe ich konnte mich halbwegs ausdrücken :/
VG
Fabs
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 13:14:38
2
Hallo Fabs,
danke noch mal für die Erklärung. Ich kann es leider nicht ganz nachvollziehen. Hier mal ein Screenshot, was bei mir in Tabelle3 kopiert wird, wenn ich das Makro ausführe:
Userbild
Das sind doch genau die unterschiedlichen Zeilen, oder?
VG Anton
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 14:32:17
2
Hi Anton,
ja so ist es auch exakt. Jetzt weiss ich glaube was du meinst. War nicht ganz korrekt von mir in der Mustertabelle mit usw dargestellt. Mit usw war nicht gemeint, dass danach nur noch neue Einträge kommen die in Tabelle 3 übertragen werden sollen. So ist es jetzt im original, obwohl keine Unterschiede vorhanden sind. Sondern mit usw, war gemeint das es wie bei den darüber liegenden Zeilen wieder zur Unterscheidung kommen soll. Habe nochmal die Mustertabelle hochgeladen an der es glaube ersichtlich wird.
Wenn es nicht zu große Umstände bereitet, könntest du im Code Kommentare einfügen, damit ich versuchen kann, nachzuvollziehen was dort passiert.
https://www.herber.de/bbs/user/112662.xlsx
VG
Fabs
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 15:53:10
2
Hallo Fabs,
danke für die Datei. Die gelb markierte Zelle ist in Tabelle1 nicht vorhanden:
Userbild
Dadurch das die Schleife die Werte der gleichen Zelladressen vergleicht, und hier eine Zeile eingeschoben ist, verschieben sich die Zelladressen und somit sind alle Werte unterschiedlich. D.h., die Tabelle muss genau gleich aufgebaut sein.
VG Anton
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 16:19:44
2
Und das kann man nicht iwie umgehen? Vllt das man zuerst ein Code durchlaufen lässt der nur nach den Unterschieden sucht und dann einen der die Fehlenden sucht? Hast Du vllt noch eine andere Idee wie man das umsetzen kann?
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 16:54:30
2
Hallo Fabs,
spontan fallen mir zwei Sachen ein:
- Du fügst an der Stelle eine neue Zeile ein, damit die zwei Tabellen die gleiche Länge haben
- Die ID ist für jeden Satz unterschiedlich? Dann könnte man in dem Bereich nach diesem Wert mit Countif suchen. Wenn dieser Wert nicht vorhanden ist, dann überspringe die Zeile.
Mehr fällt mir dazu grad nicht ein. Vielleicht hat jemand anders noch eine einfachere Lösung.
VG Anton
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 17:24:46
2
Hi Anton,
Danke für deine Vorschläge!
Mit "an der Stelle" meinst du nicht nur, dass ich quasi am Ende der Tabelle1 vier neue Zellen einfügen muss, damit die Tabellen identisch lang sind oder?
Ja, es ist so, dass jede Zeile eine neue ID hat. Wiederholen tun sie sich nicht, aber sie sind durcheinander gewürfelt. Den zweiten Teil verstehe ich nicht ganz, wie du das meinst:/
Hat hier im Forum vllt noch jemand einen anderen Lösungsvorschlag für das Problem?
VG
Fabs
Anzeige
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 17:42:49
2
Hi Fabs,
Zeile 9 von Tabelle2 müsste auch als Zeile 9 in Tabelle1 eingefügt werden. Du sagst, Tabelle2 ist Deine Quelle, oder? Dann muss ich das Makro noch mal umstrukturieren. Ich überlege mir noch mal was, weiß aber nicht, ob ich das heute noch schaffe.
Aber andere Hilfe ist gern gesehen :)
VG Anton
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 18:30:21
2
Hi Anton,
ich kann nur immer wieder Danke sagen:)
Also Tabelle2 ist immer diejenige die aktualisiert wird. Auch mitten drin!
VG
Fabs
AW: Vergleich über VBA von 2 Tabellen
05.04.2017 23:32:21
2
Hi Fabs,
habs jetzt noch mal etwas umgeschrieben:
Sub Vgl()
Dim lngZMax As Long
Dim rngBereichId As Range
Dim wksBlatt As Worksheet
Dim wksBlattVgl As Worksheet
Dim wksBlattZ As Worksheet
Dim s As Long
Dim x As Long
Dim y As Long
Dim z As Long
x = 2
s = 0
Set wksBlatt = ThisWorkbook.Worksheets("Tabelle2")
Set wksBlattVgl = ThisWorkbook.Worksheets("Tabelle1")
Set wksBlattZ = ThisWorkbook.Worksheets("Tabelle3")
With wksBlatt
.Range("A1:F1").Copy wksBlattZ.Range("A1")
lngZMax = .Cells(.Rows.Count, 2).End(xlUp).Row
Set rngBereichId = wksBlattVgl.Range("A2:a" & wksBlattVgl.Cells(.Rows.Count, 1).End(xlUp). _
Row)
wksBlattZ.Range("A2:F" & .Cells(.Rows.Count, 2).End(xlUp).Row).ClearContents
For w = 2 To lngZMax
If Application.WorksheetFunction.CountIf(rngBereichId, wksBlatt.Cells(w, 1)) = 0 Then
wksBlattVgl.Cells(w, 1).EntireRow.Insert
ElseIf wksBlattVgl.Cells(w, 2).Value  .Cells(w, 2).Value Then
.Cells(w, 2).EntireRow.Copy wksBlattZ.Cells(x, 1)
x = x + 1
ElseIf wksBlattVgl.Cells(w, 2).Value = .Cells(w, 2).Value And wksBlattVgl.Cells(w, 5). _
Value  .Cells(w, 5).Value Then
For i = 1 To Len(.Cells(w, 5))
If Mid(wksBlattVgl.Cells(w, 5), i, 1)  Mid(.Cells(w, 5), i, 1) Then
.Cells(w, 5).Characters(Start:=i, Length:=i).Font.Color = RGB(255, 0, 0)
End If
Next i
For z = Len(.Cells(w, 5)) To 1 Step -1
If Mid(.Cells(w, 5), z, 1) = Mid(wksBlattVgl.Cells(w, 5), Len(wksBlattVgl.Cells( _
w, 5)) - s, 1) Then
.Cells(w, 5).Characters(Start:=z, Length:=z).Font.Color = RGB(10, 0, 0)
Else
GoTo sprung
End If
s = s + 1
Next z
sprung:
.Cells(w, 5).EntireRow.Copy wksBlattZ.Range("A" & x)
x = x + 1
End If
s = 0
Next w
End With
With wksBlattVgl
For y = .Cells(.Rows.Count, 2).End(xlUp).Row To 1 Step -1
If IsEmpty(.Cells(y, 1).Value) Then
.Cells(y, 1).EntireRow.Delete
End If
Next y
End With
End Sub
Funktinoiert es jetzt?
VG Anton
Anzeige
AW: Vergleich über VBA von 2 Tabellen
06.04.2017 08:17:00
2
Guten Morgen Anton,
Danke das du dich gestern nochmal dran gesetzt hast. Leider kopiert er jetzt nur noch die Zeilen in welchen Unterschiede auftreten und nicht mehr die, die komplett neu sind! Oder war das die Absicht und ich lass ein zweites Makro drüber laufen?
VG
Fabs
AW: Vergleich über VBA von 2 Tabellen
06.04.2017 09:28:04
2
Guten Morgen Fabs,
ok, das kriegen wir schon noch hin. Hier noch mal ein Vorschlag:
Sub Vgl()
Dim lngZMax As Long
Dim rngBereichId As Range
Dim wksBlatt As Worksheet
Dim wksBlattVgl As Worksheet
Dim wksBlattZ As Worksheet
Dim s As Long
Dim x As Long
Dim y As Long
Dim z As Long
x = 2
s = 0
Set wksBlatt = ThisWorkbook.Worksheets("Tabelle2")
Set wksBlattVgl = ThisWorkbook.Worksheets("Tabelle1")
Set wksBlattZ = ThisWorkbook.Worksheets("Tabelle3")
With wksBlatt
.Range("A1:F1").Copy wksBlattZ.Range("A1")
lngZMax = .Cells(.Rows.Count, 2).End(xlUp).Row
Set rngBereichId = wksBlattVgl.Range("A2:a" & wksBlattVgl.Cells(.Rows.Count, 1).End(xlUp). _
Row)
wksBlattZ.Range("A2:F" & .Cells(.Rows.Count, 2).End(xlUp).Row).ClearContents
For w = 2 To lngZMax
If Application.WorksheetFunction.CountIf(rngBereichId, wksBlatt.Cells(w, 1)) = 0 Then
wksBlattVgl.Cells(w, 1).EntireRow.Insert
.Cells(w, 2).EntireRow.Copy wksBlattZ.Cells(x, 1)
x = x + 1
ElseIf wksBlattVgl.Cells(w, 2).Value  .Cells(w, 2).Value Then
.Cells(w, 2).EntireRow.Copy wksBlattZ.Cells(x, 1)
x = x + 1
ElseIf wksBlattVgl.Cells(w, 2).Value = .Cells(w, 2).Value And wksBlattVgl.Cells(w, 5). _
Value  .Cells(w, 5).Value Then
For i = 1 To Len(.Cells(w, 5))
If Mid(wksBlattVgl.Cells(w, 5), i, 1)  Mid(.Cells(w, 5), i, 1) Then
.Cells(w, 5).Characters(Start:=i, Length:=i).Font.Color = RGB(255, 0, 0)
End If
Next i
For z = Len(.Cells(w, 5)) To 1 Step -1
If Mid(.Cells(w, 5), z, 1) = Mid(wksBlattVgl.Cells(w, 5), Len(wksBlattVgl. _
Cells(w, 5)) - s, 1) Then
.Cells(w, 5).Characters(Start:=z, Length:=z).Font.Color = RGB(10, 0, 0)
Else
GoTo sprung
End If
s = s + 1
Next z
sprung:
.Cells(w, 5).EntireRow.Copy wksBlattZ.Range("A" & x)
x = x + 1
End If
s = 0
Next w
End With
With wksBlattVgl
For y = .Cells(.Rows.Count, 2).End(xlUp).Row To 1 Step -1
If IsEmpty(.Cells(y, 1).Value) Then
.Cells(y, 1).EntireRow.Delete
End If
Next y
End With
End Sub
VG Anton
Anzeige
AW: Vergleich über VBA von 2 Tabellen
06.04.2017 10:04:42
2
Hallo Anton,
super gut jetzt funktioniert es wie gewollt :D
Vielen Danke für deine Mühe.
VG
Fabs
Perfekt & danke für die Rückmeldung! owT
06.04.2017 10:07:34
Anton2
.
AW: Vergleich über VBA von 2 Tabellen
06.04.2017 15:19:56
2
Hallo Anton ich bins nochmal! Hab doch noch ein Problem:/
Siehe angehängte Datei.https://www.herber.de/bbs/user/112700.xlsm
In Tabelle1 kommt die FM_2373 nicht vor und in Tabelle3 wird ab dieser Zeile alles nachfolgende kopiert?
Können wir der Sache vllt nochmal auf den Grund gehen? Habe den halben Tag versucht das iwie selber zu lösen aber ich verzweifle dran! Vllt kannst du mir in diesem Zuge doch noch Kommentare an den Code hängen damit ich verstehen kann, wie der Code arbeitet!
Viele Grüße
Fabs
AW: Vergleich über VBA von 2 Tabellen
06.04.2017 23:25:53
2
Hi Fabs,
klaro, schau ich mir morgen noch mal an.
VG Anton

196 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige