thomas1972
Goto Top

Innerhalb bestehender Excel Datei bestimmte Tabellenblätter per VBA zusammenfügen

Hallo,

irgendwie komme ich hier nicht weiter,

ich habe eine Excel Datei mit x Tabellenblättern ,

hiervon möchte ich bestimmte Tabellenlätter z.b. Test1 Test6 Test8 & Test12 in ein neues z.b. Test21 zusammenfügen.

In den Tabellen ist jeweils Spaltenüberschrift + 1 Leerzeile und erst darauffolgend Werte vorhanden.
Diese möchte ich nun im Sheet 21 zusammengefügt haben, so das nur 1x die Überschrift der Zeile 1 aus Blatt Test1 gefolgt von allen Datensätzen zusammengefasst werden,
die Blätter haben alle den selben Aufbau (Spalten) nur unterschiedliche Anzahl von Zeilen. Vorhandene Leerzeilen sollten gleichzeitig entfernt werden.

Wie bekomme ich dieses am besten per VBA hin?

Grüße aus München
Thomas

Content-Key: 318420

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

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

Member: colinardo
colinardo Oct 19, 2016 updated at 15:46:30 (UTC)
Goto Top
Hallo Thomas,
habe ich hier zwar schon öfter gezeigt (Das nächste mal bitte die Suche etwas ausführlicher benutzen), aber hier nochmal, damit die Trefferquote in Zukunft wieder steigt face-wink

Variablen zu Beginn anpassen (Quell-Sheets und Zielsheet)
Sub MergeData()
    Dim arrSheets As Variant, intOffset As Integer, rngEmpty As Range, ws as Variant
    ' Name des Tabellenblattes in dem die Daten zusammengefasst werden  
    Const TARGET = "Merged"  
    ' Name der Tabellenblätter im Array auflisten  
    arrSheets = Array("Tab1", "Tab3")  
    
    With Sheets(TARGET)
        'Blatt hat bereits Inhalt ? Setze Offset für Überschriften  
        intOffset = IIf(.Range("A1").Value <> "", 1, 0)  
        'Alle Sheets im Array verarbeiten und Daten kopieren  
        For Each ws In arrSheets
            Sheets(ws).UsedRange.Offset(intOffset, 0).Copy Destination:=.Cells(Rows.Count, "A").End(xlUp).Offset(intOffset, 0)  
            intOffset = 1
        Next
        'Leere Zeilen löschen  
        For Each cell In .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            If cell.Value = "" Then  
                If rngEmpty Is Nothing Then
                    Set rngEmpty = cell.EntireRow
                Else
                    Set rngEmpty = Union(rngEmpty, cell.EntireRow)
                End If
            End If
        Next
        If Not rngEmpty Is Nothing Then
            rngEmpty.Delete
        End If
    End With
End Sub
Hier das Demosheet: merge_sheets_318420.xlsm

Grüße Uwe