Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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

Spaltenvergleich über 2 Tabellenblätter

Spaltenvergleich über 2 Tabellenblätter
27.05.2020 10:11:09
Nime
Liebe Excel-Anwender,
ich habe eine Excel-Datei, die aus 3 Arbeitsblättern besteht. In meiner angehängten Excel-Datei habe ich drei Arbeitsblätter.
Einmal das Arbeitsblatt "Datenquelle", dann das Arbeitsblatt "Datenunterschied" und das Arbeitsblatt "Daten".
Alle drei Arbeitsblätter enthalten identische Spaltenbeschriftungen und -inhalte. Mein Ziel ist es, die Unterschiede zwischen Arbeitsblatt "Datenquelle" und "Daten" in das Arbeitsblatt "Datenunterschied" via ein VBA Makro zu übertragen.
Ausgangspunkt ist die Spalte Identifier - die Identifikationsnummer - der Daten.
In meinem Beispiel sieht man, dass im Arbeitsblatt "Daten" 4 Datensätze mit folgenden Identifikationsnummern aufgelistet sind:
6257 - 6258 - 6259 - 6260
Im Arbeitsblatt "Datenquelle" sind 6 Datensätze mit folgenden Identifikationsnummern aufgelistet:
6257 - 6258 - 6259 - 6260 - 6261 - 6268
Das Ziel wäre jetzt, falls im Arbeitsblatt "Daten" ein Datensatz nicht in der Datenquelle vorkommt, soll dies in das Arbeitsblatt "Datenunterschied" mit einem Makro geschrieben werden. In diesem Beispiel wären das die Datensätze "6261" & "6268". Hierbei sollen dann die ganze Zeile von Datensatz 6261 & 6268 in das Tabellenblatt "Datenunterschied" übertragen werden.
Hierfür hatte ich folgende Code ausprobiert, der aber nicht das gewünschte Ergebnis lieferte:
Sub Unterschied()
Dim CompareRange As Object, x As Object, y As Object
Dim lastRow As Integer
Set CompareRange = Sheets("Datenquelle").Range("H2:H" & Sheets("Datenquelle").Cells(Rows.Count,  _
9).End(xlUp).Row)
For Each x In Sheets("Daten").Range("H2:H" & Sheets("Daten").Cells(Rows.Count, 9).End(xlUp). _
Row)
For Each y In CompareRange
If y  x Then
lastRow = Sheets("Datenunterschied").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("Datenunterschied").Cells(lastRow, 9).Value = x.Value
Sheets("Datenunterschied").Cells(lastRow, 10).Value = x.Offset(0, 1).Value
Sheets("Datenunterschied").Cells(lastRow, 11).Value = x.Offset(0, 2).Value
Sheets("Datenunterschied").Cells(lastRow, 8).Value = x.Offset(0, -1).Value
Sheets("Datenunterschied").Cells(lastRow, 7).Value = x.Offset(0, -2).Value
Sheets("Datenunterschied").Cells(lastRow, 6).Value = x.Offset(0, -3).Value
Sheets("Datenunterschied").Cells(lastRow, 5).Value = x.Offset(0, -4).Value
Sheets("Datenunterschied").Cells(lastRow, 4).Value = x.Offset(0, -5).Value
Sheets("Datenunterschied").Cells(lastRow, 3).Value = x.Offset(0, -6).Value
Sheets("Datenunterschied").Cells(lastRow, 2).Value = x.Offset(0, -7).Value
Sheets("Datenunterschied").Cells(lastRow, 1).Value = x.Offset(0, -8).Value
End If
Next y
Next x
End Sub
Zum besseren Verständnis finden Sie die Excel-Datei unter folgendem Link:
https://www.herber.de/bbs/user/137783.xlsm
Gruß
Nime

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spaltenvergleich über 2 Tabellenblätter
29.05.2020 21:55:13
fcs
Hallo Nime,
das folgende Makro vergleicht die beiden Tabellen.
Außer den IDs (Datensätzen), die in Quelle neu vorhanden sind werden auch IDs (Datensätze) mit unterschiedlichen Werten in einzelnen Spalten erfasst und IDs, die in Quelle fehlen.
LG
Franz
Sub automated_VBA()
Dim wksQ As Worksheet
Dim wksD As Worksheet
Dim wksU As Worksheet
Dim arrQ, arrD
Dim zeiU As Long, zeiD As Long, zeiQ As Long
Dim zeiDL As Long, zeiQL As Long
Dim spaID As Long, spa As Long
Dim varID
Dim bolTreffer As Boolean, bolUnterschied As Boolean
Set wksD = ActiveWorkbook.Worksheets("Daten")
Set wksQ = ActiveWorkbook.Worksheets("Datenquelle")
Set wksU = ActiveWorkbook.Worksheets("Datenunterschied")
spaID = 9 'Spalte I
'Daten in Arrays laden, beschleunigt die Makro-Ausführung
With wksD
zeiDL = .Cells(.Rows.Count, spaID).End(xlUp).Row
arrD = .Range(.Cells(1, 1), .Cells(zeiDL, 11))
End With
With wksQ
zeiQL = .Cells(.Rows.Count, spaID).End(xlUp).Row
arrQ = .Range(.Cells(1, 1), .Cells(zeiQL, 11))
End With
zeiU = 1
'vergleichen Datensätze in Datenquelle und Daten
For zeiQ = 2 To zeiQL
bolTreffer = False
varID = arrQ(zeiQ, spaID)
For zeiD = 2 To zeiDL
If varID = arrD(zeiD, spaID) Then
bolTreffer = True
bolUnterschied = False
'prüfen, ob unterschiedliche Daten in Spalten
For spa = 1 To 11
If arrQ(zeiQ, spa)  arrD(zeiD, spa) Then
If bolUnterschied = False Then
zeiU = zeiU + 1
wksU.Cells(zeiU, spaID) = varID
bolUnterschied = True
End If
wksU.Cells(zeiU, spa) = arrQ(zeiQ, spa)
End If
Next
End If
Next zeiD
If bolTreffer = False Then
'Datensatz in Daten nicht vorhanden
zeiU = zeiU + 1
wksQ.Rows(zeiQ).Copy wksU.Rows(zeiU)
End If
Next zeiQ
'prüfen ob Datensätze in "Daten" in "Datenquelle" fehlen
For zeiD = 2 To zeiDL
bolTreffer = False
varID = arrD(zeiD, spaID)
For zeiQ = 2 To zeiQL
If varID = arrQ(zeiQ, spaID) Then
bolTreffer = True
Exit For
End If
Next zeiQ
If bolTreffer = False Then
'Datensatz in Datenquelle nicht mehr vorhanden
zeiU = zeiU + 1
wksU.Cells(zeiU, spaID) = varID
wksU.Cells(zeiU, spaID + 1) = "Datensatz fehlt in Quelle"
End If
Next zeiD
Erase arrQ, arrD
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige