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

Forumthread: CSV-Import mittels VBA ohne Leerzeilen

CSV-Import mittels VBA ohne Leerzeilen
28.07.2020 15:24:04
Daniel
Hallo Profis,
ich würde gerne eine CSV-Datei in Excel importieren, diese hat allerdings ca. 500.000 Zeilen. Hinzu kommt das Problem, dass in der CSV sehr viele leere Zeilen dazwischen sind und so die Anzahl der Zeilen mehrere Mio. beträgt.
Folgendes bräuchte ich und wäre perfekt :-)
- Import einer CSV-Datei mittels Auswahlfenster
- Bei der CSV-Datei (getrennt durch Komma) wird der 3. Wert (Also: Daniel,Diers,,5,8) geprüft. Ist dieser, wie hier der Fall, leer, so soll diese Zeile nicht importiert werden
- Import der Datei in einen bestimtmen Excel-Reiter "Update"
Ist sowas irgendwie möglich?
Ganz großen Dank schon einmal, das würde mir so extrem weiterhelfen :-)
VG
Daniel
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PQ oder OPEN file FOR READING
28.07.2020 15:35:20
Fennek
Hallo,
versuche es mit PowerQuery (ich habe keine Ahnung). Falls das nicht klappen sollte, mit der alten OPEN file geht es in jedem Fall.
mfg
AW: CSV-Import mittels VBA ohne Leerzeilen
28.07.2020 18:32:13
Günther
Moin,
großartige und sehr anschauliche Problembeschreibung uns schicke (auf wenige Zeilen gekürzte) Muster-csv … :-(
Ja, Power Query!
Gruß
Günther  |  mein Excel-Blog
Anzeige
AW: CSV-Import mittels VBA ohne Leerzeilen
28.07.2020 20:03:04
volti
Hallo Daniel,
hier mal eine fixe Idee zu Deinem Vorhaben via Classic VBA.
Schau mal, ob's in Deinem Sinne funktioniert und auch die 500.000 Zeilen schafft.
[+][-]
Sub Test() Dim iFF As Integer, iZeile As Long, iOutZeile As Long Dim sFilename As String, sData() As String, sSpArr() As String Dim bCheck As Boolean Application.ScreenUpdating = False With ThisWorkbook.Sheets("Update") 'Datei auswählen sFilename = Application.GetOpenFileName("csv files (*.csv), *.csv") If sFilename <> "" Then 'Daten in Zeilen-Array einlesen iFF = FreeFile() Open sFilename For Input As iFF sData = Split(Input(LOF(iFF), #iFF), vbCrLf) Close iFF 'Alle Zeilen durchgehen For iZeile = 0 To UBound(sData) If sData(iZeile) <> "" Then 'Leerzeile? sSpArr = Split(sData(iZeile), ",") 'Trenner ggf. anpassen bCheck = True If UBound(sSpArr) > 2 Then If sSpArr(2) = "" Then bCheck = False '3. Feld leer? End If If Len(sData(iZeile)) = UBound(sSpArr) Then bCheck = False If bCheck = True Then iOutZeile = iOutZeile + 1 .Cells(iOutZeile, "A").Resize(1, UBound(sSpArr) + 1) _ = Application.Transpose(Application.Transpose(sSpArr)) End If End If Next iZeile MsgBox "Habe Fertig", vbInformation, "Daten einlesen" End If End With Application.ScreenUpdating = True End Sub
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: CSV-Import mittels VBA ohne Leerzeilen
28.07.2020 20:07:58
volti
Und schon das erste Update. Kleine Korrektur...
[+][-]
Sub Test() Dim iFF As Integer, iZeile As Long, iOutZeile As Long Dim sFilename As String, sData() As String, sSpArr() As String Dim bCheck As Boolean Application.ScreenUpdating = False With ThisWorkbook.Sheets("Update") 'Datei auswählen sFilename = Application.GetOpenFileName("csv files (*.csv), *.csv") If sFilename <> "" Then 'Daten in Zeilen-Array einlesen iFF = FreeFile() Open sFilename For Input As iFF sData = Split(Input(LOF(iFF), #iFF), vbCrLf) Close iFF 'Alle Zeilen durchgehen For iZeile = 0 To UBound(sData) If sData(iZeile) <> "" Then 'Leerzeile? sSpArr = Split(sData(iZeile), ",") 'Trenner ggf. anpassen bCheck = True If UBound(sSpArr) > 2 Then If sSpArr(2) = "" Then bCheck = False '3. Feld leer? End If If Len(sData(iZeile)) = UBound(sSpArr) Then bCheck = False If bCheck = True Then iOutZeile = iOutZeile + 1 .Cells(iOutZeile, "A").Resize(1, UBound(sSpArr) + 1) = sSpArr End If End If Next iZeile MsgBox "Habe Fertig", vbInformation, "Daten einlesen" End If End With Application.ScreenUpdating = True End Sub
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

CSV-Import mit VBA: Leerzeilen entfernen


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei in Excel zu importieren und dabei leere Zeilen zu entfernen, kannst Du folgendes VBA-Skript verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub CSVImportOhneLeerzeilen()
    Dim iFF As Integer, iZeile As Long, iOutZeile As Long
    Dim sFilename As String, sData() As String, sSpArr() As String
    Dim bCheck As Boolean

    Application.ScreenUpdating = False

    With ThisWorkbook.Sheets("Update")
        sFilename = Application.GetOpenFileName("csv files (*.csv), *.csv")
        If sFilename <> "" Then
            iFF = FreeFile()
            Open sFilename For Input As iFF
            sData = Split(Input(LOF(iFF), #iFF), vbCrLf)
            Close iFF

            For iZeile = 0 To UBound(sData)
                If sData(iZeile) <> "" Then
                    sSpArr = Split(sData(iZeile), ",") 
                    bCheck = True
                    If UBound(sSpArr) > 2 Then
                        If sSpArr(2) = "" Then bCheck = False
                    End If
                    If bCheck Then
                        iOutZeile = iOutZeile + 1
                        .Cells(iOutZeile, "A").Resize(1, UBound(sSpArr) + 1) = Application.Transpose(sSpArr)
                    End If
                End If
            Next iZeile

            MsgBox "Import abgeschlossen", vbInformation, "Daten einlesen"
        End If
    End With

    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Problem: Das Makro funktioniert nicht, wenn die CSV-Datei leer ist.

    • Lösung: Stelle sicher, dass die CSV-Datei Daten enthält und dass der Pfad korrekt ist.
  • Problem: Fehlermeldung wegen leerer Zeilen.

    • Lösung: Überprüfe, ob das Skript korrekt kopiert wurde. Achte darauf, dass keine unnötigen Leerzeilen in der CSV-Datei vorhanden sind.

Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du auch Power Query verwenden:

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Text/CSV.
  2. Wähle Deine CSV-Datei aus und klicke auf Laden.
  3. In Power Query kannst Du die Schritte zur Entfernung leerer Zeilen durchführen, bevor Du die Daten in Excel lädst.

Praktische Beispiele

Angenommen, Du hast eine CSV-Datei mit folgendem Inhalt:

Name,Alter,Stadt
Daniel,30,Frankfurt
,,, 
Karl,25,München
,,,

Nach dem Import mit dem obigen VBA-Skript wird das Ergebnis in Excel wie folgt aussehen:

Name  | Alter | Stadt
------------------------
Daniel| 30    | Frankfurt
Karl  | 25    | München

Tipps für Profis

  • Nutze die Funktion Trim, um Leerzeichen in den Zellen zu entfernen, bevor Du die Daten verarbeitest.
  • Du kannst das Makro erweitern, um auch andere Bedingungen für den Import zu prüfen, z. B. das Vorhandensein bestimmter Zeichen in den Zellen.

FAQ: Häufige Fragen

1. Wie kann ich Leerzeichen in den Zellen entfernen? Du kannst die Funktion Trim in VBA verwenden, um führende und nachfolgende Leerzeichen zu entfernen.

2. Was passiert, wenn ich eine große CSV-Datei importiere? Das Skript ist darauf ausgelegt, große Dateien zu verarbeiten, kann jedoch je nach Systemleistung langsamer sein. Achte darauf, dass Excel nicht überlastet wird.

3. Kann ich dieses Skript für andere Dateiformate verwenden? Ja, Du kannst das Skript anpassen, um andere Trennzeichen oder Dateiformate zu unterstützen, indem Du den Code entsprechend änderst.

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