Startseite Inhaltsverzeichnis Nutzungsbedingungen Datenschutz Impressum Weitere Informationen

CODE-SCHNIPSEL

Tabellen aus mehreren Sheets einer Datei in eine neue Tabelle zusammenführen

VBA und Makros • Codeschnipsel • Arbeitsblatt • Konsolidierung • Sammeln • Einsammeln

Ausgangslage ... Was tut der Codeschnipsel?

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.

VBAVBA Codeschnipsel
XLSQuelltext zur Verwendung mit Microsoft® Excel®

Der Quelltext ...

Option Explicit
' ****************************************************************
' Autor/en und Original-Quelltext unter:
' https://www.online-vba.de/vba_datensammeln7.php
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von https://www.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.
Es gelten die Nutzungsbedingungen von Online-VBA.de.
TOTOP
ANZEIGE