CSV Makro mit verschiedenen Delimiter

Hallo,

ich habe ein CSV-Makro, das CSV-Dateien öffnet, die mit Komma getrennt sind. Das Problem dabei ist, dass es Strings gibt, die durch Komma getrennt sind. Dieses Komma wird dann von Excel natürlich auch als Trenner erkannt und die die Datei wird nicht richtig dargestellt.

Ich habe dann versucht andere Delimiter in das Makro einzubauen, aber es funktioniert immer noch nur mit dem Komma. Obwohl ich Komma als Delimiter sogar ausschalte. Hier ist der Quelltext:

Application.Workbooks.OpenText Filename:=Path & File, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, Space:=False, Other:=False

Kann mir jemand sagen, was ich falsch mache. Gibt es vielleicht andere Möglichkeiten mein Problem umzugehen als anderen Delimiter einzubaue?

Bin im Voraus dankbar.

Viele Grüße,
Michael

ich habe ein CSV-Makro, das CSV-Dateien öffnet, die mit Komma
getrennt sind. Das Problem dabei ist, dass es Strings gibt,
die durch Komma getrennt sind. Dieses Komma wird dann von
Excel natürlich auch als Trenner erkannt und die die Datei
wird nicht richtig dargestellt.

Hi Michael,
poste mal hier so 10 Zeilen aus Spalte A.
Ist natürlich grundsätzlich ein Problem wenn pro Zeile Werte durch Komma getrennt sind die im Wert selbst auch noch Kommas haben.
Mal schauen , vielleicht gibt es eine Regelmäßigkeit die man dann zum Trennen benutzen kann.

Option Explicit

Sub tt()
Dim Nr, Satz, Zei
Nr = FreeFile
Open Path & File For Input As #Nr
While Not EOF(Nr)
 Zei = Zei + 1
 Line Input #Nr, Satz
 Cells(Zei, 1) = Satz
Wend
Close
End Sub

Gruß
Reinhard

Hallo Reinhard,

vielen Dank für deine Antwort.

Ich konnte bei den Dateien keine Regelmäßigkeiten feststellen. Es sind einfach Wörter die ab und zu durch Komma getrennt werden. Diese kommen in jeder Spalte vor, deswegen poste ich jetzt die Spalte A nicht.

Kennst du vielleicht einen Weg, wie man im Makro anstatt Komma als Trenner z.B. eine Pipe benutzen kann? Habe gestern den ganzen Abend rumprobiert und bin langsam aber sicher mit meinem Latein am Ende :wink:.

Vielen Dank im Voraus,
Michael

Ich konnte bei den Dateien keine Regelmäßigkeiten feststellen.
Es sind einfach Wörter die ab und zu durch Komma getrennt
werden. Diese kommen in jeder Spalte vor, deswegen poste ich
jetzt die Spalte A nicht.
Kennst du vielleicht einen Weg, wie man im Makro anstatt Komma
als Trenner z.B. eine Pipe benutzen kann? Habe gestern den
ganzen Abend rumprobiert und bin langsam aber sicher mit
meinem Latein am Ende :wink:.

Hi Michael,
bei ner csv ist der Name programm, also das Komma ist das Trennzeichen, also nützt es nix beim Einlesen ein anderes Trennzeichen zu benutzen.
Wenn ein eingelesener Satz so aussieht:

a,b,c,d

kann Excel natürlich nicht wissen dass es so wie in Zeile 2 aussehen soll, sondern wandelt es wie in Zeile 1 um.

 │ A │ B │ C │ D │ 
──┼─────┼─────┼─────┼─────┤
1 │ a │ b │ c │ d │ 
2 │ a │ b,c │ d │ │ 
──┴─────┴─────┴─────┴─────┘

Dann kann man nur manuell etwas korrigieren.

Völlig anders ist der Fall wenn du auch die csv Datei erzeugst, dann kannst du frei bestimmen welches Zeichen der Trenner sein soll, also so z.B.:

a|b,c|d

Jetzt sehe ich aber in deiner Anfrage keinen Hinweis dass du auch die csv Datei erzeugst.

Gruß
Reinhard

Völlig anders ist der Fall wenn du auch die csv Datei
erzeugst, dann kannst du frei bestimmen welches Zeichen der
Trenner sein soll, also so z.B.:

a|b,c|d

Jetzt sehe ich aber in deiner Anfrage keinen Hinweis dass du
auch die csv Datei erzeugst.

Hallo Reinhard,

doch doch, ich erzeuge die CSV-Dateien selbst. Ich kann sie mit Komma, Semikolon, Tab und Pipe als Trenner erzeugen.

Nur habe ich es eben nicht geschafft das Makro zu umzubauen, dass es mit anderen Trennern als Komma funktioniert. Für die Hilfe wäre ich sehr dankbar.

Viele Grüße,
Michael

doch doch, ich erzeuge die CSV-Dateien selbst. Ich kann sie
mit Komma, Semikolon, Tab und Pipe als Trenner erzeugen.
Nur habe ich es eben nicht geschafft das Makro zu umzubauen,
dass es mit anderen Trennern als Komma funktioniert. Für die
Hilfe wäre ich sehr dankbar.

Hi Michael,
die Namen die Vba kennt zu benutzen als Variablennamen bringt nur eins irgendwann, Probleme :smile:
Also nie „Path“ „Name“ o.ä. benutzen. Entweder deutsch (naja, klappt bei „Name“ nicht) „Pfad“ oder so „myPath“,„strPath“, „lngRow“ „intColumn“
Letztere haben den großen Vorteil dasss du bei langem Codes gleich am Namen erkennst welcher VariablenTyp die Variable ist.

Ungetestet, weil ich grad nur XL97 aufhbe und das kennt kein „Split“:

Option Explicit

Sub Lesen()
Dim Pfad, Trenner, Datei, Nr, Splitsatz, Satz, S, Zei
Pfad = "c:\Test\"
Datei = "test.txt"
Trenner = "|"
Close
Open Pfad & Datei For Input As #1
While Not EOF(1)
 Zei = Zei + 1
 Line Input #Nr, Satz
 Splitsatz = Split(Satz, Trenner)
 For S = 0 To UBound(Satz)
 Cells(Zei, S + 1) = Splitsatz(S)
 Next S
Wend
Close
End Sub

Sub Schreiben()
Dim Pfad, Trenner, Datei, Satz, S, Zei
Pfad = "c:\Test\"
Datei = "test.txt"
Trenner = "|"
Close
Open Pfad & Datei For Output As #1
For Zei = 1 To Range("A65536").End(xlUp).Row
 Satz = ""
 For S = 1 To Cells(Zei, 256).End(xlToLeft).Column
 Satz = Satz & Cells(Zei, S).Value & Trenner
 Next S
 Print #1, Left(Satz, Len(Satz) - 1)
Next Zei
Close
End Sub

Gruß
Reinhard