lukas2444
Goto Top

Excel Makro: Zusammenfassen von zwei Tabellen

Hallo liebe Community,
ich benötige mal wieder dringend Eure Hilfe. In einem aktuellen Projekt bekomme ich aus zwei Anwendungen jeweils eine Tabelle. Eine davon ist eine alte Version, die Andere die neue Version. Ich benötige Hilfe bei einem Makro, der den Inhalt aus der alten Tabelle mit den Inhalten der neuen Tabelle quasi aktuallisiert. Tabelle-Alt hat Spalten von A-P und Tabelle_Aktuallisiert von A-H. Die Spaltenüberschriften sind von A-H dabei identisch. Das Makro müsste anhand der Nummer in Spalte A in der Tabelle-Aktualisierung schauen, ob diese in der Tabelle-Alt vorhanden ist, wenn ja, die Informationen von der aktualisierten Tabelle in die Alte übertragen und sollte eine Nummer nicht vorhanden sein, die Zeile komplett zu übernehmen und ganz am Ende aus allem eine neue Tabelle machen. In anderen Worten: Tabelle_Alt + Tabelle_Aktualisiert = Tabelle_Neu. Im folgendem versuche ich das noch einmal zu visualisieren.

In diesem Bild haben wir die Tablle_Alt mit ein paar vorhandenen Daten.

af

Hier ist die Tabelle_Aktuallisiert, mit aktualisierten Zeilen oder sogar Neuen.

afaf

Aus diesen Beiden Tabellen muss nun eine komplett neue Tabelle erstellt werden, mit den aktuallsierten Daten. Die weiteren Spalten in Tabelle_Alt bleiben unverändert und bei komplett neuen Zeilen bleiben Diese leer. Ich denke diese Mathematische Ansicht ( Tabelle_Alt + Tabelle_Aktuallisiert = Tabelle_Neu) macht es ganz gut deutlich, was ich grob versuchen möchte.

Ich würde mich über schnelle Hilfe sehr sehr freuen!

Vielen Dank!

Content-Key: 791484408

Url: https://administrator.de/contentid/791484408

Printed on: April 26, 2024 at 07:04 o'clock

Member: Bingo61
Bingo61 Jun 24, 2021 at 10:51:10 (UTC)
Goto Top
Hallo,
ich bin zwar kein Fan von der Firma Chip , aber dummerweise steht dort eine einfache Lösung .
https://praxistipps.chip.de/excel-tabellen-vergleichen-und-zusammenfuehr ...
Ausser du meinst etwas anderes?
Member: Lukas2444
Lukas2444 Jun 24, 2021 at 11:44:46 (UTC)
Goto Top
Hallo Bingo, danke für deine Antowrt. Jedoch führt das so wie ich das sehe nicht zu meinem gewünschten Ergebnis. Es soll ja quasi wie im Bild gezeigt bei z.B. "Status", die Werte angepasst werden. Also in der Alten Tablle war dieser ja noch bei Zeile 3 auf Offen und in der akutalisierten auf In Arbeit. Diese aktualisierung der Datenwerte soll durchgeführt werden und in deiner komplett neuen Tabelle aufgeführt werden.
Ich veranschauliche das noch einmal

Tabelle_Alt:
1 1 1 1 1
2 2 3 4 1
3 4 3 4 1

Tabelle_Aktualisiert:
1 2 1 1
2 2 3 4
3 4 4 5

Tabelle_Neu: (Ensteht daraus)
1 2 1 1 1
2 2 3 4 1
3 4 4 5 1
Member: colinardo
colinardo Jun 24, 2021 updated at 12:22:51 (UTC)
Goto Top
Servus @Lukas2444 .
Zuerst einmal, vermeide bitte in Zukunft solche Titel wie "Brauche dringend Hilfe ...", das beschleunigt erstens die Antworten hier nicht (eher im Gegenteil) und zweitens lassen sich solche Beiträge später überhaupt nicht vernünftig finden geschweige denn man sieht auf einen Blick worum es in dem Beitrag geht! Ich habe den Titel daher schon mal für dich auf eine etwas passendere Überschrift korrigiert.

Back to Topic:

