Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblätter zusammenführen VBA

Tabellenblätter zusammenführen VBA
Martin
Hallo liebe Forum-User
ich habe eine Excel-Datei mit verschiedenen Arbeitsblättern, die alle den gleichen Aufbau (Überschrift 1. Zeile - unterschiedliche Länge der Tabellenblätter) haben. Nun möchte ich diese einzelnen Arbeitsblätter in einem Arbeitsblatt zusammenführen (ab Zeile 2 - Zeile 1 = Überschrift, muss erhalten bleiben). Die einzelnen Arbeitsblätter werden regelmäßig geändert.
Sobald man auf das "Gesamt" Arbeitsblatt wechselt sollten diese Änderungen übertragen / aktualisiert werden.
Ich habe schon gegoogled / im Forum gesucht und mehrere Ansätze bezüglich des Problemes gefunden. Bei vielen sollte die Formatierung der einzelnen Zellen erhalten bleiben, was bei mir aber nicht der Fall ist.
Folgenden Quellcode habe ich gefunden:

Sub Konsolidieren()
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
Set Wks = Worksheets.Add
Wks.Name = "Konsolidierung"
For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
Bereich.Copy Destination:= _
Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub

Wie kann ich den Code umändern, so dass das Worksheet nicht immer wieder erstellt wird, da dieser vorhanden ist, und der Quellcode dann ausgeführt wird, wenn ich auf das Arbeitsblatt wechsle.
Ich habe schon einiges getestet und es traten Fehler auf, wie z.B. - ist das "Gesamt" Arbeitsblatt leer, so wird auch die erste Zeile gelöscht bzw. beim wechseln in das Arbeitsblatt "Gesamt" lande ich in einer Schleife. Sollte aus diesem Grunde immer das "Gesamt" Arbeitsblatt gelöscht werden bevor es wieder neu zusammengeführt wird?
Über eure Hilfe würde ich mich sehr freuen. Vielen Dank im Voraus.
MfG
Martin
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 09:55:52
{Boris}
Hi Martin,
auf die Schnelle - probier mal:
Private Sub Worksheet_Activate()
Dim Ws As Worksheet
Me.Rows("2:" & Rows.Count).Clear
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name  "Gesamt" Then
Ws.Rows("2:" & Ws.Cells.Find("*", searchdirection:=xlPrevious).Row).Copy Me.Range("A" &  _
Me.Cells.Find("*", searchdirection:=xlPrevious).Row + 1)
End If
Next Ws
End Sub
Rechtsklick auf den Blattreiter "Gesamt", Code anzeigen und den Code in das rechte offene VBA-Fenster kopieren.
Grüße Boris
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:27:29
Martin
Hallo Boris,
vielen Dank für die Hilfe. Ein Problem habe ich jetzt noch. Wenn ich wieder in das Arbeitsblatt wechsle, dann bekomme ich die Fehlermeldung "Kann Teil einer verbundenen Zelle nicht ändern". Kann man das noch abfgangen?
Verbundene Zellen
13.08.2010 10:29:05
{Boris}
Hi Martin,
Kann man das noch abfgangen?
Ja - keine verbundenen Zellen verwenden. Die Dinger sind Gift und führen an allen Ecken zu Problemen.
Grüße Boris
Anzeige
AW: Verbundene Zellen
13.08.2010 10:46:23
Martin
OK. Akzeptiert :)
Habe jetzt die verbundenen Zellen herausgenommen.
Wenn ich jetzt wieder in das Worksheet "Gesamt" wechsle (habe den Code unter Worksheet Activate abgelegt), so fügt er jetzt immer wieder die Tabellenblätter an das vorhandene heran.
z.B. 150 Zeilen - ich gehe in Tabellenblatt 3 verändere den Wert in B3 und gehe wieder in das Tabellenblatt gesamt. Nun werden auf einmal 300 Zeilen angezeigt. Sollte mann dann vorher das Tabellenblatt wieder löschen (bis auf Zeile 1)? Wenn ja wie?
Anzeige
AW: Verbundene Zellen
13.08.2010 10:48:50
{Boris}
Hi Martin,
Sollte mann dann vorher das Tabellenblatt wieder löschen (bis auf Zeile 1)? Wenn ja wie?
Ja, sollte man. Deshalb hab ich das auch direkt in den Code eingebaut mit der Zeile

