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

Forumthread: mehrere Tabellenblätter zusammenführen

mehrere Tabellenblätter zusammenführen
16.10.2017 19:13:46
Sebastian
Hallo,
bin gerade an einer kleine Datenbank wo ich Inhalte aus mehreren Tabellenblättern in ein Tabellenblatt zusammen kopieren möchte.
Hab schon einieges gefunden aber immer wird ein neues Blatt erstellt was ich nicht möchte.
Hier ein Code den ich gerade benutze. Der ist schon sehr gut nur das er so aussehen müsste das kein neues Blatt erstellt wird und nur die ersten 5 Spalten kopiert werden. Es dürfen auch die Formate nicht übernommen werden.
_____________

Sub Konsolidieren1()
'Code für ein allgemeines Modul
'Konsolidierung ohne Überschriften ( Zeile 1 )
'In Spalte A wird der Name der Herkunfttabelle gelistet
'Ein Tabellenblatt mit dem Namen "Konsolidierung" wird ganz links erstellt.
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
Dim lngA As Long
Dim lngE As Long
Set Wks = Worksheets.Add
Wks.Name = "Konsolidierung"
Wks.Move Before:=Sheets(1)
For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
lngA = Wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
lngE = Bereich.Rows.Count
Wks.Range("A" & lngA & ":A" & (lngE + lngA - 1)) = Worksheets(i).Name
Bereich.Copy
Wks.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial , Paste:=xlValues
End With
Next i
End 

Sub
Vielleicht kann mir ja einer helfen.
Danke
Sebastian


		
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
16.10.2017 19:50:18
Werner
Hallo Sebastian,
da gibt es noch einige Fragen:
-in welches Blatt soll kopiert werden?
-wohin in diesem Blatt soll kopiert werden?
-sollen dort bereits vorhandenen Daten überschrieben werden?
-oder soll beim erneuten Ausführen ans Ende der vorhandenen Daten kopiert werden?
-sind die 5 Spalten der Quellblätter immer gleich weit befüllt (gleiche Zeile)?
-welche 5 Spalten sollen kopiert werden, A bis E?
Gruß Werner
Anzeige
AW: Nachfrage
16.10.2017 20:09:38
Sebastian
Hallo,
die Mappe hat den Namen "Konsolidierung" und steht an erster stelle
ab Zelle A5 soll reinkopiert werden
die bereits vorhandenen Daten sollen Überschrieben werden aber nur in den spalten A bis E
ja die 5 Spalten der Quellblätter sind unterschiedlich weit befüllt.
ja es sollen immer die Spalten A-E kopiert werden.
klasse wäre es wenn wie in diesem VBA dan in der Mappe "Konsolidierung" eine Spalte vor das Ergebnis eingefügt wird mit dem jeweiliegen Namen der Mape aus dem das Ergebnis ist.
"Tabelle3 Artikeln. 15015033 Wurm 12,99 18-22-00"
Gruß
Sebastian
Anzeige
AW: mehrere Tabellenblätter zusammenführen
16.10.2017 20:37:47
Sebastian
Hallo noch mal
Hab mit diesem Code begonen.Der funktioniert zwar aber mir immer das Format mitschleppt was überhaupt nicht geht da teilweise dann die Formeln natürlich nicht mehr passen. Und der Name des Blatts wäre schon klasse.
_______________________________________________
Sub neut()
For i = 1 To Sheets.Count + 1
If i > Sheets.Count Then
Set NewSheet = Worksheets.Add
NewSheet.Name = "Auswertung"
End If
If Sheets(i).Name = "Auswertung" Then
MsgBox "Tabellenblatt Auswertung ist bereits vorhanden!"
Exit For
End If
Next i
Set ws1 = Worksheets("Auswertung")
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
ws1.Range("a2:d" & anz1).ClearContents
For i = 3 To Sheets.Count
If Sheets(i).Name  "Auswertung" Then
anz1 = ws1.Cells(65356, 1).End(xlUp).Row
Set ws2 = Worksheets(Sheets(i).Name)
anz2 = ws2.Cells(65356, 1).End(xlUp).Row
ws2.Range("a2:d" & anz2).Copy Destination:=ws1.Range("a" & anz1 + 1)
End If
Next i
End Sub

