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

Forumthread: VBA - gezielte Daten aus mehreren Dateien zusammenführen

VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 13:03:58
Markus
Hallo,
ich bastel gerade an einer Daten-Konsolidierung. Hierfür möchte ich einen definierten Zellenbereich aus "n" verschiedenen Quell-Dateien untereinander weg in eine Zieldatei schreiben. Habe mir bereits mittels diverser Forenbeiträge und Tutorials einen kleinen VBA Code zusammen gebaut. Die Struktur und Benennung bei allen Quelldateien ist immer gleich, jedoch gibt es mal mehr und mal weniger Quelldateien.
was bisher funktioniert:
- Abfrage des Pfades, wo die Quell-Dateien liegen
- kopieren des definierten Zellenbereiches eines bestimmten Tabellenblattes der Quelldateien
- einfügen auf einem vorgesehenen Tabellenblatt der Zieldatei als Werte
was fehlt:
die Zellen der nächste Quelle-Datei werden bis jetzt an gleicher Stelle in die Zieldatei hineinkopiert. Eigentlich müssten die unterhalb des letzten Eintrages eingefügt werden. habe es aber mit "NextRow = Cells(Rows.Count, 5).End(xlUp).Row + 1 " nicht zusammenbringen können. Die letzte Zeile sollte dabei anhand der Spalte E ermittelt werden, da in anderen Bereich bereits Formeln bis ziemlich weit nach unten eingetragen sind.
zur Info:
Der Bereich D7:D46 beinhaltet in der Quelle die eingetlichen Datensätze und soll in der Zieldatei ab Spalte E eingetragen werden. Dieser Bereich ist fix in alle Quellen und ändert sich auch nicht von der Zeilen-Anzahl. Der Name der Quell-Datei soll zwecks Zuordnung der Datensätze aus Zelle AE2 der Quelldatei übernommen werden und in Spalte D vor jedem der zugehörigen Datenzeilen eingetragen werden.
Mein Code bisher

