Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bestimmte Tabellenblätter zusammenführen mit Makro

Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 08:45:07
Lars
Guten Morgen Forumgemeinde
Ich habe eine Datei mit Tabellenblättern nach Monat, worin ich den Bestelleingang führe. In einem weiteren Blatt möchte ich nun die Monate untereinander zusammenführen.
Das Makro soll von den gewünschten Tabellenblättern den Bereich A5 bis zur letzen beschriebenen Zeile kopieren und in das erstellte Sammelblatt ab Zeile 2 untereinander einfügen.
Bei Aktualisierung soll der Inhalt des Sammelblatts (ab Zeile 2) gelöscht und neu aufgebaut werden.
Ich habe bereits einen Schnipsel, den jemand mit VBA Kenntnissen ja vielleicht anpassen kann?
Vielen Dank im Voraus für eure Mithilfe.

Private Sub CommandButton1_Click()
Dim mon(12) As String
mon(0) = "AB18"
mon(1) = "Jan"
mon(2) = "Feb"
mon(3) = "Mrz"
mon(4) = "Apr"
mon(5) = "Mai"
mon(6) = "Jun"
mon(7) = "Jul"
mon(8) = "Aug"
mon(9) = "Sep"
mon(10) = "Okt"
mon(11) = "Nov"
mon(12) = "Dez"
Dim AB As Worksheet
Set AB = Worksheets("Auftragsbestand")
Dim iZ&, iB%, iRmon&, iC&
iZ = 5
With AB
.Range("a5:k" & .Cells.SpecialCells(xlCellTypeLastCell).Row).ClearContents 'löscht den Inhalt    _
_
_
_
_
des Blattes Auftragsbestand (Spalten A-I komplett, außer Zeile 1-5)
End With
For iB = 0 To 12
With Worksheets(mon(iB))
For iRmon = 3 To .[m65536].End(xlUp).Row 'sucht im Bereich von A3 bis M65536 die letzte  _
_
_
_
_
beschrieben Zelle (das ist in diesem Fall immer das letzte x in der Spalte M)
If .Cells(iRmon, 14) = "x" Then
For iC = 1 To 8
AB.Cells(iZ, iC) = .Cells(iRmon, iC) 'Kopiert A bis H nach A-H
Next
AB.Cells(iZ, 8) = .Cells(iRmon, 9) 'kopiert G nach H
AB.Cells(iZ, 9) = .Cells(iRmon, 11) 'kopiert I nach G
AB.Cells(iZ, 10) = .Cells(iRmon, 15) 'kopiert M nach J
iZ = iZ + 1 'Variable wird für die nächste Zeile erhöht
End If
Next
End With
Next
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 09:05:29
Werner
Hallo Lars,
so:
Option Explicit
Public Sub Sammeln()
Dim loLetzteQuelle As Long, loLetzteZiel As Long
Dim Ziel As Worksheet, ws As Worksheet
Set Ziel = Worksheets("Auftragsbestand")
Application.ScreenUpdating = False
With Ziel
If .Cells(2, 1)  "" Then
loLetzteZiel = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(loLetzteZiel, 1)).ClearContents
End If
End With
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Auftragsbestand"
'nix machen
Case Else
With ws
loLetzteQuelle = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(5, 1), .Cells(loLetzteQuelle, 1)).Copy _
Ziel.Cells(Ziel.Cells(Ziel.Rows.Count, 1).End(xlUp).Row, 1).Offset(1)
End With
End Select
Next ws
Set Ziel = Nothing
End Sub
Hast du in deiner Mappe weitere Blätter, von denen keine Daten geholt werden sollen, dann mußt du die in der ersten Case-Anweisung mit angeben.
Case "Auftragsbestand", "ZweitesBlatt", "DrittesBlatt"
Gruß Werner
Anzeige
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 09:51:03
Lars
Hallo Werner
Sorry ich hatte mich etwas unverständlich ausgedrückt.
Das Makro zieht jetzt nur immer die Spalte A, müsste aber die Spalten A bis O ab Zeile 5 kopieren.
Zudem hat meine Mappe viele Arbeitsblätter, die ich dazu nicht benötige.
Die zu kopierenden Blätter heissen: "Jan" "Feb" "Mrz" "Apr" "Mai" "Jun" "Jul" "Aug" "Sep" "Okt" "Nov" "Dez". Und das Zielblatt heisst "AE komplett".
Gruss Lars
Anzeige
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 10:13:02
Werner
Hallo Lars,
dann so.
Option Explicit
Public Sub Sammeln()
Dim loLetzteQuelle As Long, loLetzteZiel As Long
Dim Ziel As Worksheet, ws As Worksheet
Set Ziel = Worksheets("AE komplett")
Application.ScreenUpdating = False
With Ziel
If .Cells(2, 1)  "" Then
loLetzteZiel = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(loLetzteZiel, 15)).ClearContents
End If
End With
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Okt", "Nov", "Dez"
With ws
loLetzteQuelle = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(5, 1), .Cells(loLetzteQuelle, 15)).Copy _
Ziel.Cells(Ziel.Cells(Ziel.Rows.Count, 1).End(xlUp).Row, 1).Offset(1)
End With
Case Else
'nix machen
End Select
Next ws
Set Ziel = Nothing
End Sub
Gruß Werner
Anzeige
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 10:57:46
Lars
Hallo Werner
Danke dir, das funktioniert schon ganz gut :-)
Das einzige Problem dass ich nun habe ist, dass das beim Ausführen des Makros der Inhalt von "AE komplett" nicht überschrieben wird, sondern die ganzen Blätter einfach bei der untersten Zeile angehängt werden. Also jedes mal wenn ich das Makro ausführe, habe ich alle Monate einmal mehr in meinem "AE komplett".
Schön wäre, wenn vor dem Einfügen der Daten das Tabellenblatt "AE komplett" ab Zeile 2 geleert wird".
Gruss Lars
Anzeige
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 11:09:40
Werner
Hallo Lars,
bei mir nicht. Mehr kann ich dazu nicht sagen, ich kenne deine Datei nicht.
Also bitte lad mal deine Mappe hier hoch.
Gruß Werner
AW: Bestimmte Tabellenblätter zusammenführen mit Makro
05.04.2019 11:22:37
Lars
Werner, ich kann den Fehler nach erneutem Öffnen der Mappe nicht mehr reproduzieren. Finde ich gut :-) Danke dir für deine Hilfe und geniess das Wochenende.
Lars
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
05.04.2019 11:30:52
Werner
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblätter effektiv zusammenführen mit Makro in Excel


