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

Forumthread: CSV-Dateien mit VBA einlesen

CSV-Dateien mit VBA einlesen
Stefan741
Hallo VBA-Freunde,
gestern habe ich fast den ganzen Tag gesucht und ausprobiert, aber keine Lösung für meine Problemstellung gefunden (bzw. war ich nicht in der Lage, eine vorhandene Lösung umzubauen, dass sie lief):
In einem Verzeichnis stehen viele CSV-Dateien. Die Daten sind mit Komma getrennt.
Diese möchte ich in eine Excel-Tabelle einlesen:
In die erste Spalte soll in jede Zeile der Dateiname geschrieben werden. In die weiteren Spalten und Zeilen dann die Daten. Eine Kommatrennung entspricht dann einer neuen Spalte.
Die Daten der nächsten Datei soll einfach unter die vorherige angefügt werden.
Habe schon versucht, das als Makro aufzuzeichnen und den Dateinamen variabel zu machen, bin aber gescheitert:
Dim Pfad As String
Dim Datei As String
Dim i As Integer
Dim alt As Variant, neu As Variant
With Application.FileSearch
.LookIn = "K:\Testverzeichnis\"
.Filename = "*.CSV"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
alt = .FoundFiles(i)
neu = Mid(.FoundFiles(i), 66)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;K:\Testverzeichnis\" _
& neu, Destination:=Selection)
' im aufgezeichneten Code steht hier der ganze Verzeichnis- und
' Dateiname. Ich habe versucht, dies variabel zu gestalten
.Name = neu
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
' .Refresh BackgroundQuery:=False
End With
Cells(64000, 1).End(xlUp).Select
Next i
End If
End With
End Sub
Hat von euch schon mal wer so eine Lösung erarbeitet? Könnte mir da jemand weiterhelfen?
Danke im Voraus,
Stefan
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
Doppelt...owT
24.03.2010 08:00:54
Peter
.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CSV-Dateien mit VBA einlesen


Schritt-für-Schritt-Anleitung

Um CSV-Dateien mit VBA in Excel einzulesen, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeinArbeitsblatt)“ > „Einfügen“ > „Modul“.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub CSV_Dateien_einlesen()
        Dim Pfad As String
        Dim Datei As String
        Dim i As Integer
        Dim alt As Variant, neu As Variant
    
        Pfad = "K:\Testverzeichnis\"
        Datei = Dir(Pfad & "*.CSV")
    
        Do While Datei <> ""
            neu = Datei
            With ActiveSheet.QueryTables.Add(Connection:= _
                "TEXT;" & Pfad & neu, Destination:=Cells(Rows.Count, 1).End(xlUp).Offset(1, 0))
                .Name = neu
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePromptOnRefresh = False
                .TextFilePlatform = 1252
                .TextFileStartRow = 1
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileCommaDelimiter = True
                .TextFileSemicolonDelimiter = False
                .TextFileTabDelimiter = False
                .TextFileSpaceDelimiter = False
                .TextFileColumnDataTypes = Array(2, 1, 1, 1)
                .TextFileTrailingMinusNumbers = True
                .Refresh BackgroundQuery:=False
            End With
            Datei = Dir
        Loop
    End Sub
  4. Stelle sicher, dass der Pfad zu deinen CSV-Dateien korrekt ist.

  5. Schließe den VBA-Editor und führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf „Ausführen“ klickst.


Häufige Fehler und Lösungen

Problem: Die CSV-Datei wird nicht gefunden.
Lösung: Überprüfe den angegebenen Pfad. Stelle sicher, dass der Pfad korrekt eingegeben wurde und die Dateien im angegebenen Verzeichnis vorhanden sind.

Problem: Daten werden nicht richtig in Spalten aufgeteilt.
Lösung: Stelle sicher, dass der TextFileCommaDelimiter auf True gesetzt ist, um die Kommatrennung zu aktivieren.

Problem: Es wird eine Fehlermeldung angezeigt, wenn das Makro ausgeführt wird.
Lösung: Überprüfe die Syntax im VBA-Code und stelle sicher, dass alle erforderlichen Parameter korrekt gesetzt sind.


Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die Importfunktion in Excel nutzen:

  1. Gehe zu „Daten“ > „Daten abrufen“ > „Aus Datei“ > „Aus Text/CSV“.
  2. Wähle die gewünschte CSV-Datei aus.
  3. Befolge die Schritte im Importassistenten, um die Daten in Excel zu importieren.

Praktische Beispiele

Um den Code besser zu verstehen, hier ein Beispiel, wie du mehrere CSV-Dateien in ein Arbeitsblatt importieren kannst:

  • Angenommen, du hast zwei CSV-Dateien mit den Namen „Daten1.csv“ und „Daten2.csv“ in deinem Verzeichnis. Der VBA-Code liest diese Dateien ein und fügt die Daten untereinander in eine Excel-Tabelle ein, wobei jede Zeile den Dateinamen in der ersten Spalte trägt.

Tipps für Profis

  • Nutze die Möglichkeit, die Spaltenbreiten automatisch anzupassen, indem du .AdjustColumnWidth = True im VBA-Code lässt.
  • Wenn die CSV-Dateien viele Spalten haben, kannst du die Array-Funktion in .TextFileColumnDataTypes anpassen, um die Datentypen jeder Spalte zu definieren.
  • Verwende TextFileSemicolonDelimiter, wenn deine CSV-Dateien durch Semikolons getrennt sind, und passe die Parameter entsprechend an.

FAQ: Häufige Fragen

1. Kann ich auch andere Dateiformate importieren?
Ja, du kannst auch andere Textformate importieren, indem du die entsprechenden Parameter im VBA-Code anpasst.

2. Wie kann ich den Importprozess automatisieren?
Du kannst das Makro so anpassen, dass es beim Öffnen der Datei automatisch ausgeführt wird.

3. Was kann ich tun, wenn Excel abstürzt?
Überprüfe, ob die CSV-Dateien nicht beschädigt sind und ob dein Code auf die richtige Anzahl an Zeilen und Spalten zugreift.

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