Thema Datum  Von Nutzer Rating
Antwort
Rot vba script anpassen: Tabellenblätter vergleichen
15.08.2016 17:41:40 Mikell
NotSolved
16.08.2016 11:37:47 Gast61941
NotSolved
16.08.2016 16:37:36 Mikell
NotSolved

Ansicht des Beitrags:
Von:
Mikell
Datum:
15.08.2016 17:41:40
Views:
1095
Rating: Antwort:
  Ja
Thema:
vba script anpassen: Tabellenblätter vergleichen

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.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot vba script anpassen: Tabellenblätter vergleichen
15.08.2016 17:41:40 Mikell
NotSolved
16.08.2016 11:37:47 Gast61941
NotSolved
16.08.2016 16:37:36 Mikell
NotSolved