|  
                                             
	Hallo zusammen, 
	ich hoffe sehr auf eure Hilfe.  Mit dem unten genannten Code löse ich folgende Aufgabestellung: Vergleiche Spalte B (Inventarnummern) aus Tabellenblatt "Neudaten" und "Altdaten".  Gibt es die Inventarnummer nicht in "Altdaten" dann kopiere den ganzen Datensatz bestehend aus Spalten A bis K aus "Neudaten" in das Blatt "Altdaten" und füge in Spalte L den Wert "Neu" ein. Gibt es die Inventarnummer bereits im Blatt "Altdaten", dann kopiere den Datensatz nicht aus "Neudaten".Und  genau hier gibt es jetzt die Änderung: 
	Gib es die Inventarnummer im Blatt "Altdaten" bereits, dann kopiere die Spalten  A bis K aus "Neudaten" in den alten  Datensatz im Blatt "Altdaten". Das ist wichtig, denn ist dürfen keine Duplikate vorhanden sein und die alten Datensatze in "Altdaten"  werden um die Spalte L -AC erweitert. 
	Wie kann der vorhandene Code dafür angepasst werden?: 
Sub Vergleich()
 Dim zells As Range
 Dim x As Long
 Dim rng As Range
 Dim lastn As Long
 Dim lasta As Long
 Dim ws1 As Worksheet
 Dim ws2 As Worksheet
 Set ws1 = Worksheets("Neudaten")
 Set ws2 = Worksheets("Altdaten")
 lastn = ws1.Cells(1048576, 2).End(xlUp).Row
 lasta = ws2.Cells(1048576, 2).End(xlUp).Row
  With ws1.Range("B2:B" & lastn)
 .NumberFormat = General
 .Value = .Value
 Set objDic = CreateObject("Scripting.Dictionary")
 Dim v, e
 With ws2.Range("B2:B" & lasta)
     v = .Value
 End With
       
     For Each e In v
         If Not objDic.Exists(e) Then objDic.Add e, e
    Debug.Print e
       Next
 
 
 Set rng = ws1.Range("B2:B" & lastn)
 
     With ws2.Cells.Interior
         .Pattern = xlNone
         .TintAndShade = 0
         .PatternTintAndShade = 0
 End With
 
 ws2.Cells.Columns(30).Clear
 
 For Each zells In rng
 lasta2 = ws2.Cells(1048576, 2).End(xlUp).Row
   If Not objDic.Exists(zells.Value) Then
   ws1.Range("A" & zells.Row & ":" & "K" & zells.Row).Copy ws2.Range("A" & lasta2 + 1)
   ws2.Range("L" & lasta2 + 1) = "Neu"
   End If
        Next
 
 Set objDic = Nothing
 
 
  Set objDic2 = CreateObject("Scripting.Dictionary")
 Dim b, c
 With ws1.Range("B2:B" & lastn)
     b = .Value
 End With
       
     For Each c In b
         If Not objDic2.Exists(c) Then objDic2.Add c, c
    Debug.Print c
       Next
       
       
   Dim zells2 As Long
    lasta2 = ws2.Cells(1048576, 2).End(xlUp).Row
        For zells2 = 2 To lasta2
        If ws2.Cells(zells2, 2).Value = "" Then GoTo XXX
         If Not objDic2.Exists(ws2.Cells(zells2, 2).Value) Then
     ws2.Rows(zells2).Delete Shift:=xlUp
     
     zells2 = zells2 - 1
     End If
XXX:
    Next
 Set objDic2 = Nothing
 End With
  With Worksheets("Altdaten")
      .Columns("A:AC").Sort Key1:=.Range("J2"), Order1:=xlDescending, Header:=xlYes, OrderCustom:=1, _
         MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
   End With
 MsgBox "Vergleich beendet!"
 End Sub
	  
	Vielen Dank für eure Hilfe. 
     |