Sub Dateien_importieren()
Dim Zielarbeitsmappe As Object
Dim Quelle As Object
Dim pfad As String
Dim datei As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Zielarbeitsmappe = ActiveWorkbook
pfad = InputBox("Pfad bitte per copy & paste einfügen", "Pfad der Quell-Dateien") & "\"
datei = Dir(CStr(pfad & "*xl*"))
Do While datei  ""
Set Quelle = Workbooks.Open(pfad & datei, False, True)
Quelle.Sheets(3).Range("D7:CD46").Copy
Zielarbeitsmappe.Sheets("input_reply_dataset").Cells(5, 5).PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
Zielarbeitsmappe.Sheets("input_reply_dataset").Range("D5:D44").PasteSpecial xlPasteValues
Quelle.Close
datei = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Set Zielarbeitsmappe = Nothing
Set Quelle = Nothing
MsgBox "Dateien wurden erfolgreich übernommen"
End Sub
Besten Dank für Eure Hilfe!
Hoffe, ich konnte mein Problem ausführlich genug schildern und das Teile meines bisherigen Codes auch anderen anderen weiterhelfen kann :)
Ciao, Markus
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 13:13:51
Werner
Hallo Markus,
With Zielarbeitsmappe.Sheets("input_reply_dataset")
Quelle.Sheets(3).Range("D7:CD46").Copy
.Range("E" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
.Range("D" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With
Gruß Werner
Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 13:47:22
Markus
Hallo Werner,
besten Dank für die rasche Antwort :) Funktioniert weitestgehend.
Der Name der Quelldatei aus aus Zelle AE2 wird dabei allerdings um eine Zeile versetzt nach unten kopiert, sprich in die Zeile unterhalb der zugehörigen Daten. Grund ist, das end(XLUP) auf die ebenfalls auf Spalte E abzielt.
Habe bereits eine kleine Änderung eingebaut, sodass nun beim ersten und letzten Datensatz der Name der Quelldatei in SPalte D eingetragen wird.
Aber wie schaffe ich es, dass es für alle Zeilen des Dantensatzes funktioniert (sprich der Bereich)

With Zielarbeitsmappe.Sheets("input_reply_dataset")
Quelle.Sheets(3).Range("D7:CD46").Copy
.Range("E" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecialx lPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "E").End(xlUp).Offset(0).Row).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With

Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 14:14:28
Werner
Hallo,
meinst du so?
Dim loLetzte As Long
With Zielarbeitsmappe.Sheets("input_reply_dataset")
loLetzte = .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row
Quelle.Sheets(3).Range("D7:CD46").Copy
.Cells(loLetzte, "E").PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
.Cells(loLetzte, "D").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With
Gruß Werner
Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 14:32:24
Markus
Hallo Werner,
nochmals Danke für diene Unterstützung.
Damit wird der Name der Quelldatei in Spalte D leider nach wie vor nur vor die erste Datenzeile geschrieben. Aber leider nicht vor alle 40 Datenzeilen.
Ich hab gerade es sehr schlicht lösen können, indem ich 40x die Kopier-Funktion wiederhole.
(Unten im Code ein Beispiel mit 10 Wiederholungen)
ginge so etwas auch eleganter?
Set Quelle = Workbooks.Open(pfad & datei, False, True)
With Zielarbeitsmappe.Sheets("input_reply_dataset")
Quelle.Sheets(3).Range("D7:CD46").Copy
.Range("E" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
'ab hier die 10 exemplarischen Wiederholungen
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With

Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 14:40:33
Markus
Hallo Werner,
nochmals Danke für diene Unterstützung.
Damit wird der Name der Quelldatei in Spalte D leider nach wie vor nur vor die erste Datenzeile geschrieben. Aber leider nicht vor alle 40 Datenzeilen.
Ich hab gerade es sehr schlicht lösen können, indem ich 40x die Kopier-Funktion wiederhole.
(Unten im Code ein Beispiel mit 10 Wiederholungen)
ginge so etwas auch eleganter? Meine Variante ist alles andere als performant. Ich müsste also den Bereich der 40 Zeilen ansprechen, dann wäre es nur 1 Kopiervorgang und nicht 40 einzelne.
Set Quelle = Workbooks.Open(pfad & datei, False, True)
With Zielarbeitsmappe.Sheets("input_reply_dataset")
Quelle.Sheets(3).Range("D7:CD46").Copy
.Range("E" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
'ab hier die 10 exemplarischen Wiederholungen
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With

Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 14:50:58
Werner
Hallo,
With Zielarbeitsmappe.Sheets("input_reply_dataset")
loLetzte = .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row
Quelle.Sheets(3).Range("D7:CD46").Copy
.Cells(loLetzte, "E").PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2").Copy
.Cells(loLetzte, "D").Resize(.Cells(.Rows.Count, "E").End(xlUp).Row - loLetzte + 1) _
.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With
Gruß Werner
Anzeige
AW: VBA - gezielte Daten aus mehreren Dateien zusammenführen
31.01.2020 14:51:37
Markus
ich habs geschafft :)
einfach eine Range um die .Range gelegt :)
With Zielarbeitsmappe.Sheets("input_reply_dataset")
Quelle.Sheets(3).Range("D7:CD46").Copy
.Range("E" & .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row).PasteSpecial xlPasteValues
Quelle.Sheets(3).Range("AE2:AE2").Copy
Range(.Range("D" & .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Row), .Range("D" & .Cells(.Rows. _
Count, "E").End(xlUp).Offset(0).Row)).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Quelle.Close False
End With

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Daten aus mehreren Excel-Dateien zusammenführen


Schritt-für-Schritt-Anleitung

Um gezielt Daten aus mehreren Excel-Dateien zusammenzuführen, kannst du VBA nutzen. Hier ist eine Schritt-für-Schritt-Anleitung, die dir hilft, die Daten aus verschiedenen Dateien in eine Zieldatei zu konsolidieren.

  1. Öffne Excel und erstelle ein neues Modul:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke im Menü auf Einfügen und wähle Modul.
  2. Füge den folgenden Code ein:

    Sub Dateien_importieren()
       Dim Zielarbeitsmappe As Workbook
       Dim Quelle As Workbook
       Dim pfad As String
       Dim datei As String
       Dim loLetzte As Long
    
       Application.ScreenUpdating = False
       Application.DisplayAlerts = False
       Set Zielarbeitsmappe = ActiveWorkbook
       pfad = InputBox("Pfad bitte per copy & paste einfügen", "Pfad der Quell-Dateien") & "\"
       datei = Dir(CStr(pfad & "*xl*"))
    
       Do While datei <> ""
           Set Quelle = Workbooks.Open(pfad & datei, False, True)
           With Zielarbeitsmappe.Sheets("input_reply_dataset")
               loLetzte = .Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row
               Quelle.Sheets(3).Range("D7:CD46").Copy
               .Cells(loLetzte, "E").PasteSpecial xlPasteValues
               Quelle.Sheets(3).Range("AE2").Copy
               .Cells(loLetzte, "D").Resize(40).PasteSpecial xlPasteValues
           End With
           Quelle.Close False
           datei = Dir()
       Loop
    
       Application.ScreenUpdating = True
       Application.DisplayAlerts = True
       MsgBox "Dateien wurden erfolgreich übernommen"
    End Sub
  3. Passe den Code an deine Bedürfnisse an:

    • Stelle sicher, dass der Bereich "D7:CD46" und die Zieldatei korrekt sind.

Häufige Fehler und Lösungen

  • Fehler: Daten werden in der falschen Zeile eingefügt.

    • Lösung: Achte darauf, den loLetzte-Wert korrekt zu berechnen, bevor du die Daten einfügst. Verwende die Methode .End(xlUp) auf die richtige Spalte.
  • Fehler: Das Makro funktioniert nicht, wenn keine Quelldateien vorhanden sind.

    • Lösung: Füge eine Überprüfung ein, um sicherzustellen, dass der pfad nicht leer ist und dass es tatsächlich Dateien gibt.

Alternative Methoden

Wenn du mehrere Excel-Dateien automatisch zusammenführen möchtest, ohne ein Makro zu verwenden, kannst du auch Power Query nutzen:

  1. Daten abrufen:

    • Gehe zu Daten > Daten abrufen > Aus Datei > Aus Ordner.
  2. Ordner auswählen:

    • Wähle den Ordner, der die Excel-Dateien enthält.
  3. Kombinieren:

    • Wähle die Dateien aus und klicke auf Kombinieren, um die Daten in einer Tabelle zusammenzuführen.

Praktische Beispiele

Hier ist ein Beispiel, wie du Excel-Daten aus verschiedenen Dateien zusammenführen kannst:

  • Szenario: Du hast 10 Excel-Dateien, die alle die gleiche Struktur haben und du möchtest die Daten aus einem bestimmten Bereich in ein Master-Dokument übertragen.
  • Lösung: Verwende den oben genannten VBA-Code, um die Daten aus den Dateien zusammenzuführen und dabei sicherzustellen, dass die Quelldateinamen korrekt in die Zieldatei übernommen werden.

Tipps für Profis

  • Optimierung: Vermeide häufige Wechsel zwischen Excel und VBA, indem du alle Daten zuerst in ein Array lädst und dann auf einmal in die Zieldatei schreibst.
  • Debugging: Nutze Debug.Print im Code, um während der Ausführung Werte zu überprüfen und sicherzustellen, dass der Code wie gewünscht funktioniert.
  • Fehlerbehandlung: Implementiere On Error Resume Next und weitere Fehlerbehandlungen, um den Code robuster zu machen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Excel-Dateien zusammenführen ohne Makro?
Du kannst Power Query verwenden, um Daten aus mehreren Excel-Dateien zu kombinieren, ohne VBA zu nutzen.

2. Was tun, wenn der Pfad zu den Quelldateien falsch ist?
Überprüfe den eingegebenen Pfad und stelle sicher, dass du die richtigen Dateinamen und -formate verwendest.

3. Wie kann ich sicherstellen, dass alle Daten korrekt eingefügt werden?
Testen den Code mit einer kleinen Anzahl an Dateien und vergewissere dich, dass der Code die Daten an den richtigen Stellen einfügt.

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