Tabellen aus Sheets zusammenführen
Ausgangslage - Was tut dieser Code-Schnipsel?
Zusammenführen von Tabellen aus mehreren Arbeitsblättern der geöffneten Arbeitsmappe / Datei zu einer großen Tabelle. Hierzu habe ich ein kleines Beispiel geschrieben. Einfach entsprechend anpassen und schon haben Sie eine Automatisierung Ihres Sammelvorganges realisiert.
Der Quelltext
Option Explicit
' Original-Quelltext unter: https://www.online-vba.de/tabellen-aus-sheets-zusammenfuehren
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de
Public Sub OVBAde_DatenTabellenAusMehrerenSheetsEinsammeln()
Dim oTargetSheet As Object
Dim oSheet As Object
Dim lErgebnisZeile As Long
Dim i As Long
Dim z As Long
Dim s As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
'Schritt 1: Neues Arbeitsblatt für die Ergebnisse erstellen
Set oTargetSheet = ActiveWorkbook.Sheets.Add
'Alternativ: Zuweisung eines bereits vorhandenen Blattes mit vorherigem Löschen
'Set oTargetSheet = ActiveWorkbook.Sheets("VorhandenesBlatt")
'oTargetSheet.Cells.ClearContents 'Nur Inhalte löschen
lErgebnisZeile = 2 'Ergebnisse eintragen ab Zeile 2
'Schritt 2: Schleife über alle Sheets
For Each oSheet In ActiveWorkbook.Sheets
'Schritt 3: Datenübertragung nur, wenn nicht das neue Blatt vorliegt
If oSheet.Name <> oTargetSheet.Name Then
'Wenn die Ergebniszeile 2 ist, nehmen wir noch einmalig die Tabellenüberschriften mit
If lErgebnisZeile = 2 Then
oTargetSheet.Cells(1, 1).Value = "Quellblatt"
For i = 1 To 10 'Überschriften der Spalten 1 bis 10 übertragen
oTargetSheet.Cells(1, i + 1).Value = oSheet.Cells(1, i).Value
Next i
End If
'Eigentliche Datenübertragung - Alle Zeilen der Sheets ab Zeile 2 bis Tabellenende
For z = 2 To oSheet.UsedRange.Rows.Count
'Blattnamen in Spalte 1 eintragen
oTargetSheet.Cells(lErgebnisZeile, 1).Value = CStr(oSheet.Name)
For s = 1 To 10 'Spalten 1 bis 10 übertragen
oTargetSheet.Cells(lErgebnisZeile, s + 1).Value = oSheet.Cells(z, s).Value
Next s
lErgebnisZeile = lErgebnisZeile + 1 'nächste Zeile auf dem Ergebnisblatt
Next z
End If
Next oSheet 'nächstes Arbeitsblatt
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
'Variablen aufräumen
Set oTargetSheet = Nothing
Set oSheet = Nothing
End Sub
Anmerkungen und Hinweise
Dieser Codeschnipsel wurde geschrieben von Marc Wershoven im Jahr 2013.
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.