Hallo Carina,
das folgende Makro gehört in das
VBA-Projekt der Arbeitsmappe, in der eine Listen stehen:
Private Sub Workbook_Open()
Dim lngLetzte As Long
'Name des Arbeitsblattes, in das die Eintragungen erfolgen, die kopiert werden sollen
With Worksheets("Tabelle1")
'letzte Zeile in Spalte B ermitteln
lngLetzte = .Cells(Rows.Count, 2).End(xlUp).Row
'vorhandene Daten der Spalten E bis J in Array arrUr einlesen
arrUr = .Range(.Cells(2, 5), .Cells(lngLetzte, 10))
End With
End Sub
Den Namen der Tabelle (hier Tabelle1) in der die Eintragungen gemacht werden musst du natürlich auf deine Verhältnisse anpassen.
Das folgende Makro gehört in ein
Standard-Modul deiner Arbeitsmappe:
Global arrUr As Variant
Sub kopieren()
Dim lngQLetzte As Long
Dim lngZaehler As Long
Dim arrNeu As Variant
Dim arrCopy As Variant
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim u As Long
Dim n As Long
Dim s As Long
'Blätter definieren
Set wsQuelle = ThisWorkbook.Worksheets("Tabelle1") 'Arbeitsblatt aus dem die Daten kopiert werden
Set wsZiel = ThisWorkbook.Worksheets("Tabelle2") 'Arbeitsblatt in der die geänderten Daten kopiert werden sollen
With wsQuelle
'letzte Zeile im Quell-Arbeitsblatt feststellen
lngQLetzte = .Cells(Rows.Count, 2).End(xlUp).Row
'Spalten B bis J einlesen
arrNeu = .Range(.Cells(2, 2), .Cells(lngQLetzte, 10))
End With
'Array für Sätze redimensionieren, die in das Zielarbeitsblatt übertragen werden müssen
ReDim arrCopy(lngQLetzte)
'Daten vergleichen
For u = 1 To UBound(arrUr, 1)
For n = 1 To UBound(arrNeu, 1)
For s = 1 To 6
If arrUr(u, s) <> arrNeu(n, s + 3) Then
lngZaehler = lngZaehler + 1
arrCopy(lngZaehler) = n
Exit For
End If
Next s
Next n
Next u
With wsZiel
'Zeilen am Anfang einfügen
.Rows("2:" & 1 + lngZaehler).Insert Shift:=xlDown
'geänderte Daten einfügen
For n = 1 To lngZaehler
For s = 1 To 9
.Cells(1 + n, 1 + s) = arrNeu(arrCopy(n), s)
Next s
Next n
End With
'für ggf. weiteren Durchlauf Daten wieder in arrUr einlesen
'erst einmal arrUr leeren
Erase arrUr
'Daten wieder einlesen
With wsQuelle
'letzte Zeile in Spalte B ermitteln
lngQLetzte = .Cells(Rows.Count, 2).End(xlUp).Row
'vorhandene Daten der Spalten E bis J in Array arrUr einlesen
arrUr = .Range(.Cells(2, 5), .Cells(lngQLetzte, 10))
End With
End Sub
Auch hier musst die Dateinamen für die Quell- und Zieldatei noch anpassen. Dieses Makro kannst du deinem Buttom einfügen.
Probiere am besten mal in einer Testdatei aus, ob das Makro so funktioniert, wie du willst.
Gruß
M.O.