________________________________
Gruss
Sebastian
Anzeige
Beispielmappe
16.10.2017 23:44:41
Werner
Hallo Sebastian,
vorhin hast du geschrieben, dass du in der Zieltabelle vor der Spalte A noch eine Spalte einfügen willst, damit dort eingefügt werden kann, aus welchem Blatt die kopierten Daten kommen.
Stellt sich die Frage, weshalb kopierst du denn nicht gleich nach Spalte B, dann ist die Spalte A frei?
Zudem hast du am Anfang davon gesprochen, dass jeweils die ersten 5 Spalten kopiert werden sollen. Jetzt präsentierst du einen Code, der aber nur 4 Spalten kopiert, von A-D.
Zudem hast du gesagt, dass die 5 Spalten die kopiert werden sollen unterschiedlich befüllt sind. In deinem Code ermittelst du die letzte belegte Zelle in Spalte A. Das kann aber nur dann funktionieren, wenn auch sicher die Spalte A die Spalte ist, die gesichert am weitesten mit Daten befüllt ist.
Es ist vielleicht besser, wenn du mal eine kleine Beispielmappe machst. Einmal dein Zielblatt, in dem du dann aufzeigst, wie dein Ergebnis aussehen soll und zumindest ein Quellblatt mit ein paar Spieldaten. Die Datei dann bitte hier hochladen.
Gruß Werner
Anzeige
AW: Beispielmappe
17.10.2017 09:36:49
Sebastian
Hallo Werner,
hier der Link zu der Beispielmappe:
https://www.herber.de/bbs/user/117013.xls
In den Quellblättern ist die Spalte A die, die am weitesten immer befüllt wird aber je nach Blatt in unterschiedlicher Länge. Da hier die Menge der Datensätze unterschiedlich ist.
Alles weiter habe ich in den Blättern beschrieben.
Sorry das ich dich mit dem zweiten Code noch mehr verwiert habe.
Hoffe mit der Beispielmappe klappts besser.
Gruss
Sebastian
Anzeige
AW: Beispielmappe
17.10.2017 11:35:39
Werner
Hallo Sebastian,
in deiner Testdatei habe ich im Blatt "Auswertung" vorne eine Spalte "Tabellenblatt" eingefügt für die Namen der Blätter, aus denen die Daten kommen. Die eigentlichen Daten werden dann ab Zeile 6 in Spalte B eingefügt.
Das Makro ist im Modul1, Schaltfläche ist schon damit verknüpft.
Test mal.
https://www.herber.de/bbs/user/117020.xlsm
Gruß Werner
Anzeige
AW: Beispielmappe
17.10.2017 20:42:43
Sebastian
Hallo Werner,
Vielen Dank für den Code funktioniert schon prima.
Hab auch schon angepasst das er erst ab Zeile 6 die Werte löscht so komm ich mit den Überschriften weiter runter.
Mir ist aufgefallen das wenn ich eine weiter Mappe einfüge und diese anders als RS... beshrifte die Werte nicht übernommen werden.
Hast du dafür eine Lösung das egal was als name eingepflegt ist dies übernommen wird.
lg
Sebastian
Anzeige
AW: Beispielmappe
18.10.2017 10:24:59
Werner
Hallo Sebastian,
ja, das ist so. Ich frage im Code ja die ersten zwei Zeichen des jeweiligen Tabellenblattes ab. Nur wenn diese passen, werden die Daten geholt.
Wenn auch anders benannte Blätter mit einbezogen werden sollen, dann müsste man das über den Ausschluß der Blätter machen, die ausgenommen werden sollen.
Welche Blätter sollen nicht bearbeitet werden (Namen)?
Stell den Code bitte nochmal online. Ich habe momentan keinen Zugriff auf meinen heimischen Rechner und Dateien mit Makros kann ich im Moment auch nicht herunter laden.
Gruß Werner
Anzeige
AW: Beispielmappe
19.10.2017 08:38:01
Sebastian
Hallo Werner,
hab es mir noch mal angeschaut und beschlossen vor die Nammen einfach ein zusätzliches Kürzel eingefügt"HFB" im Code schon zu sehen.
Wenn du magst kannst aber gern den Code auch umschreiben. Die Tabellenblätter die nicht mit einbezogen werden sollen haben folgende Namen:
Auswertung
Daten 1
Daten 2
bis
Daten 5
Und hier der Code:
___________________________________________________________________________
Option Explicit
Public Sub Daten_sammeln()
Dim loLetzteQ As Long, loLetzteZ As Long, loBeginn As Long
Dim wsQ As Worksheet, wsZ As Worksheet
Set wsZ = Worksheets("Auswertung")
With wsZ
loLetzteZ = .Cells(.Rows.Count, 2).End(xlUp).Row
If loLetzteZ >= 6 Then
.Range(.Cells(6, 1), .Cells(loLetzteZ, 4)).ClearContents
End If
End With
Application.ScreenUpdating = False
For Each wsQ In ThisWorkbook.Worksheets
If Left(wsQ.Name, 3) = "HFB" Then
With wsQ
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row
loLetzteZ = wsZ.Cells(wsZ.Rows.Count, 2).End(xlUp).Row + 1
If loLetzteZ 
__________________________________________________________________________
lg
Sebastian
Anzeige
AW: Beispielmappe
20.10.2017 00:24:59
Werner
Hallo Sebastian,
hier der geänderte Code:
Public Sub Daten_sammeln()
Dim loLetzteQ As Long, loLetzteZ As Long, loBeginn As Long
Dim wsQ As Worksheet, wsZ As Worksheet
Set wsZ = Worksheets("Auswertung")
With wsZ
loLetzteZ = .Cells(.Rows.Count, 2).End(xlUp).Row
If loLetzteZ >= 6 Then
.Range(.Cells(6, 1), .Cells(loLetzteZ, 4)).ClearContents
End If
End With
Application.ScreenUpdating = False
For Each wsQ In ThisWorkbook.Worksheets
If Left(wsQ.Name, 5) = "Daten" Or wsQ.Name = "Auswertung" Then
Else
With wsQ
MsgBox .Name
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row
loLetzteZ = wsZ.Cells(wsZ.Rows.Count, 2).End(xlUp).Row + 1
If loLetzteZ 
Gruß Werner
Anzeige
AW: Beispielmappe
20.10.2017 09:40:02
Sebastian
Hallo Werner,
danke dafür.
Ich nerv zwar ungern aber ich hab festgestellt das in die einzelnen Mappen die Daten in andere Zeilen uns Spalten importiert werden müssen.
z.B.
HFB RS01
ab Spalte 2 und Zeile 6
Habs selbst versucht die Werte in dem Code zu ändern aber komme nicht weiter.
Teilweise nimmt er die Werte leider ab der Falschen Zeile und nicht alle.
Anbei noch mal die Datei.
https://www.herber.de/bbs/user/117115.xlsm
Könntest du bitte die Formel darauf noch mal anpassen.
Dann sollte es soweit gut sein.
Dafür vorab schon mal Danke.
Sebastian
Anzeige
AW: Beispielmappe
20.10.2017 17:51:13
Werner
Hallo Sebastian,
kann damit jetzt leider nicht so viel anfangen. Was meinst du damit?
das in die einzelnen Mappen die Daten in andere Zeilen uns Spalten importiert werden müssen.
Nicht mehr die Daten aus den Quellblättern von A1 bis D letzteZeile holen?
Mit der hochgeladenen Datei kann ich im Moment nichts anfangen. Kann hier keine .xlsm herunter laden.
Beschreib doch mal genau, was du meinst und lade die Datei ohne Makros, als normale .xls hoch.
Grup Werner
Anzeige
AW: Beispielmappe
20.10.2017 20:06:39
Nagel
Hallo Werner anbei die Datei in xls.
https://www.herber.de/bbs/user/117133.xls
Nun was ich meine ist das die zu importierenden Werte für die Mappe Auswertung.
Also z.B. in der Mappe "HFB RS01" nun nicht mehr in der spalte A- D und ab Zeile 2 wie bisher sondern jetzt in der Spalte B-E und ab der 6 Zeile sind.
Hoffe damit kannst du was anfangen.
lg
Sebastian
Anzeige
AW: Beispielmappe
20.10.2017 20:17:19
Werner
Hallo Sebastian,
dann so:
Public Sub Daten_sammeln()
Dim loLetzteQ As Long, loLetzteZ As Long, loBeginn As Long
Dim wsQ As Worksheet, wsZ As Worksheet
Set wsZ = Worksheets("Auswertung")
With wsZ
loLetzteZ = .Cells(.Rows.Count, 2).End(xlUp).Row
If loLetzteZ >= 6 Then
.Range(.Cells(6, 1), .Cells(loLetzteZ, 4)).ClearContents
End If
End With
Application.ScreenUpdating = False
For Each wsQ In ThisWorkbook.Worksheets
If Left(wsQ.Name, 5) = "Daten" Or wsQ.Name = "Auswertung" Then
Else
With wsQ
loLetzteQ = .Cells(.Rows.Count, 2).End(xlUp).Row
loLetzteZ = wsZ.Cells(wsZ.Rows.Count, 2).End(xlUp).Row + 1
If loLetzteZ 
Gruß Werner
Anzeige
AW: Beispielmappe
20.10.2017 20:34:28
Nagel
Hallo Werner,
FUNKT wie eine 1.
Vielen Dank dafür und die Geduld
Grüsse
Sebastian
Gerne u. Danke für die Rückmeldung. o.w.T.
20.10.2017 20:40:40
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Tabellenblätter in Excel zusammenführen


Schritt-für-Schritt-Anleitung

Um Inhalte aus mehreren Tabellenblättern in ein Tabellenblatt zu kopieren, kannst du den folgenden VBA-Code verwenden. Dieser Code erstellt kein neues Blatt und kopiert nur die ersten fünf Spalten ohne Formate.

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul ein: Rechtsklick auf "VBAProject (DeineArbeitsmappe)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Konsolidieren()
    Dim Wks As Worksheet
    Dim Bereich As Range
    Dim strLC As String
    Dim i As Integer
    Dim lngA As Long
    Dim lngE As Long
    Dim ZielBlatt As Worksheet

    Set ZielBlatt = ThisWorkbook.Worksheets("Konsolidierung") ' Zielblatt definieren
    ZielBlatt.Cells.ClearContents ' Vorhandene Daten löschen

    For i = 2 To Worksheets.Count
        With Worksheets(i).UsedRange
            strLC = .Cells(.Rows.Count, .Columns.Count).Address
            Set Bereich = .Range("A2:E" & strLC)
            lngA = ZielBlatt.Cells(Rows.Count, 1).End(xlUp).Row + 1
            lngE = Bereich.Rows.Count
            ZielBlatt.Range("A" & lngA & ":A" & (lngE + lngA - 1)) = Worksheets(i).Name
            Bereich.Copy
            ZielBlatt.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues
        End With
    Next i
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus: ALT + F8, wähle Konsolidieren und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Das Tabellenblatt Konsolidierung existiert bereits."

    • Lösung: Stelle sicher, dass du das Zielblatt vor dem Start des Makros mit ZielBlatt.Cells.ClearContents leerst oder lösche es manuell.
  • Fehler: Einige Daten werden nicht kopiert.

    • Lösung: Überprüfe, ob die Daten in den Quellblättern in den ersten fünf Spalten beginnen.

Alternative Methoden

Wenn du keine Makros verwenden möchtest, kannst du auch die folgenden Methoden ausprobieren:

  1. Power Query:

    • Gehe zu Daten > Daten abrufen > Aus anderen Quellen und wähle Leere Abfrage.
    • Verwende die M-Funktionen, um die verschiedenen Blätter zu kombinieren.
  2. Kopieren und Einfügen:

    • Öffne die Quellblätter und kopiere manuell die Daten in das Zielblatt. Dies ist jedoch zeitaufwändig und fehleranfällig.

Praktische Beispiele

  1. Konsolidierung von Verkaufsdaten:

    • Wenn du mehrere Blätter mit Verkaufsdaten pro Monat hast, nutze das Makro, um alle Daten in ein Blatt namens "Jahresübersicht" zu konsolidieren.
  2. Projektmanagement:

    • Bei der Verfolgung von Aufgaben in verschiedenen Projekten kannst du alle relevanten Informationen in ein "Projektübersicht"-Blatt zusammenführen.

Tipps für Profis

  • Verwendung von benannten Bereichen:

    • Wenn du benannte Bereiche in deinen Quellblättern verwendest, kannst du den Code anpassen, um nur bestimmte Daten zu extrahieren.
  • Datenvalidierung:

    • Vor der Konsolidierung solltest du sicherstellen, dass die Daten in den Quellblättern einheitlich sind, um Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Konsolidierung ohne Makros durchführen?
Antwort: Du kannst Power Query verwenden, um Daten aus mehreren Blättern zusammenzuführen, ohne VBA zu nutzen.

2. Frage
Kann ich die Formate beim Kopieren beibehalten?
Antwort: Der gegebene VBA-Code kopiert nur die Werte. Wenn du die Formate beibehalten möchtest, verwende PasteSpecial Paste:=xlPasteAll anstelle von Paste:=xlValues.

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