Me.Rows("2:" & Rows.Count).Clear
Somit kann ich das Problem grad nicht nachvollziehen...?
Grüße Boris
Anzeige
AW: Verbundene Zellen
13.08.2010 10:59:12
Martin
Hallo Boris,
ich bin irgendwie schon im Wochenende. :) Sorry. Klappt alles bestens. Vielen Dank für Deine Hilfe.
MfG
Martin
AW: Tabellenblätter zusammenführen VBA
13.08.2010 09:56:45
Klaus
Moin Martin,
müsste so gehen:
Sub Konsolidieren()
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
'REMOVE Set Wks = Worksheets.Add
'REMOVE Wks.Name = "Konsolidierung"
For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
Bereich.Copy Destination:= _
Sheets("Konsolidierung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub

Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:22:42
Martin
@Klaus: Danke. Er kopiert jetzt aber auch die erste Zeile (also Überschrift) der Tabellenblätter mit. :(
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:32:17
Martin
Klaus. Sorry war mein Fehler. Ich muss bei A3 anfangen. Hatte es falsch formuliert. Ich habe Deinen Quellcode jetzt in das Arbeitsblatt unter Worksheet Activate eingefügt. Wechsel ich in ein anderes Arbeitsblatt und führe dort eine Änderung durch und springe dann wieder in das "Konsolidierung"-Arbeitsblatt, so arbeitet er kurz, aber aktualisiert nicht. Kann es sein, dass das Blatt erst wieder geglöscht werden muss, bevor es wieder neu beschrieben wird?
Mit Änderungen meine ich
A5 ist gefüllt mit "ABC" und ich mache darauf "ZDF"
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:45:28
Klaus
Hi Martin,
Set Bereich = .Range("A2:" & strLC)
Ändere hier A2 in A3.
Wilde Behauptung: Das Blatt Konsolidierung WIRD jedes mal aktualisiert, du merkst es nur nicht. Der Code schreibt den Inhalt aller Tabellenblätter UNTER den vorhandenen Kontent im Blatt "Konsolidierung" - scroll mal nach unten und schau nach!
Um die Inhalte vorher zu löschen, gibt
Sheets("Konsolidierung").Cells.ClearContents
am Anfang des Codes ein.
Grüße,
Klaus M.vdT.
(Den Code von Boris verstehe ich nicht vollständig, aber er ist kürzer und eleganter. Nutz lieber den und verzichte auf verbundene Zellen!)
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 11:00:05
Martin
Vielen Dank Klaus für Deine Hilfe. Funktioniert jetzt alles. Ich wünsche ein schönes Wochenende.
MfG
Martin
Danke für die Rückmeldung! o.w.T.
13.08.2010 11:04:16
Klaus
.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblätter in Excel zusammenführen mit VBA


Schritt-für-Schritt-Anleitung

Um mehrere Excel-Tabellenblätter zusammenzuführen, kannst du ein Makro verwenden. Hier ist eine einfache Anleitung, wie du dies mit VBA umsetzen kannst.

  1. Öffne die Excel-Datei, die die Tabellenblätter enthält, die du zusammenführen möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Klicke im Menü auf Einfügen und wähle Modul.

  4. Füge den folgenden Code ein:

    Private Sub Worksheet_Activate()
        Dim Ws As Worksheet
        Me.Rows("2:" & Rows.Count).Clear
        For Each Ws In ThisWorkbook.Worksheets
            If Ws.Name <> "Gesamt" Then
                Ws.Rows("2:" & Ws.Cells.Find("*", searchdirection:=xlPrevious).Row).Copy Me.Range("A" & _
                Me.Cells.Find("*", searchdirection:=xlPrevious).Row + 1)
            End If
        Next Ws
    End Sub
  5. Schließe den VBA-Editor und kehre zur Excel-Oberfläche zurück.

  6. Wechsle zu dem Arbeitsblatt "Gesamt". Jedes Mal, wenn du dieses Arbeitsblatt aktivierst, werden die Daten der anderen Tabellenblätter zusammengeführt.


Häufige Fehler und Lösungen

  • Fehler: "Kann Teil einer verbundenen Zelle nicht ändern"

    • Lösung: Vermeide die Verwendung von verbundenen Zellen, da sie in VBA häufig Probleme verursachen.
  • Fehler: Das "Gesamt" Arbeitsblatt wird nicht aktualisiert.

    • Lösung: Stelle sicher, dass du die richtige Zeile zum Kopieren der Daten verwendest. Ändere den Bereich in der Zeile Set Bereich = .Range("A2:" & strLC) auf Set Bereich = .Range("A3:" & strLC).
  • Problem: Die Inhalte werden immer unter die bereits vorhandenen geschrieben.

    • Lösung: Füge Me.Rows("2:" & Rows.Count).Clear am Anfang des Codes ein, um die vorherigen Daten zu löschen.

Alternative Methoden

Wenn du kein VBA verwenden möchtest, kannst du auch die Funktion "Konsolidieren" in Excel nutzen. Hierzu gehst du wie folgt vor:

  1. Wähle ein leeres Arbeitsblatt in deiner Excel-Datei aus.
  2. Gehe zu Daten > Konsolidieren.
  3. Wähle die Funktion, die du verwenden möchtest (z.B. Summe).
  4. Füge die Bereiche der Tabellenblätter hinzu, die du zusammenführen möchtest.
  5. Klicke auf OK, um die Daten zu konsolidieren.

Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Tabellenblätter zusammenführen kannst, wenn du sie in einem neuen Arbeitsblatt speichern möchtest:

Sub Konsolidieren()
    Dim Wks As Worksheet
    Dim Bereich As Range
    Dim strLC As String
    Dim i As Integer
    Set Wks = Sheets("Konsolidierung")
    Wks.Cells.ClearContents ' Löscht vorherige Inhalte

    For i = 2 To Worksheets.Count
        With Worksheets(i).UsedRange
            strLC = .Cells(.Rows.Count, .Columns.Count).Address
            Set Bereich = .Range("A2:" & strLC)
            Bereich.Copy Destination:= _
            Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        End With
    Next i
End Sub

Tipps für Profis

  • Verwende Variablen: Definiere Variablen für die Arbeitsblätter, um deinen Code leserlicher zu gestalten.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im Code, um unerwartete Fehler abzufangen.
  • Makros optimieren: Teste dein Makro mit verschiedenen Datenmengen, um die Leistung zu optimieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Dateien zusammenfügen? Du kannst mehrere Excel-Dateien mithilfe eines Makros zusammenführen, indem du die Arbeitsblätter aus jeder Datei in ein zentrales Arbeitsblatt kopierst.

2. Funktioniert dies in allen Excel-Versionen? Ja, die hier beschriebenen Methoden sollten in den meisten modernen Excel-Versionen gut funktionieren, insbesondere in Excel 2010 und später.

3. Was ist der Unterschied zwischen Konsolidieren und Zusammenführen? Konsolidieren aggregiert Daten, während Zusammenführen bedeutet, dass du die Daten aus verschiedenen Blättern in einem neuen Blatt anzeigst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige