Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten aus mehreren Dateien zusammenführen

Daten aus mehreren Dateien zusammenführen
27.12.2016 09:22:59
Jürgen
Hallo Leute
Ich hab wieder mal Urlaub und wollte wieder mal an meiner exceldatei weiterarbeiten.
Hab mich durch verschiedene Beiträge gelesen aber irgendwie schaffe ich das nicht zu realisieren.
Alle Dateien sind gleich aufgebaut nur anderen Namen.
- Endungen .xls, xlsm, xlsx
- Tabelenname "Holzliste Manuell"
- nur Inhalte kopieren da auch Formeln enthalten sind Zeile B7-AC500 und AG7-AO500
- Ziel Datei hat die gleiche Struktur.
es geht mir darum ich hab viele kleine Holzlisten und am ende möchte ich alle Positionen untereinander zusammenführen.
Ich hoffe ihr könnt mir helfen, mit dem auslesen von geschlossenen Dateien habe ich meine Probleme.
Ich hab mal eine Musterdatei angehängt mit dem Auszug der Tabelle, es existieren noch andere Tabellen mit endlichen Formeln und Makros die wäre zu gross.
https://www.herber.de/bbs/user/110193.xls
mfg
Jürgen
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus mehreren Dateien zusammenführen
27.12.2016 11:57:48
Bastian
Du könntest es so versuchen grüß basti
Du musst aber den Tabellen Namen anpassen
Sub UseFileDialogOpen()
Dim lngCount As Long
Dim WSZFMA As Worksheet
Dim WB As Workbook
Dim ws As Worksheet
Dim A
Dim r
r = 1
Set WSZFMA = ThisWorkbook.Worksheets("Tabelle1")
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
For lngCount = 1 To .SelectedItems.Count
Set WB = Workbooks.Open(.SelectedItems(lngCount), True, True)
Set ws = WB.Worksheets("Holzliste Manuell")
With ws.UsedRange
If lngCount = 1 Then
A = .Value
Else
A = .Offset(1).Resize(.Rows.Count - 1, .Columns.Count)
End If
End With
WSZFMA.Cells(r, 1).Resize(UBound(A, 1), UBound(A, 2)) = A
r = r + UBound(A, 1)
WB.Close False
Next lngCount
End With
End Sub

Anzeige
AW: Daten aus mehreren Dateien zusammenführen
27.12.2016 12:49:31
Jürgen
Hallo Basti
Hab das getestet er kopiert allerdings jetzt die ganze tabelle unterhalb immer rein, das darf er aber nicht, sondern nur die Bereiche B7-AC500 und AG7-AO500 sonnst gehen mein ganzen Formeln nicht mehr.
Hast du da eine idee?
mfg
Jürgen
Fast geschaft
29.12.2016 20:51:15
Jürgen
Hallo Leute
Hab nun mit dem Code ein bisschen herumprobiert und fast alles hinbekommen nur einen Fehler habe ich noch.
Und ich komm nicht drauf wie ich das ändern kann.
Das makro kopiert denn Inhalt der ersten Datei, richtig an die Position B7.
Bei der 2ten Datei kopiert er es den Inhalt ab Zeile 500 rein, aber nicht an die letzte leere Zeile in Spalte B
und dort liegt mein Problem ich weiss nicht wie man das bei dem Code ändern muss das A / R / ubound kenne ich nicht. Das ganze ist mir einfach zu kompliziert.
Ich hoffe ihr habt eine Idee, wäre euch äußerst Dankbar.
mfg
Jürgen
Sub UseFileDialogOpen()
Dim lngCount As Long
Dim WSZFMA As Worksheet
Dim WB As Workbook
Dim ws As Worksheet
Dim A
Dim r
r = 7   'erste Zeile wo eingefügt wird
Set WSZFMA = ThisWorkbook.Worksheets("Holzliste Manuell")
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
For lngCount = 1 To .SelectedItems.Count
Set WB = Workbooks.Open(.SelectedItems(lngCount), True, True)
Set ws = WB.Worksheets("Holzliste Manuell")
With ws.Range("B7:AO500") 'Bereich wo kopiert wird
If lngCount = 1 Then
A = .Value
Else
A = .Resize(.Rows.Count - 1, .Columns.Count)  ' das müsste das ermitteln der letzten  _
zeile sein
End If
End With
WSZFMA.Cells(r, 2).Resize(UBound(A, 1), UBound(A, 2)) = A
r = r + UBound(A, 1)
WB.Close False
Next lngCount
End With
End Sub

