Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

csv per VBA, Kommas zwischen Anführungszeichen

Forumthread: csv per VBA, Kommas zwischen Anführungszeichen

csv per VBA, Kommas zwischen Anführungszeichen
04.03.2026 22:17:22
Thomas
Hallo
ich hab schon im Forum lange gesucht, aber werde und werde nicht fündig....

Im VBA Code - und nur im Code und nicht zur Ausgabe auf dem Tabellenblatt, auf dem sollen denn erst die Ergebnisse erscheinen - will ich eine csv Datei einlesen und weiterverarbeiten.
Die Werte sind per Komma getrennt; jede Zeile teile ich per Split auf.
Leider habe ich immer wieder mal vereinzelte Spalten-Einträge, in denen selbst ein Komma mit enthalten ist.
Diese Spalteneinträge sind in der reinen csv-Datei dann in Anführungszeichen eingeschlossen
Bsp
A1, B2, "C3,4", D5
Wie schaffe ich es, dass das split nicht ALLE Kommas trennt, also nicht A1 xx B2 xx "C3 xx 4" xx D5 (die xx hier im Beitrag nur zum Visualisieren der Trennung)
sondern A1 xx B2 xx C3,4 xx D5
... also vergleichbar mit dem csvReader aus Python - aber ich mag zum einen Python nicht besonders und kann/darf das bei dieser Anwendung auch nicht einsetzen

Thomas
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv per VBA, Kommas zwischen Anführungszeichen
04.03.2026 23:49:31
daniel
Hi
ich kenne da jetzt keine VBA-Funktion die das kann.
Aber du hast VBA, selber programmieren.

- Schleife über die einzelnen Zeichen und den Text neu zusammensetzen.
- dabei: Anführungzeichen mitzählen und, wenn gerade Anzahl an Anführungszeichen, dann Komma durch alternatives Trennzeichen austauschen, wenn ungerade Anzahl, dann Komma lassen.
dann das Split mit dem alternativen Trennzeichen durchführen.

also diese Funktion in ein allegemeines Modul
Function Trennzeichen_Neu(txt As String) As String

Dim i As Long
Dim txt_neu As String
Dim chk As Boolean
Dim T As String

chk = True
For i = 1 To Len(txt)
T = Mid(txt, i, 1)
If T = """" Then
chk = Not chk
Else
If T = "," And chk Then
txt_neu = txt_neu & "|"
Else
txt_neu = txt_neu & T
End If

End If
Next
Trennzeichen_Neu = txt_neu

End Function


und dann nicht mehr:
Split(deinText, ",")

sondern
Split(Trennzeichen_Neu(denText), "|")


das alternative Trennzeichen (|) muss natürlich so gewählt werden, dass es ansonsten im Text nicht vorkommt.

Gruß Daniel
Anzeige
AW: csv per VBA, Kommas zwischen Anführungszeichen
04.03.2026 23:58:23
xlKing
Hi Thomas,

wenn alle Daten so sind wie dein Beispiel, brauchst du doch nur nach Komma UND Leerzeichen trennen. Falls es doch noch andere Beispiele gibt, dann vielleicht mithilfe eines im Text nicht vorkommenden Ersatztrennezichens:

Sub Splittest()

Text = Replace(Replace("A1 , B2, ""C3,4"", D5", ",", ";"), """", """•") 'Komma durch Semikolon ersetzen und dem Anführungszeichen einen Punkt hinzufügen
Text2 = Split(Replace(Text, "•;", ";"), """") '"Punkt entfernen, wenn direkt auf diesen ein Semikolon folgt, dann trennen nach Anführungszeichen
For Each t In Text2
If Left(t, 1) = "•" Then t = Replace(Replace(t, ";", ","), "•", "") 'Wenn Einzelteil mit Punkt beginnt, diesen entfernen, und Semikolon wieder durch Komma ersetzen.
t2 = t2 & t 'Alles zusammenfügen.
Next t

textarr = Split(t2, ";") 'Jetzt nach Semikolon splitbar.
For Each t3 In textarr
MsgBox t3
Next t3
End Sub


Gruß Mr. K.
Anzeige
AW: csv per VBA, Kommas zwischen Anführungszeichen
05.03.2026 07:51:50
Eifeljoi 5
Hallo

Warum per VBA csv einlesen??
Warum nutzt du nicht dazu Power Query?
AW: csv per VBA, Kommas zwischen Anführungszeichen
05.03.2026 10:28:35
snb
Sub M_snb()

c00 = "A1, B2, ""C3,4"", D5"
sn = Split(c00, Chr(34))

For j = 1 To UBound(sn) Step 2
sn(j) = Replace(sn(j), ",", ".")
Next

MsgBox Join(sn, "")
End Sub
Anzeige
AW: csv per VBA, Kommas zwischen Anführungszeichen
05.03.2026 12:09:46
Yal
Hallo Thomas,

der Makrorekorder nimmt die Sache so auf:
Sub Makro1()

'
' Makro1 Makro
'
Workbooks.OpenText _
Filename:="C:\temp\H_Forum\PQ csv laden\180259.csv", _
Origin:=65001, -
StartRow:=2, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
Comma:=True, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1)), _
TrailingMinusNumbers:=True
End Sub


Also TextQualifier ist die Option zu setzen.

VG
Yal
Anzeige
Falls du es auch...
05.03.2026 12:17:08
Case
Moin Thomas, :-)

... mit Power Query in Betracht ziehst, dann kannst du es z. B. so machen: ;-)

Sauber aufgebaute CSV-Datei: ;-)
let

Quelle = Csv.Document(File.Contents("C:\Temp\Descht1.csv"))
in
Quelle

Besser ist es, die Parameter anzugeben (Delimiter, Encoding, QuoteStyle, Columns - wenn gleich, dann u. U. weglassen). ;-)
let

Quelle = Csv.Document(File.Contents("C:\Temp\Descht1.csv"), [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.Csv])
in
Quelle

Wenn es sehr große CSV-Dateien sind und die Spaltenanzahl unterschiedlich sein kann, dann (puffern, testen, ausgeben): ;-)
let

Quelle = Binary.Buffer(File.Contents("C:\Temp\Descht1.csv")),
Test = Csv.Document(Quelle,[Delimiter=",",Encoding=1252,QuoteStyle=QuoteStyle.Csv]),
Spalten = List.Max(List.Transform(Table.ToRows(Test), List.Count)),
Erg = Csv.Document(Quelle,[Delimiter=",",Columns=Spalten,Encoding=1252,QuoteStyle=QuoteStyle.Csv])
in
Erg

Ergebnis wäre dann (egal, ob nach dem Komma bei C3 oder L11 ein Leerzeichen kommt, oder nicht): ;-)
Userbild

Danach kannst du die Daten bearbeiten, wie die lustig bist. ;-)

Infos zu Power Query: ;-)
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Servus
Case
Anzeige
AW: Falls du es auch...
06.03.2026 22:43:15
Thomas
Danke Euch

wie gesagt, ich brauch die Daten erst mal nicht in einer Tabelle, sondern nur zum Weiterverarbeiten.
Die Lösung mit den Anführungszeichen zählen und ersetzen bzw. Kommas bei gerader Anzahl der Anführungszeichen ersetzen, hatt ich selbst schon, aber die kostet halt Rechenzeit. Hätte auf eine andere, schnellere Lösung gehofft.
Powerquery kannt ich bis jetzt nur als Ausgabe auf Excel und nicht zum Einlesen in VBA Variablen zum Weiterarbeiten

Dank Euch allen, dann wirds wohl bei der Komma in Strichpunkt bei gerader Anzahl Anführungszeichen Lösung bleiben.
Die Daten selbst können wechseln, Text, mal numerisch, mal nicht, sind verschiedene Infos in der Tabelle, ähnlich einer Personenliste mit Namen, Vornamen, GebDatum, TelNr.... nu als Bsp...

aktuell bis zu paar 1000 Zeilen a 20-30 Spalten

Thomas
Anzeige
AW: Falls du es auch...
09.03.2026 10:58:27
daniel
die Methode von snb zum Ersetzen des Kommas außerhalb der Trennzeichen ist etwa doppelt so schnell wie mein durchzählen.
Ansonsten sollte es kein Problem sein, die CSV-Datei erstmal mit Workbooks-OpenText und der entsprechenden Einstellung in einer eigenen Datei zu öffnen und dort dann die Werte für die Interne Weiterverarbeitung ins Array zu kopieren.
Gruß Daniel
Anzeige
warum nicht getestet ?
09.03.2026 13:12:58
snb
Sub M_snb()

sn= split(createobject("scripting.filesystemobject").opentextfile("C:\beispiel.csv").readall, Chr(34))

For j = 1 To UBound(sn) Step 2
sn(j) = Replace(sn(j), ",", ".")
Next

sn=split(Join(sn, ""),vbCrLf)
msgbox sn(0)
End Sub
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige