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 Excel-Dateien importieren mit V

Daten aus mehreren Excel-Dateien importieren mit V
09.09.2015 14:08:54
Anja
An alle Excelhelden…
Ist es möglich in alle Dateien aus einem Ordner in eine Tabelle zu importieren?
Ich habe eine Datei mit mehreren Tabellenblättern. Jetzt möchte ich dort Daten aus anderen Excel-Dateien importieren. Die zu importierenden Dateien befinden sich alle in einem Ordner. Ich möchte gerne einen Button haben, der das sozusagen automatisch erledigt.
Hauptdatei
Datei in die die Daten importiert werden sollen.
Die Daten sollen auf Tabellenblatt „Sachbearbeiter“ importiert werden.
Und zwar ab Zelle A 16
Spalten: A-Q
Aufbau gleich dem der Importdateien (Gleiche Spaltenanzahl und Überschriften)
Import Dateien
Mehrere Dateien in gleichem Ordner
Unterschiedliche Dateinamen
Sind alle gleich aufgebaut (Gleiche Spaltenanzahl und Überschriften)
Zeilenanzahl variabel, da der Inhalt unterschiedlich lang ist.
Name Tabellenblatt aus dem die Daten ausgelesen werden sollen: VerfahrenslisteSB
Spalten: A-Q
Ich habe einen Code mit dem ich eine Datei importieren kann, welcher super läuft. Ich weiß aber nicht, wie ich ihn so anpassen kann, dass er mehrere Dateien ausliest. Die Daten müssten schließlich untereinander angeordnet werden, damit bereits vorhandener Inhalt nicht überschirieben wird, wenn bereits z.B. die erste Datei importiert wurde. Das heißt, der Code müsste prüfen wo die letzte benutzte Zeile ist, um die folgenden Daten darunter einzutragen.
Ich würde mich freuen, wenn jemand sich darüber sein Superhirn zerbrechen würde. Danke im Voraus.
Anja
Mein Code:
Private Sub cmdImport_Click()
Application.ScreenUpdating = False
Dim Quelle As Object, Ziel As Object
Dim Datei As String
On Error GoTo Fehler
'Dialog "Datei öffnen" anzeigen
Datei = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm")
'Abbrechen falls keine Datei ausgewählt
If Datei = "Falsch" Then
MsgBox "keine Datei ausgewählt", , "Abbruch"
Exit Sub
End If
'MsgBox "Ausgewählte Datei: " & Datei, , ""
'Ausgewählte Datei öffnen
Workbooks.Open Filename:=Datei
Set Quelle = ActiveWorkbook.Worksheets(1)
Set Ziel = ThisWorkbook.Worksheets(1)
'kopieren und einfügen
Quelle.UsedRange.Copy Ziel.Cells(2, 1)
ActiveWorkbook.Close
'Speicher freigeben
Set Quelle = Nothing
Set Ziel = Nothing
Exit Sub
Fehler:
Set Quelle = Nothing
Set Ziel = Nothing
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "Fehler"
Application.ScreenUpdating = True
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus mehreren Excel-Dateien importieren mit V
09.09.2015 14:12:07
Anja
habe vergessen zu erwähnen das die Daten in den Importdateien auch erst ab Zeile 16 (A16)beginnen.
Also von Importdatei A16-Q? in Hauptdatei A 16-O?....

