Microsoft Excel

Herbers Excel/VBA-Archiv

Zusammenführung aus mehreren Dateien


Betrifft: Zusammenführung aus mehreren Dateien von: Bernd
Geschrieben am: 13.09.2019 09:34:46

Hallo,

ich habe zwar ähnliche Fragestellungen mit Lösungen im Netz gefunden, aber zu 100% passen die bei mir leider nicht wegen der Nebenbedingung, dass der Import aus einem bestimmte Tabellenblatt erfolgen soll und in der Zusammenführung der Name der Quelldatei stehen sollte.
Im Detail:

Ich möchte in einer Datei (Zusammenführung) gerne zeilenweise die Daten aus Quelldateien einsammeln. Da einzulesenden Dateien möchte ich gerne per Mehrfachmarkierung im Explorer auswählen. Pro Datei interessiert mich nur ein bestimmtes Tabellenblatt, das in jeder Quelldatei "Daten" heißt. Der Aufbau der einzulesenden Tabelle aus jeder Datei ist immer identisch. Der Spaltenkopf befindet sich stets in Zeile 4 und die Quelldaten beginnen ab Zeile 5.

Am Schluss sollte in der Zusammenführung eine große Liste identisch zum Aufbau der Quelldateientstehen mit der Besonderheit, dass in Spalte A jeweils der Dateiname der Quelldatei stehen sollte!

Ich habe Musterdateien zum Testen erstellt:

https://www.herber.de/bbs/user/132019.zip

Vielen Dank im Voraus für ein passenden Code, der meine "Nebenbedingungen" berücksichtigt.

Viele Grüße
Bernd

  

Betrifft: AW: Zusammenführung aus mehreren Dateien von: 1712878.html
Geschrieben am: 13.09.2019 12:33:34

Hi,
Du hast ja nur xlsx-Dateien gepostet. Zeig doch mal, was Du an Programmiercode schon hast. Dann kann mann mal gucken, wo Anpassungsbedarf besteht.

gruß
Regina

  

Betrifft: AW: Zusammenführung aus mehreren Dateien von: 1712913.html
Geschrieben am: 13.09.2019 14:03:33

Hallo Regina,

nachfolgender Code gefällt mir schon recht gut. Dort muss ich die Quelldateien in ein vorgegebens Verzeichnis reinkopieren. Persönlich würde mir flexible Auswahl über Explorer besser gefallen.

Die Spaltenköpfe werden es aus jeder Quelldatei rüberkopiert : Einmal reicht mir natürlich.

Wäre das "anpassungsfähig"?

Viele Grüße
Bernd

PS: Hier der Code:

Option Explicit

Sub MWTabellenAusMehrerenDateienEinlesen()
       Dim oTargetSheet As Object
       Dim oSourceBook As Object
       Dim sPfad As String
       Dim sDatei As String
       Dim lErgebnisZeile As Long
       Dim s As Long
       Dim z As Long
      
         Application.ScreenUpdating = False
        
         'Schritt 1: Neues Arbeitsblatt für die Ergebnisse erstellen
         Set oTargetSheet = ActiveWorkbook.Sheets.Add
         lErgebnisZeile = 1 'Ergebnisse eintragen ab Zeile 1
        
         'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
         sPfad = "C:\Herber\LISTE\"
         sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
        
         Do While sDatei <> ""
        
             'Schritt 3: öffnen der Datei und Datenübertragung
             Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
            
             'Datenübertragung alle genutzten Zeilen und Spalten
             For z = 1 To oSourceBook.Sheets("Daten").UsedRange.Rows.Count
                 'Keine Leerzeilen verarbeiten
                 If Trim(CStr(oSourceBook.Sheets("Daten").Cells(z, 1).Value)) <> "" Then
                     For s = 1 To oSourceBook.Sheets("Daten").UsedRange.Columns.Count
                         'Spalte 1 - Dateinamen
                         oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
                         'Spalte 2 bis n - Tabelleninhalte des Arbeitsblattes "Daten"
                         oTargetSheet.Cells(lErgebnisZeile, s + 1).Value = _
                             oSourceBook.Sheets("Daten").Cells(z, s).Value
                     Next s
                     lErgebnisZeile = lErgebnisZeile + 1
                 End If
             Next z
            
             'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
             oSourceBook.Close False 'nicht speichern
            
             'Nächste Datei
             sDatei = Dir()
         Loop
        
         Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
        
         'Variablen aufräumen
         Set oTargetSheet = Nothing
         Set oSourceBook = Nothing
    End Sub

  

