Excel VBA zwei Tabellenblätter vergleichen und änderungen übernehmen

Excelmania

Lieutenant
Registriert
Apr. 2010
Beiträge
794
Hallo.

Ich habe eine Excel-Arbeitsmappe.

Auf Tabellenblatt 1 befinden sich die Stammdaten, wozu Auswertungen erfolgen. Die Basis bildet Eröffnungsimport. Diese besteht aus fünf Attributen; Spalte A bis E. In Spalte A befindet sich der Primärschlüssel eine Nummer.

Ab Spalte F bis Q (Tabellenblätter 3 bis 14) folgen monatliche Auswertungen, die aus einer anderen Quelle stammen und über den Primärschlüssel zugeordnet werden können.

Spalte R bildet eine Besonderheit. Hier erfolgt eine Kommentierung, die beibehalten werden muss.

Um Sicherzustellen, dass die Stammdaten zu den Auswertungen aktuell bleiben, sollen monatlich neu die Stammdaten gezogen werden. Hierfür habe ich auf Tabellenblatt 2 die identische Reihenfolge von A bis E angelegt. Über eine verkette Excel-Formel bekomme ich auch angezeigt, welche Stammdaten abweichen oder neu hinzugekommen sind.

Nun würde ich aber gerne, dass die Stammdaten auf dem Tabellenblatt 1 aktualisiert werden: Änderungen bei den Attributen B bis E werden überschrieben, Fälle die wegfallen werden gelöscht (ganze Zeile) und neue Datensätze werden unten angeführt.

Kann soetwas mit VBA realisiert werden und wie könnte der Code hierfür aussehen?
 
Von der Logik her müsste es so aussehen:

Code:
Für (alle Spalten auf Blatt 1) {
    KeyAlt = SchlüsselBlatt1
    KeyGefunden = 0
    Für (alle Spalten auf Blatt 2) {
        KeyNeu = SchlüsselBlatt2
        Wenn KeyAlt == KeyNeu {
            Für (Spalten D bis Q) {
                // hier entweder Spalte R nicht mit prüfen,
                // oder ein "wenn Spalte == R -> überspringen" einbauen
              
                Wenn WertSpalteAlt != WertSpalteNeu {
                    WertSpalteAlt = WertSpalteNeu                 
                }         
            }
            KeyGefunden = 1
        }
    }
    Wenn KeyGefunden == 0 {
        Zeile Löschen
    }
}

Für (alle Spalten auf Blatt2) {
    KeyNeu = SchlüsselBlatt2
    KeyGefunden = 0
    Für (alle Spalten auf Blatt1){
        KeyAlt = SchlüsselBlatt1
            Wenn KeyNeu == KeyAlt {
                KeyGefunden = 1
                Next
            }
    }
    Wenn KeyGefunden == 0 {
        Zeile auf Blatt1 anfügen
    } 
}
 
Zuletzt bearbeitet:
Zurück
Oben