Schritt-für-Schritt-Anleitung

Um mehrere Excel-Dateien oder Tabellenblätter zusammenzuführen, kannst Du ein Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du das Makro anpassen kannst, um die gewünschten Daten zu kopieren:

  1. Öffne die Excel-Datei mit den Tabellenblättern, die Du zusammenführen möchtest.

  2. Öffne den VBA-Editor, indem Du ALT + F11 drückst.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)".
    • Wähle "Einfügen" und dann "Modul".
  4. Kopiere und füge den folgenden Code ein:

    Option Explicit
    Public Sub Sammeln()
       Dim loLetzteQuelle As Long, loLetzteZiel As Long
       Dim Ziel As Worksheet, ws As Worksheet
       Set Ziel = Worksheets("AE komplett")
       Application.ScreenUpdating = False
    
       ' Lösche den Inhalt ab Zeile 2
       With Ziel
           If .Cells(2, 1) <> "" Then
               loLetzteZiel = .Cells(.Rows.Count, 1).End(xlUp).Row
               .Range(.Cells(2, 1), .Cells(loLetzteZiel, 15)).ClearContents
           End If
       End With
    
       ' Kopiere Daten aus den gewünschten Blättern
       For Each ws In ThisWorkbook.Worksheets
           Select Case ws.Name
               Case "Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"
                   With ws
                       loLetzteQuelle = .Cells(.Rows.Count, 1).End(xlUp).Row
                       .Range(.Cells(5, 1), .Cells(loLetzteQuelle, 15)).Copy _
                       Ziel.Cells(Ziel.Cells(Ziel.Rows.Count, 1).End(xlUp).Row, 1).Offset(1)
                   End With
               Case Else
                   ' Nichts machen
           End Select
       Next ws
       Set Ziel = Nothing
       Application.ScreenUpdating = True
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus: Gehe zu Entwicklertools > Makros, wähle das Makro Sammeln aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Inhalte werden nicht gelöscht
    Stelle sicher, dass die Zeile zum Löschen der Inhalte korrekt platziert ist. Der Code sollte If .Cells(2, 1) <> "" Then beinhalten, um sicherzustellen, dass die Inhalte ab Zeile 2 gelöscht werden.

  • Fehler: Falsche Blätter werden kopiert
    Überprüfe die Case-Anweisungen. Stelle sicher, dass nur die Blätter genannt werden, von denen Du Daten übernehmen möchtest.


Alternative Methoden

Wenn Du mehrere Excel-Dateien zusammenführen möchtest, kannst Du dies auch ohne Makro tun. Eine Möglichkeit ist, die benötigten Daten manuell zu kopieren und in ein neues Blatt einzufügen. Alternativ kannst Du auch Power Query verwenden, um Daten aus verschiedenen Excel-Dateien oder -Blättern zusammenzuführen.


Praktische Beispiele

Hier ist ein Beispiel, wie Du das Makro für eine Datei mit den Monaten anpassen kannst:

Public Sub SammelnMonate()
    ' Die gleichen Schritte wie im obigen Makro
End Sub

Wenn Du weitere Datenquellen oder spezifische Anforderungen hast, passe die Case-Anweisungen und den Bereich, den das Makro kopieren soll, entsprechend an.


Tipps für Profis

  • Nutze Kommentare im VBA-Code, um den Überblick zu behalten.
  • Teste das Makro mit einer Kopie Deiner Datei, um Datenverlust zu vermeiden.
  • Verwende Option Explicit am Anfang des Codes, um sicherzustellen, dass alle Variablen deklariert sind.

FAQ: Häufige Fragen

1. Kann ich mehrere Excel-Dateien zusammenführen?
Ja, Du kannst ein ähnliches Makro verwenden, um Daten aus mehreren Excel-Dateien zu kopieren. Achte darauf, den Pfad zu den Dateien entsprechend anzupassen.

2. Wie kann ich sicherstellen, dass keine leeren Zeilen kopiert werden?
Füge eine Bedingung hinzu, um nur Zellen mit Inhalten zu kopieren. Verwende If Not IsEmpty(.Cells(iRmon, 1)) Then innerhalb der Schleife.

3. Ist es möglich, das Makro zu automatisieren?
Ja, Du kannst das Makro so einrichten, dass es bei bestimmten Ereignissen, wie dem Öffnen der Datei, automatisch ausgeführt wird.

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