AW: Daten aus mehreren Excel-Dateien importieren mit V
09.09.2015 16:47:55
fcs
Hallo Anja,
hier mein Lösungsvorschlag.
Gruß
Franz
Private Sub cmdImport_Click()
Application.ScreenUpdating = False
Dim wbQuelle As Workbook, Quelle As Worksheet, Ziel As Worksheet
Dim Datei As Variant, varDateien
Dim Zeile_Z As Long, Zeile_Q1 As Long, Zeile_Q2 As Long
Dim rngZelle As Range
On Error GoTo Fehler
'Dialog "Datei öffnen" anzeigen
varDateien = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm", _
Title:="Bitte zu importieren Datei(en) auswählen", MultiSelect:=True)
'Abbrechen falls keine Datei ausgewählt
If Not IsArray(varDateien) Then
MsgBox "keine Datei ausgewählt", , "Abbruch"
Exit Sub
End If
Application.ScreenUpdating = False
Set Ziel = ThisWorkbook.Worksheets("Sachbearbeiter")
With Ziel
'Startzeile setzen
Set rngZelle = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If rngZelle Is Nothing Then
Zeile_Z = 16
Else
Zeile_Z = rngZelle.Row
End If
If Zeile_Z = Zeile_Q1 Then
'kopieren und einfügen
'      .Range(.Rows(Zeile_Q1), .Rows(Zeile_Q2)).Copy Ziel.Cells(Zeile_Z, 1)
.Range(.Cells(Zeile_Q1, 1), .Cells(Zeile_Q2, 17)).Copy Ziel.Cells(Zeile_Z, 1)
'nächste Einfügezeile
Zeile_Z = Zeile_Z + Zeile_Q2 - Zeile_Q1 + 1
End If
End With
NextDatei:
wbQuelle.Close savechanges:=False
'Speicher freigeben
Set Quelle = Nothing
Set wbQuelle = Nothing
Next Datei
Application.ScreenUpdating = True
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
MsgBox "FehlerNr.: " & .Number & vbNewLine & vbNewLine _
& "Beschreibung: " & .Description, _
vbCritical, "Fehler"
End Select
End With
'Speicher freigeben
Set Quelle = Nothing
Set wbQuelle = Nothing
Set Ziel = Nothing
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Daten aus mehreren Excel-Dateien importieren mit V
09.09.2015 18:25:25
Anja
Hallo Franz = Excelheld,
danke, danke, danke!!!!
Der Code klappt super. Ich bin besser im Code lesen, als im Code erstellen.
Ich habe jetzt noch 2 Probleme:
1.
Ist es möglich, dass er nur Werte einfügt? Ohne Formeln und Formate?
2.
In der anderen Datei befinden sich Formeln, denen ich einen Namen gegeben habe. Das sind Listen, die ich in meinen Dropdownlisten anzeige. Diese Listen mit den selben Namen sind sowohl in der Zieldatei, als auch in den Importdateien vorhanden. Leider fragt er mich jetzt bei jeder Datei, die er einfügen will mehrmals:
Die Formel die eingefügt werden soll, enthält einen Namen, der bereits in der Zieltabelle vorhanden ist. Soll die vorhandene Definition verwendet werden?
Ich müsste das dann ca. 50 x mit Ja bestätigen. Je nachdem wie viele Dateien im Ordner vorhanden sind.
Kann man das irgendwie abschalten?
Ich habe Dateien, wo ich auch Tabellenblätter exportiere. Da verwende ich immer einen Code der die Namen löscht und den Link, damit keine Verknüpfungen vorhanden sind. Kann man das irgendwie da rein basteln, damit die Namen nicht mit "kopiert" werden?
Dim i As Integer
Dim myLinks As Variant
Dim A As Integer, MyName As Name
With ActiveWorkbook
myLinks = .LinkSources(xlExcelLinks)
If Not IsEmpty(myLinks) Then
For i = 1 To UBound(myLinks)
.BreakLink myLinks(i), xlExcelLinks
Next i
End If
With ActiveWorkbook
For Each MyName In .Names
MyName.Delete
Next
End With
Liebe Grüße
Anja

Anzeige
AW: Daten aus mehreren Excel-Dateien importieren mit V
10.09.2015 05:01:14
fcs
Hallo Anja,
die Anpassung in folgendem Abschnitt scheint auszureichen, damit beide Probleme gelöst sind.
      If Zeile_Q2 >= Zeile_Q1 Then
'kopieren und einfügen (nur Formeln und Formate)
'      .Range(.Rows(Zeile_Q1), .Rows(Zeile_Q2)).Copy
.Range(.Cells(Zeile_Q1, 1), .Cells(Zeile_Q2, 17)).Copy
Application.DisplayAlerts = False
Ziel.Cells(Zeile_Z, 1).PasteSpecial Paste:=xlPasteFormats
Ziel.Cells(Zeile_Z, 1).PasteSpecial Paste:=xlPasteValues
Application.DisplayAlerts = True
Application.CutCopyMode = False 'Zwischenablage leerräumen
'nächste Einfügezeile
Zeile_Z = Zeile_Z + Zeile_Q2 - Zeile_Q1 + 1
End If
Wenn du in der Quelle vor dem Kopieren bezüglich Namen, und Formel-Verknüpfungen gründlich aufräumen willst, dann sieht es wie folgt aus.
Gruß
Franz
Private Sub cmdImport_Click()
Dim wbQuelle As Workbook, Quelle As Worksheet, Ziel As Worksheet
Dim Datei As Variant, varDateien
Dim Zeile_Z As Long, Zeile_Q1 As Long, Zeile_Q2 As Long
Dim rngZelle As Range
Dim objName As Name, varLinks As Variant, i As Integer
On Error GoTo Fehler
'Dialog "Datei öffnen" anzeigen
varDateien = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm", _
Title:="Bitte zu importieren Datei(en) auswählen", MultiSelect:=True)
'Abbrechen falls keine Datei ausgewählt
If Not IsArray(varDateien) Then
MsgBox "keine Datei ausgewählt", , "Abbruch"
Exit Sub
End If
Application.ScreenUpdating = False
Set Ziel = ThisWorkbook.Worksheets("Sachbearbeiter")
With Ziel
'Startzeile setzen
Set rngZelle = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If rngZelle Is Nothing Then
Zeile_Z = 16
Else
Zeile_Z = rngZelle.Row
End If
If Zeile_Z = Zeile_Q1 Then
'Formeln im Quell-Tabellenblatt durch Werte ersetzen
With .UsedRange
.Value = .Value
End With
'Namen in Quelle löschen
For Each objName In wbQuelle.Names
If objName.Visible = True Then
objName.Delete
End If
Next
'Links in Quelle löschen
varLinks = wbQuelle.LinkSources(xlExcelLinks)
If Not IsEmpty(varLinks) Then
For i = 1 To UBound(varLinks)
wbQuelle.BreakLink varLinks(i), xlExcelLinks
Next i
End If
'kopieren und einfügen
Application.DisplayAlerts = False
'      .Range(.Rows(Zeile_Q1), .Rows(Zeile_Q2)).Copy Ziel.Cells(Zeile_Z, 1)
.Range(.Cells(Zeile_Q1, 1), .Cells(Zeile_Q2, 17)).Copy Ziel.Cells(Zeile_Z, 1)
Application.CutCopyMode = False 'Zwischenablage leerräumen
Application.DisplayAlerts = True
'nächste Einfügezeile
Zeile_Z = Zeile_Z + Zeile_Q2 - Zeile_Q1 + 1
End If
End With
NextDatei:
wbQuelle.Close savechanges:=False
'Speicher freigeben
Set Quelle = Nothing
Set wbQuelle = Nothing
Next Datei
Application.ScreenUpdating = True
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
MsgBox "FehlerNr.: " & .Number & vbNewLine & vbNewLine _
& "Beschreibung: " & .Description, _
vbCritical, "Fehler"
End Select
End With
'Speicher freigeben
Set Quelle = Nothing
Set wbQuelle = Nothing
Set Ziel = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Daten aus mehreren Excel-Dateien importieren mit V
11.09.2015 00:24:48
Anja
Hallo Franz,
du bist mein Super-Excel-Hirn-Genie...
Es klappt alles perfekt. Ich habe den Code nur angepasst, weil ich die Namen aus der Quelldatei nicht löschen will und darf. Sonst funktionieren meine Formeln nicht mehr.
DAAAAAAANKE!!!
Liebe Grüße
Anja
;

Forumthreads zu verwandten Themen

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


Schritt-für-Schritt-Anleitung

Um Daten aus mehreren Excel-Dateien zu importieren, benötigst du einen VBA-Code, der die Dateien in einem bestimmten Ordner ausliest. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne die Hauptdatei, in die die Daten importiert werden sollen.
  2. Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.
  3. Kopiere den folgenden Code in das Modul:
Private Sub cmdImport_Click()
    Application.ScreenUpdating = False
    Dim wbQuelle As Workbook, Ziel As Worksheet
    Dim Datei As Variant, varDateien
    Dim Zeile_Z As Long, Zeile_Q1 As Long, Zeile_Q2 As Long
    Dim rngZelle As Range
    On Error GoTo Fehler

    varDateien = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
    "*.xls; *.xlsx; *.xlsm", Title:="Bitte zu importieren Datei(en) auswählen", MultiSelect:=True)

    If Not IsArray(varDateien) Then
        MsgBox "keine Datei ausgewählt", , "Abbruch"
        Exit Sub
    End If

    Set Ziel = ThisWorkbook.Worksheets("Sachbearbeiter")
    With Ziel
        Set rngZelle = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
        lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
        If rngZelle Is Nothing Then
            Zeile_Z = 16
        Else
            Zeile_Z = rngZelle.Row + 1
        End If
    End With

    For Each Datei In varDateien
        Set wbQuelle = Workbooks.Open(Datei)
        With wbQuelle.Worksheets("VerfahrenslisteSB")
            Zeile_Q1 = 16
            Zeile_Q2 = .Cells(Rows.Count, 1).End(xlUp).Row
            .Range(.Cells(Zeile_Q1, 1), .Cells(Zeile_Q2, 17)).Copy
            Ziel.Cells(Zeile_Z, 1).PasteSpecial Paste:=xlPasteValues
            Zeile_Z = Zeile_Z + Zeile_Q2 - Zeile_Q1 + 1
        End With
        wbQuelle.Close savechanges:=False
    Next Datei

    Application.ScreenUpdating = True
    Exit Sub

Fehler:
    MsgBox "FehlerNr.: " & Err.Number & vbNewLine & "Beschreibung: " & Err.Description, vbCritical, "Fehler"
    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und füge einen Button in dein Excel-Blatt ein, der den Import startet.

Häufige Fehler und Lösungen

  • Fehler: "keine Datei ausgewählt"

    • Stelle sicher, dass du beim Öffnen des Dateidialogs eine oder mehrere Dateien auswählst.
  • Fehler: Daten werden nicht korrekt eingefügt

    • Überprüfe, ob die Struktur der Importdateien mit der der Hauptdatei übereinstimmt (gleiche Spaltenanzahl und Überschriften).
  • Formeln werden mit kopiert

    • Achte darauf, dass du PasteSpecial Paste:=xlPasteValues verwendest, um nur die Werte zu importieren.

Alternative Methoden

Falls du keine VBA-Lösung nutzen möchtest, kannst du auch die Power Query-Funktion in Excel verwenden:

  1. Gehe auf Daten > Daten abrufen > Aus Datei > Aus Arbeitsmappe.
  2. Wähle die Dateien aus und lade die Daten in das Arbeitsblatt.

Diese Methode ist besonders nützlich, wenn du regelmäßig Daten aus mehreren Excel-Dateien importieren möchtest, da sie eine benutzerfreundliche Oberfläche bietet.


Praktische Beispiele

Hier ist ein einfaches Beispiel für den Import von Daten aus mehreren Excel-Dateien:

Angenommen, du hast drei Excel-Dateien, die im gleichen Ordner gespeichert sind und deren Struktur identisch ist. Mit dem obigen VBA-Code kannst du diese Daten in die Hauptdatei importieren, und sie werden ab der angegebenen Zeile untereinander angeordnet.


Tipps für Profis

  • Nutze Fehlerbehandlung im VBA-Code, um Probleme beim Importieren von Daten frühzeitig zu erkennen.
  • Verwende Relative Verweise auf Zelladressen, um den Code flexibler zu gestalten.
  • Halte deine Importdateien gut organisiert in einem eigenen Ordner, um den Importprozess zu vereinfachen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur Werte importiert werden? Verwende PasteSpecial Paste:=xlPasteValues im VBA-Code, um sicherzustellen, dass nur die Werte und keine Formeln oder Formate importiert werden.

2. Was tun, wenn ich eine große Anzahl von Dateien importieren möchte? Du kannst die MultiSelect-Funktion im GetOpenFilename-Dialog aktivieren, um mehrere Dateien gleichzeitig auszuwählen und zu importieren.

3. Kann ich den Importvorgang automatisieren? Ja, du kannst den Importvorgang automatisieren, indem du den VBA-Code in ein Makro einfügst und es an einen Button oder ein Event bindest.

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