quba
Goto Top

mehrer Excel Tabellen mit mehreren Blättern zusammenführen

Hallo zusammen,

ich habe mehrere Excel Tabellen mit jeweils mehreren Tabellenblättern. (Tabelle 1, Tabelle 2, Tabelle 3, ....)
Jedes Tabellenblatt heißt in jeder Tabelle gleich

Nun suche ich eine Möglichkeit, alle Dateien zu einer Zusammenzuführen.

Es sollen alle Werte aller Dateien von Tabelle 1, Tabelle 2, usw. in eine neue Datei untereinander eingefügt werden und dabei natürlich die Tabellennamen beibehalten werden.

Ich hoffe es ist verständlich was ich meine.

Hat mir ja jemand ein Tool, dass das kann oder ein Makro?

Vielen Dank!

Grüße
quba

Content-ID: 49023

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

Ausgedruckt am: 08.11.2024 um 11:11 Uhr

bastla
bastla 19.01.2007 um 13:20:30 Uhr
Goto Top
Hallo quba!

Zu Deinem eher allgemein formulierten Anliegen könnte ich folgende eher allgemein formulierte Lösung anbieten:
Option Explicit

Sub Sammle()
Const sSourcePath As String = "D:\Viele viele XLS"  
Dim wbGes As Workbook, wsTarget As Worksheet
Dim wbTeil As Workbook, wsSource As Worksheet
Dim fso As Object, oFile As Object
Dim rNext As Integer, bSheetFound As Boolean
Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")  

'Quell-Ordner durchsuchen  
For Each oFile In fso.GetFolder(sSourcePath).Files
    'nur .xls-Dateien bearbeiten  
    If LCase(Right(oFile.Name, 4)) = ".xls" Then  
        Application.Workbooks.Open (oFile.Path)
        Set wbTeil = ActiveWorkbook
        'alle Tabellen der Gesamt-Datei bearbeiten  
        For Each wsTarget In wbGes.Worksheets
            'Tabelle auch in Teil-Datei enthalten?  
            For Each wsSource In wbTeil.Worksheets
                bSheetFound = False
                If LCase(wsTarget.Name) = LCase(wsSource.Name) Then
                    bSheetFound = True
                    Exit For
                End If
            Next
            If bSheetFound Then
                'Tabelle da, Daten kopieren ...  
                wbTeil.Worksheets(wsTarget.Name).Activate
                Range("A1").Select  
                Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Copy
                '... und einfügen in Gesamt-Datei-Tabelle...  
                wbGes.Worksheets(wsTarget.Name).Activate
                '... ab der nächsten freien Zeile  
                rNext = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
                ActiveSheet.Cells(rNext, 1).Activate
                ActiveSheet.Paste
                Application.CutCopyMode = False
            End If
        Next 'Tabelle  
        wbTeil.Close
    End If
Next 'Datei  
wbGes.Worksheets(1).Activate
'Gesamt-Datei speichern  
wbGes.Save
MsgBox "Fertig."  
End Sub
Vorgangsweise:
  • Neue Excel-Datei (mit allen benötigten Tabellen für die gesammelten Daten) erstellen und nicht im gleichen Pfad wie die Einzel-Dateien speichern,
  • obiges VBA-Programm im VBA-Editor in das Code-Fenster von "Diese Arbeitsmappe" oder wahlweise in ein neues Modul einfügen,
  • Ordnerpfad für Teil-Dateien anpassen (derzeit "D:\Viele viele XLS") und
  • starten.

Ablauf:
Es werden alle Dateien des Quellordners mit dem Dateityp ".xls" geöffnet und die Namen der darin enthaltenen Tabellen mit den Tabellennamen in der Sammeldatei verglichen. Bei Übereinstimmung der Tabellennamen werden die Inhalte (inkl. Formeln und Formatierungen) aus der Teil-Datei-Tabelle kopiert und in der Gesamt-Datei-Tabelle ab der ersten leeren Zeile eingefügt. Abschließend wird die Gesamt-Datei gespeichert.

Bitte beachten:
  • Es werden in dieser Version keine neuen Tabellen in der Gesamt-Datei erstellt, diese müssen bereits mit den richtigen Namen existieren.
  • Die Teil-Dateien dürfen nicht geöffnet sein, ansonsten "Automatisierungsfehler".

Grüße
bastla
quba
quba 19.01.2007 um 14:52:41 Uhr
Goto Top
Genial! Danke bastla!!

Du hast mein Problem genau verstanden und die richtige Lösung parat gehabt!

Vielen herzlichen Dank für deine Hilfe! Hat alles bestens funktioniert!

Grüße
quba
simba2282
simba2282 07.02.2007 um 16:33:12 Uhr
Goto Top
Hallo,

ich habe ein ähnliches Problem und die hier angegebene Lösung funktioniert auch bei meinem Problem in soweit schon ganz gut, dass die Daten aus den Einzeldateien untereinander in der Sammeldatei eingefügt werden. Da ich aber mit Tasknamen und Dropdown Menues arbeite kommt immer eine meldung in der ihc den Tasknamen umbenennen muss. Kann dies irgendwie umgangen werden?

Und das ganze geht auch nur wenn die zusammenfassende Datei die gleiche Struktur hat wie die einzelnen...

Ich möchte aber ganz gerne nur bestimmte Spalten aus den einzelnen Dateien rüberziehen (Beispiel: in den Einzelsheet können Stunden pro Tag eingegeben werden, die dann wochenweise aufsummiert werden. In der Sammeldatei hätte ich gerne nur die Wochenwerte...)

Ist das auch irgendwie möglich?

Und das dritte Problem ist, dass die Daten nicht automatisch aktualisiert werden, wenn ich in den Einzeldateien etwas ändere.

Ich habe leider so gut wie gar keine Ahnung mit dem Programmieren in VBA und wäre für jede Hilfe dankbar.

Ich kann auch gerne Beispiel Dateien schicken, wenn das hilft.

Viele Grüße,
simba2282
bastla
bastla 07.02.2007 um 16:50:07 Uhr
Goto Top
Hallo simba2282 und willkommen im Forum!

Du wirst eine wesentlich bessere Chance auf Antworten haben, wenn Du ein neues Thema eröffnest - hier erfährt außer mir nur noch quba von Deinem Anliegen ...

Aber vorweg: Versuch Deine Aufgabenstellung konkreter zu formulieren (insbesondere hinsichtlich des Umfanges - für das Zusammenfassen von 5 oder auch 10 Tabellen wirst Du kein VBA brauchen - und der Struktur / des Aufbaues der Einzeltabellen - eine Tabelle je KW oder mehrere Wochen auf einem Blatt, etc).

Überlege auch gleich, was schon vorweg in den Einzeltabellen erfolgen könnte - etwa das Berechnen der Wochensummen (falls das nicht ohnehin schon geschieht) ...

Zum Thema "Automatische Aktualisierung": Dafür würde eher die Verwendung von Excel-Formeln sprechen, wobei aber die VBA-Lösung beliebig oft mit "leeren" Zieltabellen ablaufen könnte ...

BTW: Mit "Tasknamen" sind vermutlich "Bereichsnamen" gemeint ...

Für mehr habe ich momentan leider nicht Zeit (bin auch nicht ganz fit), daher nochmals der Hinweis auf ein neues Thema.

Grüße
bastla