Neue Tabelleneinträge synchronisieren
Ausgangslage - Was tut dieser Code-Schnipsel?
Folgende Situation: Sie haben eine Quell-Tabelle und möchten gerne alle Einträge (anhand einer ID Spalte
zu erkennen), die nicht in der Ziel-Tabelle enthalten sind, dort ergänzend anhängen.
Zur Verdeutlichung einmal die Quell-Tabelle (Ausgangslage) und die gewünschte Ziel-Tabelle
(vor und nach dem Makrodurchlauf).
Quell-Tabelle:
A | B | C | D | E | |
---|---|---|---|---|---|
1 | ID Spalte | Text | Zahl | und weitere Spalten | |
2 | 1 | Beispiel ABC | 44 | ... | |
3 | 2 | Mustertext | 66 | ... | |
4 | 3 | Neuer Eintrag 1 | 55 | ... | |
5 | 4 | Neuer Eintrag 2 | 21 | ... | |
6 |
A | B | C | D | E | |
---|---|---|---|---|---|
1 | ID Spalte | Text | Zahl | und weitere Spalten | |
2 | 1 | Beispiel ABC | 44 | ... | |
3 | 2 | Mustertext | 66 | ... | |
4 |
Ziel-Tabelle (nachher):
A | B | C | D | E | |
---|---|---|---|---|---|
1 | ID Spalte | Text | Zahl | und weitere Spalten | |
2 | 1 | Beispiel ABC | 44 | ... | |
3 | 2 | Mustertext | 66 | ... | |
4 | 3 | Neuer Eintrag 1 | 55 | ... | |
5 | 4 | Neuer Eintrag 2 | 21 | ... | |
6 |
Für diese Ergänzungsaufgabe finden Sie folgend ein Beispielmakro.
Der Quelltext
Option Explicit
' Original-Quelltext unter: https://www.online-vba.de/neue-tabelleneintraege-synchronisieren
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de
Public Sub OVBAde_TabellenEintraegeErgaenzen()
Dim lQuellZeile As Long
Dim lZielZeile As Long
Dim lSpalte As Long
Dim lEinfuegeZeile As Long
Dim oQuelle As Object
Dim oZiel As Object
Dim bFlag As Boolean
Dim sVergleichQuelle As String
Dim sVergleichZiel As String
Set oQuelle = Sheets("Tabelle1")
Set oZiel = Sheets("Tabelle2")
Application.ScreenUpdating = False 'Flackern ausschalten
'Ergänzung starten...
For lQuellZeile = 2 To oQuelle.UsedRange.Rows.Count + oQuelle.UsedRange.Row - 1
bFlag = False
'Prüfen ob die ID schon in der Ziel-Tabelle vorhanden ist...
For lSuchZeile = 2 To oZiel.UsedRange.Rows.Count + oZiel.UsedRange.Row - 1
sVergleichQuelle = CStr(oQuelle.Cells(lQuellZeile, 1).Text)
sVergleichZiel = CStr(oZiel.Cells(lSuchZeile, 1).Text)
If LCase(Trim(CStr(sVergleichQuelle))) = LCase(Trim(CStr(sVergleichZiel))) Then
bFlag = True
Exit For
End If
Next lSuchZeile
'Prüfergebnis entscheidet ob bereits vorhanden oder eine neue Zeile angelegt werden muss
If bFlag = True Then
'Bereits vorhanden
Else
'Zeile als neu unten anhängen
lEinfuegeZeile = (oZiel.UsedRange.Rows.Count + oZiel.UsedRange.Row - 1) + 1
For lSpalte = 1 To 4 'Spalten 1 bis 4 werden ohne Formate übertragen
oZiel.Cells(lEinfuegeZeile, lSpalte) = oQuelle.Cells(lQuellZeile, lSpalte)
Next lSpalte
End If
Next lQuellZeile 'Nächsten Eintrag der Quell-Tabelle verarbeiten...
'Aufräumen
Application.ScreenUpdating = True
Set oZiel = Nothing
Set oQuelle = Nothing
End Sub
Anmerkungen und Hinweise
Dieser Codeschnipsel wurde geschrieben von Marc Wershoven im Jahr 2017.
Die Nutzung erfolgt auf eigene Gefahr.
Bitte denken Sie immer zuerst an eine ausreichende Datensicherung.
Wir können keinen kostenlosen Support anbieten.
Es gelten unsere Nutzungsbedingungen.