Ansatz
01.02.2016 19:13:03
Michael
Hi Michelle,
test bitte mal die Datei: https://www.herber.de/bbs/user/103207.xls
Das Makro:
Option Explicit
Sub importieren()
Dim o As Object, o1 As Variant
Dim von As Worksheet, nach As Worksheet
Dim zvon&, zbis&, z&, untz&, zvorh&, i&
Dim BerVon As Variant, BerNach As Variant
' geht schneller als Range-Zugriffe
Set von = Sheets("Import")
Set nach = Sheets("Bearbeitet")
zvon = 2
zbis = nach.Range("A" & Rows.Count).End(xlUp).Row
BerNach = nach.Range("A1:C" & zbis) ' bis Spalte "?" anpassen
Set o = CreateObject("scripting.dictionary")
For z = zvon To zbis
o(BerNach(z, 1) & BerNach(z, 2)) = z ' name+vorname
' oder sonstwas, was eindeutig ist, z.B. Personal-Nr.
Next
' **** Damit sind alle Namen mit Zeilennr. eingelesen ******
BerNach = nach.Range("A1:C" & zbis + 500) ' bis Spalte "?" anpassen
zbis = von.Range("A" & Rows.Count).End(xlUp).Row
BerVon = von.Range("A1:C" & zbis) ' bis Spalte "?" anpassen
untz = zbis ' unterste, befüllte Zeile in von bzw. "Bearbeitet"
For z = zvon To zbis
zvorh = o(BerVon(z, 1) & BerVon(z, 2))
If zvorh = 0 Then
zvorh = untz + 1
untz = untz + 1
End If
If untz > 498 Then MsgBox "hier noch was machen"
For i = 1 To 3 ' je nach Spaltenanzahl
BerNach(zvorh, i) = BerVon(z, i)
Next
nach.Range("D" & zvorh) = Now
Next
nach.Range("A1").Resize(zbis + untz, 3) = BerNach
Set o = Nothing
End Sub
Die Idee ist, erst mal alle vorhandenen Personen einzulesen und sich die Zeilennummer zu merken.
Dann werden die Daten importiert und auf ihr Vorhandensein geprüft (ZeilenNr. größer 0); wenn die Zeile vorhanden ist, wird sie mit den aktualisierten Werten überschrieben, wenn sie in der Basisliste (die heißt bei mir "Import") vorhanden ist, aber nicht in Deiner bearbeiteten Version, wird der Name unten angehängt, und wenn sie im Import nicht mehr vorhanden ist (die Hanna Huber), bleibt sie unangetastet.
Wichtig ist, daß Du dabei ein *eindeutiges* Kriterium verwendest!
Zum Testen habe ich mich zu einer Kombination aus Name + Vorname entschlossen, aber die Besonderheit beim "Dictionary" ist, daß doppelte/mehrfache Werte NICHT gespeichert werden. In der Praxis hast Du ja evtl. Personen-Nr., die sind ja dann eindeutig.
Beobachte mal die Werte in Spalte C und D...
Schöne Grüße,
Michael
P.S.: ich habe hier ziemlich "dreckig" programmiert und die Anzahl der neu hinzukommenden Personen auf 500 begrenzt; wenn es bei Dir um ernsthafte Datenmengen geht, muß man das noch nachbessern (d.h. die Daten zwischendrin "wegschreiben").