Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

CSV-Import mittels VBA ohne Leerzeilen

Betrifft: CSV-Import mittels VBA ohne Leerzeilen von: Daniel
Geschrieben am: 28.07.2020 15:24:04

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

Betrifft: AW: PQ oder OPEN file FOR READING
von: Fennek
Geschrieben am: 28.07.2020 15:35:20

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

Betrifft: AW: CSV-Import mittels VBA ohne Leerzeilen
von: Günther
Geschrieben am: 28.07.2020 18:32:13

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

Betrifft: AW: CSV-Import mittels VBA ohne Leerzeilen
von: volti
Geschrieben am: 28.07.2020 20:03:04

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.

Code in die Zwischenablage[+][-]
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


Betrifft: AW: CSV-Import mittels VBA ohne Leerzeilen
von: volti
Geschrieben am: 28.07.2020 20:07:58

Und schon das erste Update. Kleine Korrektur...

Code in die Zwischenablage[+][-]
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


Beiträge aus dem Excel-Forum zum Thema "CSV-Import mittels VBA ohne Leerzeilen"