Betrifft: AW: Zusammenführung aus mehreren Dateien von: 1713025.html
Geschrieben am: 14.09.2019 10:48:41

Hi,
das sollte dann so funktionieren:

Option Explicit
   
   Sub MWTabellenAusMehrerenDateienEinlesen()
      Dim oTargetSheet As Object
      Dim oSourceBook As Object
      Dim sPfad As String
      Dim sDatei As String
      Dim lErgebnisZeile As Long
      Dim s As Long
      Dim z As Long
      Dim var_dateien As Variant
      Dim lng_zaehler As Long
     
        Application.ScreenUpdating = False
       
        'Schritt 1: Neues Arbeitsblatt für die Ergebnisse erstellen
        Set oTargetSheet = ActiveWorkbook.Sheets.Add
        lErgebnisZeile = 1 'Ergebnisse eintragen ab Zeile 1
       
       var_dateien = Application.GetOpenFilename(MultiSelect:=True)
       
       
         
      For lng_zaehler = 1 To UBound(var_dateien)
       
            'Schritt 3: öffnen der Datei und Datenübertragung
            Set oSourceBook = Workbooks.Open(var_dateien(lng_zaehler), False, True) 'nur lesend ö _
   ffnen
           
            'Datenübertragung alle genutzten Zeilen und Spalten
            For z = 1 To oSourceBook.Sheets("Daten").UsedRange.Rows.Count
                'Keine Leerzeilen verarbeiten
                If Trim(CStr(oSourceBook.Sheets("Daten").Cells(z, 1).Value)) <> "" Then
                    For s = 1 To oSourceBook.Sheets("Daten").UsedRange.Columns.Count
                        'Spalte 1 - Dateinamen
                        oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
                        'Spalte 2 bis n - Tabelleninhalte des Arbeitsblattes "Daten"
                        oTargetSheet.Cells(lErgebnisZeile, s + 1).Value = _
                            oSourceBook.Sheets("Daten").Cells(z, s).Value
                    Next s
                    lErgebnisZeile = lErgebnisZeile + 1
                End If
            Next z
           
            'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
            oSourceBook.Close False 'nicht speichern
           
   
   Next
       
        Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
       
        'Variablen aufräumen
        Set oTargetSheet = Nothing
        Set oSourceBook = Nothing
   End Sub
   
   
Gruß Regina
  

Betrifft: AW: Zusammenführung aus mehreren Dateien von: 1713419.html
Geschrieben am: 17.09.2019 10:44:48

Hallo Regina.

läuft schnell und perfekt ab! Ein kleines Detail vielleicht, die Spaltenköpfe werden wiederholt. Im Prinzip brauche ich die gar nicht. Könnte ich in der Sammeldatei einmal in Zeile 1 eintragen. Kann man doch so "optimieren"?

Viele Grüße und schon mal ein dickes Danke!
Bernd

  

Betrifft: AW: Zusammenführung aus mehreren Dateien von: 1713468.html
Geschrieben am: 17.09.2019 14:07:59

Moin, dann müsstest Du in dieser Zeile:
For z = 1 To oSourceBook.Sheets("Daten").UsedRange.Rows.Count
die 1 durch eine 2 ersetzen.

Gruß
Regina

  

Betrifft: Perfekt! Danke! von: 1713600.html
Geschrieben am: 18.09.2019 09:36:26

Nochmals besten Dank,

viele Grüße
Bernd

Beiträge aus dem Excel-Forum zum Thema "Zusammenführung aus mehreren Dateien"