Tabellen vergleichen und zusammenführen
#1
Hallo :)

Ich habe zwei Tabellen und möchte diese zusammenführen.

Tabelle 1 enthält alte Daten und Tabelle 2 neue Daten

Von Tabelle 2 sollen die ersten beiden Spalten mit den ersten beiden Spalten der Tabelle 1 verglichen werden.
-> Ist der Eintrag in Tabelle 1 schon vorhanden, soll Spalte B mit Spalte B aus Tabelle 2 überschrieben werden
-> Ist kein entsprechender Eintrag vorhanden, sollen einfach die neuen Werte aus Tabelle 2 (Spalte A und B) auch in Tabelle 1 Spalte (A,B) übernommen werden.

Kann mir da jemand behilflich sein?

Liebe Grüße
Lukas
Top
#2
Hallo,

können/dürfen die Daten in Tabelle1 sortiert werden?

Dürfte dann durch kopieren der kompletten Daten aus Tabelle2 nach Tabelle1 und anschließendem RemoveDuplicates einfach möglich sein.

Mach bitte mal eine Beispielmappe mit ein paar Beispieldaten und lade die hier hoch.

Gruß Werner
Top
#3
Hallo,

Ich habe hier genau mein Problem gefunden:

http://www.office-loesung.de/ftopic352556_0_0_asc.php

Dort ist auch die Lösung für das Problem, allerdings verstehe ich den Code überhaupt gar nicht, könnte mir den vielleicht jemand erklären?

Code:
Sub DatenAbgleich()
Dim arrT2 As Variant, arrT1 As Variant, arrRest As Variant
Dim i As Long, j As Long, k As Long
    With Sheets("Tabelle1")
        arrT1 = .Range("A1", .Range("H" & Rows.Count).End(xlUp))
    End With
    With Sheets("Tabelle2")
        arrT2 = .Range("A1", .Range("H" & Rows.Count).End(xlUp))
    End With
    For i = 1 To UBound(arrT2)
        For j = 1 To UBound(arrT1)
            If arrT1(j, 1) = arrT2(i, 1) Then
                arrT1(j, 1) = ""
                Exit For
            End If
        Next
    Next
    k = 1
    ReDim arrRest(1 To 8, 1 To k)
    arrRest(1, 1) = "folgende Datensätze sind nicht in Tabelle2 enthalten"
    For j = 1 To UBound(arrT1)
        If arrT1(j, 1) <> "" Then
            k = k + 1
            ReDim Preserve arrRest(1 To 8, 1 To k)
            For i = 1 To 8
                arrRest(i, k) = arrT1(j, i)
            Next
        End If
    Next
    With Sheets("Tabelle1")
        .UsedRange.ClearContents
        .Cells(1, 1).Resize(UBound(arrT2), 8) = arrT2
        .Cells(UBound(arrT2) + 1, 1).Resize(UBound(arrRest, 2), 8) = WorksheetFunction.Transpose(arrRest)
    End With
End Sub


Wäre Euch sehr dankbar :)
Top
#4
Hallöchen,

mal ganz kurz - die Tabellendaten werden nicht direkt im Blatt verglichen, sondern in Arrays - das macht es schneller - duplikate in den Arrays entfernt, der Rest in ein dritts Aray übernommen und diese Daten dann in Tabelle1 angefügt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Lucker11
Top
#5
Ich habe es leider nichtmal geschafft das Programm so umzuschreiben, dass die Meldung/Zeile „folgende Datensätze...“ nicht auftaucht, sondern die alten Daten einfach unter die neuen geschrieben werden. Was muss ich da verändern in dem Programm?
Top
#6
Hallöchen,

na, die Meldung wegzubekommen ist doch recht einfach, die steht da im Code drin:

arrRest(1, 1) = "folgende Datensätze sind nicht in Tabelle2 enthalten"

Die oder gleich die ganze Zeile nimmst Du weg. Dadurch hättest Du maximal erst mal nur eine leere Zeile dazwischen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Lucker11
Top
#7
Ja genau, aber wie bekomme ich dann die leere Zeile weg?
Top
#8
Hallöchen,
Schiebe mal k=k+1 etwas runter zwischen next und end if
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Lucker11
Top
#9
Perfekt, vielen Dank  18
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste