Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1736to1740
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige