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

Forumthread: Mehrere CSV importieren

Mehrere CSV importieren
29.09.2013 14:25:52
Henner
Hallo zusammen,
ich habe im Ordner 'C:\Daten\' mehrere csv-Dateien, in denen sich jeweils im Bereich A1:T6 Daten befinden. Die Daten aus den csv-Dateien möchte ich nun untereinander in ein leeres Tabellenblatt kopieren. Das Kopieren der Daten soll in der gleichen Reihenfolge geschehen, wie die csv-Dateien im Ordner 'C:\Daten\' liegen. Die Namen der csv-Dateien variieren, so das vor dem Importieren der Ordner ausgelesen werden muss, ebenso variiert die Anzahl der csv-Dateien im Bereich 1-20.
Nochmal in der Kurzfassung:
1. Auslesen der Namen und Anzahl der csv-Dateien im Ordner 'C:\Daten\'
2. Kopieren des Bereichs A1:T6 der ersten csv-Datei und Einfügen in Tabelle1(A1:T6)
3. Wenn die Anzahl der csv-Dateien grösser ist als die bereits importieren, weiter
4. Kopieren des Bereichs A1:T6 der nächsten csv-Datei und Einfügen in Tabelle1(A7:T12)
5. Zurück zu 3. (Nächster Bereich zum Einfügen: A13:T18, A19:T24, usw..)
Vielen vielen Dank im Voraus & beste Grüsse
Henner
PS: Sollte das Uploaden einer Bsp.-CSV helfen hole ich das gerne nach!

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere CSV importieren
29.09.2013 17:47:15
fcs
Hallo Henner,
hier ein entsprechendes Makro.
Die Einstellungen sind so, dass die Trennzeichen und Zahlen/Datumsformate gemäß den lokalen Betriebsystem-/Excel-Einstellungen interpretiert werden.
Also Deutsch z.B.
Datum: TT.MM.YYYY
Dezimalzeichen: ,
1000er-Zeichen: .
Feldtrennzeichen: ;
Falls in der CSV-Datei andere Einstellungen verwendet sind, dann muss man am Parameter Format oder auch Local drehen.
Gruß
Franz
Sub CSV_Importieren()
Dim wksZiel As Worksheet, lngZeile_Z As Long
Dim wkbCSV As Workbook
Dim strPfad As String, strDatei As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Ordner mit CSV-Dateien auswählen"
.InitialFileName = "C:\Daten"
If .Show = -1 Then
strPfad = .SelectedItems(1)
Else
GoTo Beenden
End If
End With
Set wksZiel = ActiveWorkbook.Worksheets(1)
strPfad = strPfad & Application.PathSeparator
'CSV-Dateien suchen
strDatei = Dir(strPfad & "*.csv")
lngZeile_Z = 1 '1. Einfügezeile
Application.ScreenUpdating = False
Do Until strDatei = ""
Set wkbCSV = Application.Workbooks.Open(Filename:=strPfad & strDatei, _
ReadOnly:=True, Local:=True)
'    Set wkbCSV = Application.Workbooks.Open(Filename:=strPfad & strDatei, _
Format:=1, Origin:=xlWindows, ReadOnly:=True, Local:=True)
'Parameter Format:  1 Tabstopps _
2 Kommas _
3 Leerzeichen _
4 Semikolons
'Daten kopieren
wkbCSV.Worksheets(1).Range("A1:T6").Copy wksZiel.Cells(lngZeile_Z, 1)
'Spalten mit Infos zum Sortieren anfügen
With wksZiel
'Dateiname rechts neben den Daten in Spalte U einfügen
.Range(.Cells(lngZeile_Z, 21), .Cells(lngZeile_Z + 5, 21)).Value = strDatei
'fortlaufende Nr. für die 6 Zeilen in Spalte V einfügen
With .Range(.Cells(lngZeile_Z, 22), .Cells(lngZeile_Z + 5, 22))
.FormulaR1C1 = "=ROW()- " & lngZeile_Z & " + 1"
.Calculate
.Value = .Value
End With
End With
'Nächste Einfügezeile
lngZeile_Z = lngZeile_Z + 6
'CSV-Datei wieder schliessen
wkbCSV.Close savechanges:=False
Set wkbCSV = Nothing
strDatei = Dir
Loop
Application.ScreenUpdating = True
Beenden:
End Sub

Anzeige
AW: Mehrere CSV importieren
29.09.2013 18:27:41
Henner
Hallo Franz,
das ist ja genial - danke!! Eine kleine Änderung hätte ich gerne noch, und zwar soll der Pfad zum Importieren im Quellcode festgelegt werden. Also kein Auswahlmenü in der Ordnerstruktur.
Habs in meinem jugendlichen Leichtsinn erfolglos so probiert:

'With Application.FileDialog(msoFileDialogFolderPicker)
' .Title = "Bitte Ordner mit CSV-Dateien auswählen"
'.InitialFileName = "C:\Daten"
'If .Show = -1 Then
'strPfad = .SelectedItems(1)
'Else
'GoTo Beenden
'End If
'End With
Set strPfad = "C:\Daten\"
Set wksZiel = ActiveWorkbook.Worksheets(1)
Danke nochmal! Gruss Henner

Anzeige
AW: Mehrere CSV importieren
29.09.2013 20:04:09
fcs
Hallo Henner,
  strPfad = "C:\Daten\"

bei "einfachen" Wert-Variablen steht die Variable links, der Wert rechts von Gleichheitszeichen.
Die Set-Methode wird verwendet, wenn Objekte (Tabellen, Zellen, Arbeitsmappen etc.) einer Variablen zugeordnet werden sollen.
Gruß
Franz

Anzeige
AW: Mehrere CSV importieren
29.09.2013 20:37:09
Henner
Hallo Franz,
ich bin begeistert, vielen vielen Dank! Liesse sich die max. Anzahl der zu importierenden Dateien noch auf 20 begrenzen? Evtl. schon eine Abfrage vor dem Import, so dass das Importieren garnicht stattfindet wenn es mehr als 20 Dateien in dem Ordner sind.. Und nochmal: Danke, auch für deine schlüssigen Anmerkungen.
Schönen Abend, Henner

Anzeige
AW: Mehrere CSV importieren
29.09.2013 21:05:01
fcs
Hallo Henner,
warum kommen deine Wünsche alle nur häppchenweise?
Gruß
Franz
Sub CSV_Importieren()
Dim wksZiel As Worksheet, lngZeile_Z As Long
Dim wkbCSV As Workbook
Dim strPfad As String, strDatei As String
strPfad = "C:\Daten\"
'  strPfad = "C:\Users\Public\Abteilung D\"
Set wksZiel = ActiveWorkbook.Worksheets(1)
'CSV-Dateien zählen
strDatei = Dir(strPfad & "*.csv")
Do Until strDatei = ""
lngZeile_Z = lngZeile_Z + 1
strDatei = Dir
Loop
If lngZeile_Z > 20 Then
If MsgBox("Es sind " & lngZeile_Z & " CSV-Dateien im Verzeichnis." & vbLf _
& "Dateien importieren?", _
vbQuestion + vbOKCancel, "Import CSV-Dateien") = vbCancel Then GoTo Beenden
End If
'CSV-Dateien importiereb
strDatei = Dir(strPfad & "*.csv")
lngZeile_Z = 1 '1. Einfügezeile
Application.ScreenUpdating = False
Do Until strDatei = ""
Set wkbCSV = Application.Workbooks.Open(Filename:=strPfad & strDatei, _
ReadOnly:=True, Local:=True)
'    Set wkbCSV = Application.Workbooks.Open(Filename:=strPfad & strDatei, _
Format:=1, Origin:=xlWindows, ReadOnly:=True, Local:=True)
'Parameter Format:  1 Tabstopps _
2 Kommas _
3 Leerzeichen _
4 Semikolons
'Daten kopieren
wkbCSV.Worksheets(1).Range("A1:T6").Copy wksZiel.Cells(lngZeile_Z, 1)
'Spalten mit Infos zum Sortieren anfügen
With wksZiel
'Dateiname rechts neben den Daten in Spalte U einfügen
.Range(.Cells(lngZeile_Z, 21), .Cells(lngZeile_Z + 5, 21)).Value = strDatei
'fortlaufende Nr. für die 6 Zeilen in Spalte V einfügen
With .Range(.Cells(lngZeile_Z, 22), .Cells(lngZeile_Z + 5, 22))
.FormulaR1C1 = "=ROW()- " & lngZeile_Z & " + 1"
.Calculate
.Value = .Value
End With
End With
'Nächste Einfügezeile
lngZeile_Z = lngZeile_Z + 6
'CSV-Datei wieder schliessen
wkbCSV.Close savechanges:=False
Set wkbCSV = Nothing
strDatei = Dir
Loop
Application.ScreenUpdating = True
Beenden:
End Sub

Anzeige
AW: Mehrere CSV importieren
29.09.2013 21:21:48
Henner
Hallo Franz!
Habe alles so im Eingangstext geschrieben, sowohl der fixe Pfad als auch die Anzahl der Dateien zwischen 1-20. Allerdings habe ich nicht geschrieben, dass das Anforderungen für den Import und somit an den Code sind. Werde mich da in Zukunft eindeutiger artikulieren :o)
Jetzt ist aber alles komplett, vielen vielen Dank nochmals!
Gruss Henner
Anzeige
;

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

Mehrere CSV-Dateien in Excel importieren


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle eine neue Arbeitsmappe.
  2. Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  3. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  4. Kopiere und füge den folgenden VBA-Code in das Modul ein:
Sub CSV_Importieren()
    Dim wksZiel As Worksheet, lngZeile_Z As Long
    Dim wkbCSV As Workbook
    Dim strPfad As String, strDatei As String
    strPfad = "C:\Daten\" ' Pfad zu den CSV-Dateien festlegen
    Set wksZiel = ActiveWorkbook.Worksheets(1)

    'CSV-Dateien zählen
    strDatei = Dir(strPfad & "*.csv")
    Do Until strDatei = ""
        lngZeile_Z = lngZeile_Z + 1
        strDatei = Dir
    Loop

    If lngZeile_Z > 20 Then
        If MsgBox("Es sind " & lngZeile_Z & " CSV-Dateien im Verzeichnis." & vbLf & _
                   "Dateien importieren?", _
                   vbQuestion + vbOKCancel, "Import CSV-Dateien") = vbCancel Then GoTo Beenden
    End If

    'CSV-Dateien importieren
    strDatei = Dir(strPfad & "*.csv")
    lngZeile_Z = 1 '1. Einfügezeile
    Application.ScreenUpdating = False
    Do Until strDatei = ""
        Set wkbCSV = Application.Workbooks.Open(Filename:=strPfad & strDatei, _
            ReadOnly:=True, Local:=True)

        'Daten kopieren
        wkbCSV.Worksheets(1).Range("A1:T6").Copy wksZiel.Cells(lngZeile_Z, 1)

        'Spalten mit Infos zum Sortieren anfügen
        With wksZiel
            .Range(.Cells(lngZeile_Z, 21), .Cells(lngZeile_Z + 5, 21)).Value = strDatei
            With .Range(.Cells(lngZeile_Z, 22), .Cells(lngZeile_Z + 5, 22))
                .FormulaR1C1 = "=ROW()- " & lngZeile_Z & " + 1"
                .Calculate
                .Value = .Value
            End With
        End With

        'Nächste Einfügezeile
        lngZeile_Z = lngZeile_Z + 6
        wkbCSV.Close savechanges:=False
        Set wkbCSV = Nothing
        strDatei = Dir
    Loop
    Application.ScreenUpdating = True
Beenden:
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro CSV_Importieren aus.

Häufige Fehler und Lösungen

  • Fehler: "Das angegebene Dateiformat ist ungültig."
    Lösung: Stelle sicher, dass die CSV-Dateien im richtigen Format vorliegen und nicht beschädigt sind.

  • Fehler: "Die Anzahl der zu importierenden Dateien überschreitet 20."
    Lösung: Passe den Code an, um die maximale Anzahl der Dateien auf 20 zu begrenzen. Die Abfrage im Code kümmert sich um diesen Fehler.


Alternative Methoden

Eine andere Methode, um mehrere CSV-Dateien in Excel zu importieren, ist die Verwendung von Power Query. Diese Funktion ist in Excel 2016 und neueren Versionen verfügbar. Du kannst die Daten aus mehreren CSV-Dateien zusammenführen, indem du im Menü Daten die Option Daten abrufen und dann Aus Datei wählst.


Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere CSV-Dateien in Excel importieren kannst:

  • Angenommen, du hast die folgenden CSV-Dateien im Ordner C:\Daten\: Daten1.csv, Daten2.csv, Daten3.csv.
  • Der oben bereitgestellte VBA-Code importiert die Daten aus diesen Dateien in die aktive Excel-Tabelle, beginnend ab Zelle A1.

Tipps für Profis

  • Verwende den Application.ScreenUpdating = False Befehl, um die Bildschirmaktualisierung während des Imports zu deaktivieren. Dies beschleunigt den Vorgang erheblich.
  • Du kannst den Code anpassen, um Daten aus spezifischen Bereichen oder in bestimmten Formaten zu importieren. Überlege, ob du zusätzlich Datenbereinigungs- oder Transformationsschritte einfügen möchtest.

FAQ: Häufige Fragen

1. Wie kann ich mehrere CSV-Dateien in eine Excel-Datei zusammenführen?
Du kannst den oben genannten VBA-Code verwenden, um die Daten aus mehreren CSV-Dateien in ein einziges Arbeitsblatt zu importieren.

2. Funktioniert dieser Prozess in Excel 2013?
Ja, der bereitgestellte VBA-Code funktioniert auch in Excel 2013. Achte darauf, dass die CSV-Dateien im richtigen Format vorliegen.

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