Anzeige
AW: Fast geschaft
29.12.2016 21:58:57
Piet
Hallo Jürgen
wir können uns die Hand reichen, ich verstehe den Code auch nicht. Diese Zeile ermittelt nicht die LastZell in Spalte B!
A = .Resize(.Rows.Count - 1, .Columns.Count) ' das müsste das ermitteln der letzten zeile sein -- Hier fehlt xlUp im Code!!!
Probier es mal so: dazu solltest du noch die Variable lz (LastZell) mit Dim lz as Long einfügen
lz = .Cells(.Rows.Count, "B").End(xlUp).Row
A = .Resize(lz, .Columns.Count) - vielleicht mit lz + 1 oder lz -1 anpassen, selbst ausprobieren!
Ohne Garantie das es klappt, einfach mal ausprobieren
mfg Piet
Anzeige
AW: Fast geschaft
30.12.2016 00:03:16
Jürgen
Hallo Piet
Danke für deine Hilfe, aber es hat nichts gebracht, Code läuft durch und er fügt die 2te Datei wieder ab Zeile 500 ein :(
Vielleicht ne andere Idee?
mfg
Jürgen
Sub UseFileDialogOpen()
Dim lngCount As Long
Dim lz As Long
Dim WSZFMA As Worksheet
Dim WB As Workbook
Dim ws As Worksheet
Dim A
Dim r
r = 7   'erste Zeile wo eingefügt wird
Set WSZFMA = ThisWorkbook.Worksheets("Holzliste Manuell")
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
For lngCount = 1 To .SelectedItems.Count
Set WB = Workbooks.Open(.SelectedItems(lngCount), True, True)
Set ws = WB.Worksheets("Holzliste Manuell")
With ws.Range("B7:AO500") 'Bereich wo kopiert wird
If lngCount = 1 Then
A = .Value
Else
lz = .Cells(.Rows.Count, "B").End(xlUp).Row
A = .Resize(lz + 1, .Columns.Count)  ' vielleicht mit lz + 1 - oder lz - 1
End If
End With
WSZFMA.Cells(r, 2).Resize(UBound(A, 1), UBound(A, 2)) = A
r = r + UBound(A, 1)
WB.Close False
Next lngCount
End With
End Sub

Anzeige
Geschafft mit einschränkung
30.12.2016 11:12:45
Jürgen
Hallo Leute
Endlich hab es geschafft.
Alles funktioniert wie es soll, das einzige was komisch ist, es funktioniert nur wenn ich das Makro in der Tabelle Holzliste Manuell habe.
Wenn ich es in einem Modul liegen hab dann macht er irgendwas aber nicht das was es soll.
Per Commandbutton, oder was ich wollte von einer Userform aus per Makro starten klappt nicht.
Aber ich muss gestehen das habe ich noch nie kapiert, warum die VBA Code es einmal im Modul geht und einmal nicht.
mfg
Jürgen
Sub Sammelholzlisten_import()
Application.ScreenUpdating = False
If MsgBox("Bitte die Holzlisten auswählen, sie werden alle darunter eingefügt", vbOKCancel, " _
Holzlisten zusammenführen") = vbOK Then
'MsgBox "OK"
Else
Exit Sub
End If
Dim lngCount As Long
Dim WSZFMA As Worksheet
Dim WB As Workbook
Dim ws As Worksheet
Dim A
Dim r
r = 1
Set WSZFMA = ThisWorkbook.Worksheets("Holzliste Manuell")
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
For lngCount = 1 To .SelectedItems.Count
Set WB = Workbooks.Open(.SelectedItems(lngCount), True, True)
Set ws = WB.Worksheets("Holzliste Manuell")
With ws.Range("B7:AO500") 'Bereich wo kopiert wird
If lngCount = 1 Then
A = .Value
Else
A = .Resize(.Rows.Count - 1, .Columns.Count)
End If
End With
WSZFMA.Cells(Cells(Rows.Count, 3).End(xlUp).Row + 1, 2).Resize(UBound(A, 1), UBound(A, 2) _
) = A
r = r + UBound(A, 1)  ' sucht die letzte Zeile in spalte 3
WB.Close False
Next lngCount
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Geschafft mit einschränkung
03.01.2017 00:28:37
Jürgen
Hallo Michael
Sorry für die Späte Antwort aber hab gerade gesehen das es meine Antwort damals nicht gepostet hat.
Code funktioniert allerdings mit einer Einschränkung.
Er sollte nur den Inhalt kopieren und nicht die ganze zellen.
Die formeln darf es nicht mitnehmen nur den Inhalt.
Fals du da noch eine Idee hätest wäre ich dankbar.
mfg
Jürgen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus mehreren Excel-Dateien zusammenführen


Schritt-für-Schritt-Anleitung

Um mehrere Excel-Dateien zusammenzuführen, kannst Du ein Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, um die Daten aus verschiedenen Excel-Dateien zu konsolidieren:

  1. Öffne Excel und erstelle eine neue Arbeitsmappe oder öffne die vorhandene Datei, in die die Daten eingefügt werden sollen.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)".
    • Wähle "Einfügen" > "Modul".
  4. Kopiere und füge den folgenden Code ein:

    Sub Sammelholzlisten_import()
       Application.ScreenUpdating = False
       If MsgBox("Bitte die Holzlisten auswählen, sie werden alle darunter eingefügt", vbOKCancel, "Holzlisten zusammenführen") = vbOK Then
           '...
       Else
           Exit Sub
       End If
       Dim lngCount As Long
       Dim WSZFMA As Worksheet
       Dim WB As Workbook
       Dim ws As Worksheet
       Dim A
       Dim r
       r = 1
       Set WSZFMA = ThisWorkbook.Worksheets("Holzliste Manuell")
       With Application.FileDialog(msoFileDialogOpen)
           .AllowMultiSelect = True
           .Show
           For lngCount = 1 To .SelectedItems.Count
               Set WB = Workbooks.Open(.SelectedItems(lngCount), True, True)
               Set ws = WB.Worksheets("Holzliste Manuell")
               With ws.Range("B7:AO500")
                   A = .Value
               End With
               WSZFMA.Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Resize(UBound(A, 1), UBound(A, 2)) = A
               WB.Close False
           Next lngCount
       End With
       Application.ScreenUpdating = True
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus:

    • Drücke ALT + F8, wähle Sammelholzlisten_import und klicke auf "Ausführen".
  7. Wähle die Excel-Dateien aus, die Du zusammenführen möchtest.


Häufige Fehler und Lösungen

  • Problem: Die Daten werden ab der falschen Zeile eingefügt.

    • Lösung: Stelle sicher, dass Du die letzte leere Zeile korrekt ermittelst. Verwende .End(xlUp) im Code, um die richtige Position zu finden.
  • Problem: Das Makro kopiert die gesamte Tabelle anstelle der angegebenen Bereiche.

    • Lösung: Ändere den Code so, dass nur die gewünschten Bereiche (B7:AC500 und AG7:AO500) kopiert werden.
  • Problem: Der Code funktioniert nur, wenn er im Arbeitsblatt-Modul ist.

    • Lösung: Stelle sicher, dass Du das Makro im richtigen Modul speicherst oder teste es in einem Modul und rufe es dann von einem Button oder einer Userform auf.

Alternative Methoden

Wenn Du mehrere Excel-Dateien zusammenführen möchtest, ohne ein Makro zu verwenden, kannst Du auch die folgenden Methoden ausprobieren:

  • Power Query: Mit Power Query kannst Du Daten aus verschiedenen Excel-Dateien zusammenführen, indem Du die Abfragen erstellst, die die Daten extrahieren und kombinieren.
  • Kopieren und Einfügen: Manuell die gewünschten Daten aus jeder Datei kopieren und in die Zielarbeitsmappe einfügen, was allerdings zeitaufwendig ist.

Praktische Beispiele

Angenommen, Du hast mehrere Excel-Dateien mit einer Tabelle namens "Holzliste Manuell", die jeweils die gleichen Datenstruktur haben. Du möchtest diese Daten in eine zentrale Datei zusammenführen. Verwende das oben gezeigte Makro, um die Daten effizient zu konsolidieren.

Ein Beispiel für das Kopieren von Daten aus einer Datei könnte so aussehen:

A = ws.Range("B7:AC500").Value

Hierbei wird der Bereich B7 bis AC500 aus der Quelldatei in die Zieldatei kopiert.


Tipps für Profis

  • Verwende strukturierte Daten: Stelle sicher, dass alle Dateien die gleiche Struktur haben, um Fehler beim Zusammenführen zu vermeiden.
  • Makros speichern: Speichere Deine Makros in einer persönlichen Arbeitsmappe, um sie in anderen Excel-Dateien zu verwenden.
  • Testen: Teste das Makro mit einer Kopie Deiner Daten, bevor Du es auf die Originaldaten anwendest.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Excel-Dateien zusammenführen, ohne jede Datei zu öffnen? Du kannst dies mit Power Query tun, indem Du eine Abfrage erstellst, die auf einen Ordner verweist und alle Dateien darin verarbeitet.

2. Was ist der Unterschied zwischen dem Kopieren von Inhalten und dem Kopieren der Formeln? Beim Kopieren von Inhalten werden nur die Werte übertragen, während beim Kopieren der Formeln auch die zugrunde liegenden Berechnungen übernommen werden, was in vielen Fällen zu unerwarteten Ergebnissen führen kann.

3. Kann ich auch mehrere Excel-Dateien zusammenführen ohne Makro? Ja, es gibt verschiedene Möglichkeiten, dies zu tun, z.B. durch Power Query oder manuelles Kopieren und Einfügen der Daten.

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