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

Tabellenabgleich durch Makro

Tabellenabgleich durch Makro
12.07.2019 12:52:19
Micha_P
Hallo zusammen,
ich suche bei folgendem Code Unterstützung. Hierbei wird ein Abgleich zwischen zwei Tabellen durchgeführt, bei dem neue und gelöschte Zeilen angezeigt werden. Ich hätte nun gerne, dass auch Zeilen gefunden werden in denen sich der Wert in Spalte K verändert.
Option Explicit

Sub Abgleich()
Dim vnt1 As Variant, vnt2 As Variant, vntMark() As Variant
Dim rng As Range
Dim lngIndex As Long, lngC As Long
Sheets("Abgleich").Range("A2:V" & Rows.Count).ClearContents
With Sheets("Materialliste_neu")
vnt1 = .Range("B2:B" & Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row))
End With
With Sheets("Materialliste")
vnt2 = .Range("B2:B" & Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row))
End With
With Sheets("Materialliste_neu")
For lngIndex = 1 To UBound(vnt1, 1)
If IsError(Application.Match(vnt1(lngIndex, 1), vnt2, 0)) Then
ReDim Preserve vntMark(lngC)
vntMark(lngC) = "Neu"
lngC = lngC + 1
If rng Is Nothing Then
Set rng = .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20))
Else
Set rng = Union(rng, .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20)))
End If
End If
Next
If Not rng Is Nothing Then
rng.Copy Sheets("Abgleich").Range("A2")
Sheets("Abgleich").Range("V2").Resize(UBound(vntMark) + 1, 1) = _
Application.Transpose(vntMark)
End If
End With
Set rng = Nothing
Erase vntMark
lngC = 0
With Sheets("Materialliste")
For lngIndex = 1 To UBound(vnt2, 1)
If IsError(Application.Match(vnt2(lngIndex, 1), vnt1, 0)) Then
ReDim Preserve vntMark(lngC)
vntMark(lngC) = "Gel?scht"
lngC = lngC + 1
If rng Is Nothing Then
Set rng = .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20))
Else
Set rng = Union(rng, .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20)))
End If
End If
Next
If Not rng Is Nothing Then
rng.Copy Sheets("Abgleich").Range("A1").End(xlDown).Offset(1, 0)
Sheets("Abgleich").Range("V1").End(xlDown).Offset(1, 0).Resize(UBound(vntMark) + 1, 1) =   _
_
_
_
Application.Transpose(vntMark)
End If
End With
Set rng = Nothing
End Sub

Vielen Dank für eure Hilfe.
Grüße,
Michael
https://www.herber.de/bbs/user/130865.xlsm

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenabgleich durch Makro
15.07.2019 10:23:35
fcs
Hallo Michael,
leider hatte ich Probleme die Datei runterzuladen.
Hier das Makro angepasst, um Spalte K mit zu prüfen.
LG
Franz
Sub Abgleich()
Dim vnt1 As Variant, vnt2 As Variant, vntMark() As Variant
Dim vntK_alt As Variant, vntK_neu As Variant, Zeile As Variant
Dim rng As Range
Dim lngIndex As Long, lngC As Long
Sheets("Abgleich").Range("A2:V" & Rows.Count).ClearContents
With Sheets("Materialliste_neu")
Zeile = Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row)
vnt1 = .Range("B2:B" & Zeile)
vntK_neu = .Range("K2:K" & Zeile)
End With
With Sheets("Materialliste")
Zeile = Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row)
vnt2 = .Range("B2:B" & Zeile)
vntK_alt = .Range("K2:K" & Zeile)
End With
With Sheets("Materialliste_neu")
For lngIndex = 1 To UBound(vnt1, 1)
If IsError(Application.Match(vnt1(lngIndex, 1), vnt2, 0)) Then
ReDim Preserve vntMark(lngC)
vntMark(lngC) = "Neu"
lngC = lngC + 1
If rng Is Nothing Then
Set rng = .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20))
Else
Set rng = Union(rng, .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20)))
End If
End If
Next
If Not rng Is Nothing Then
rng.Copy Sheets("Abgleich").Range("A2")
Sheets("Abgleich").Range("V2").Resize(UBound(vntMark) + 1, 1) = _
Application.Transpose(vntMark)
End If
End With
Set rng = Nothing
Erase vntMark
lngC = 0
With Sheets("Materialliste")
For lngIndex = 1 To UBound(vnt2, 1)
Zeile = Application.Match(vnt2(lngIndex, 1), vnt1, 0)
If IsError(Zeile) Then
ReDim Preserve vntMark(lngC)
vntMark(lngC) = "Gelöscht"
lngC = lngC + 1
If rng Is Nothing Then
Set rng = .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20))
Else
Set rng = Union(rng, .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20)))
End If
Else
If vntK_neu(Zeile, 1)  vntK_alt(lngIndex, 1) Then
ReDim Preserve vntMark(lngC)
vntMark(lngC) = "K geändert"
lngC = lngC + 1
If rng Is Nothing Then
Set rng = .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20))
Else
Set rng = Union(rng, .Range(.Cells(lngIndex + 1, 1), .Cells(lngIndex + 1, 20)))
End If
End If
End If
Next
If Not rng Is Nothing Then
rng.Copy Sheets("Abgleich").Range("A1").End(xlDown).Offset(1, 0)
Sheets("Abgleich").Range("V1").End(xlDown).Offset(1, 0).Resize(UBound(vntMark) + 1, 1) _
= Application.Transpose(vntMark)
End If
End With
Set rng = Nothing
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige