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 SubGruß 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