Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Tabellenblätter vergleichen und zusammenführen





Frage

Einen schönen guten Morgen erstmal! Mir wäre geholfen, wenn mir jemand eine Lösung für mein Excel-Problem liefern könnte: Ich habe 2 Tabellen (T1 und T2) zu vergleichen. T1 hat knapp 800 Zeilen und 30 Spalten, T2 ca. 500 Zeilen und 20 Spalten. Die einzige Gemeinsamkeit in beiden Tabellen ist eine Spalte "A" , die eine Vorgangsnummer enthält (Zahlen- und Buchstabenkombination, zwischen 4 und 6 Zeichen lang). Diese Vorgangsnummer kann in einer der beiden Tabellen oder auch in beiden vorhanden sein. Excel sollte nun prüfen, ob die Vorgangsnummer in T2 bereits in T1 enthalten ist. Wenn ja, müssten die Inhalte von T2, Spalte "B" bis "U" (also die restlichen 19 Spalten) hinter der 30. Spalte von T1 in der Zeile mit der entsprechenden Vorgangsnummer eingefügt werden. Wenn nein, sollte diese Vorgangsnummer in einer neuen Zeile bei T1 Spalte "A" erscheinen, die Spalten 2 bis 30 bleiben dann leer, und ab Spalte 31 kommt wieder der Inhalt von T2. Ich hoffe, ich habe es nicht zu kompliziert ausgedrückt?? Vielen Dank schon mal. Georg

Antwort 1 von Shaori

Hallo Georg,

dieses Makro müsste machen was du willst, einfach in ein Standardmodul einfügen.

Sub vergleichen()
Dim i As Integer
Dim t2_zeilen As Integer

t2_zeilen = 500

For i = 1 To t2_zeilen
With Sheets(1).Range("A1:A800")
Set suche = .Find(Sheets(2).Range("A" & i).Value, LookIn:=xlValues)
Set t1_leer = Range("A34:A65536").Find("", LookIn:=xlValues)
If Not suche Is Nothing Then
suche.Select
Sheets(1).Range(ActiveCell.Offset(0, 30), ActiveCell.Offset(0, 49)).Value = _
Sheets(2).Range("B" & i, "U" & i).Value
Else
t1_leer.Select
ActiveCell.Value = Sheets(2).Range("A" & i).Value
Sheets(1).Range(ActiveCell.Offset(0, 30), ActiveCell.Offset(0, 49)).Value = _
Sheets(2).Range("B" & i, "U" & i).Value
End If
End With
Next i

End Sub


die 500 in der Zeile
t2_zeilen = 500
steht für die Anzahl an Zeilen in deiner Tabelle T2.

Die 800 in der Zeile
With Sheets(1).Range("A1:A800")
steht für die Anzahl an Zeilen in deiner Tabelle T1

Passe diese Werte an deine beiden Tabellen an!

Sollten die beiden Tabellen nicht das erste und zweite Blatt deiner Mappe sein, musst du die Zahlen im Befehl Sheets() entsprechend ändern oder einfach die Namen der Tabellenblätter in Anführungszeichen reinschreiben.

Falls du Fragen hast oder etwas nicht stimmt melde dich.

mfg
Shaori

PS: vor dem Ausführen des Makros speichern... Änderungen durch Makros können nicht rückgängig gemacht werden

Antwort 2 von Koala

Hallo Shaori,

herzlichen Dank für deine schnelle Antwort.
Ich kann es erst heute nachmittag ausprobieren.
Wenn ich Probleme habe, wäre ich so unverschämt mich nochmal zu melden :-))

Beste Grüße
Georg

Antwort 3 von Shaori

Nachtrag:

Set t1_leer = Range("A34:A65536").Find("", LookIn:=xlValues)

das A34 ist noch ein Überbleibsel aus dem Test, dürfte so auch laufen, ist aber sinnlos :-) entweder du schreibst A1 hin, oder die Anzahl der Zeilen in T1. Die Zeile dient dazu die nächste freie Zeile in T1 zu finden. Da du ca. 800 Zeilen hast funktioniert es auch mit 34, nur falls du dich fragen solltest wo die herkommt