Man könnte das zwar auch ohne Makros, mit Powerquery lösen, aber da die Frage hier nach einem Makro gestellt wurde antworte ich auch mal mit etwas VBA zum Thema (Kommentare siehe Code) das du auf deine Bedürfnisse anpassen kannst:
Sub MergeTables()
    'Variablen  
    Dim wsOld As Worksheet, wsNew As Worksheet, wsMerged As Worksheet, cell As Range
    ' Tabellenzuweisung  
    ' Alte Tabelle  
    Set wsOld = Sheets("Tabelle_Alt")  
    ' Neue Tabelle  
    Set wsNew = Sheets("Tabelle_Neu")  
    ' Zusammenfassung-Sheet erstellen/zuweisen  
    On Error Resume Next
    Set wsMerged = Sheets("Zusammenfassung")  
    On Error GoTo 0
    ' Wenn das Zusammenfassungs Sheet noch nicht existiert erstelle es anhand einer Kopie mittels "wsOld"  
    If wsMerged Is Nothing Then
        wsOld.Copy After:=Sheets(Sheets.Count)
        Set wsMerged = Sheets(Sheets.Count)
        wsMerged.Name = "Zusammenfassung"  
    End If
    
    With wsNew
        ' Für jede Zelle im Bereich A2:A(n) des Sheets "wsNew"  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            ' Wenn Zellwert nicht leer ist  
            If cell.Value <> "" Then  
                ' finde im Zusamenfassungs-Sheet eine existierende Nummer  
                Set f = wsMerged.Range("A:A").Find(cell.Value, LookIn:=xlValues)  
                ' Wenn dort keine gefunden wurde setze als Ziel die nächste freie Zeile  
                If f Is Nothing Then
                    Set f = wsMerged.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  
                End If
                ' kopiere Daten aus wsNew ans Ziel  
                cell.Resize(1, 8).Copy f
            End If
        Next
    End With
End Sub
Viel Erfolg
Grüße Uwe
Member: SPSman
SPSman Jun 24, 2021 at 12:10:53 (UTC)
Goto Top
Also Wenn du weißt welche Zeile du aktualisieren musst, dann würde ich das über eine Dummy Tabelle mit SVerweis machen. Alternativ mit Powershell (aber nur weil ich da mehr Erfahrung habe)

Grüße
Member: Lukas2444
Lukas2444 Jun 24, 2021 updated at 12:17:51 (UTC)
Goto Top
Hallo @colinardo,

vielen Dank für die Antwort und vorab entschuldige ich mich für den falsch gewählten Titel! Ich habe den Makro bei mir durchlaufen lassen, jedoch kopiert er lediglich Tabelle_Neu und von der Tabelle_Alt ist nichts zu sehen obwohl diese Werte ja noch kombiniert/ergänzt werden müssten. Muss ich noch etwas beachten?

Liebe Grüße!
Member: colinardo
colinardo Jun 24, 2021 updated at 12:29:48 (UTC)
Goto Top
Zitat von @Lukas2444:
Ich habe den Makro bei mir durchlaufen lassen, jedoch kopiert er lediglich Tabelle_Neu und von der Tabelle_Alt ist nichts zu sehen obwohl diese Werte ja noch kombiniert/ergänzt werden müssten. Muss ich noch etwas beachten?
Du hast die Namen der Sheets falsch den Variablen zugewiesen. Bitte den Code genau lesen und zuerst verstehen und nicht nur Copy-Paste machen!
Funktioniert hier im Test einwandfrei.

screenshot
Member: em-pie
em-pie Jun 24, 2021 updated at 17:59:42 (UTC)
Goto Top
Moin,

@colinardo hat dir ja die Musterlösung als Makro präsentiert face-smile

ICH versuche das aber erst mal alles via einfachen Funktionen zu lösen.
Nutze dazu einfach die Funktion Wenn() und dort dann mit dem SVERWEIS()

Über Wenn() ermittelst du das Delta und mit dem SVERWEIS holst du dir die richtigen Werte:

Vorteil: kein Makro erforderlich und es läuft überall, auch dort, wo selbst signierte Makros verboten sind
Nachteil: etwas mehr Arbeit…


Gruß
em-pie