CSV-Datei mit UniCode Zeichen erzeugen

Dieser Beitrag zeigt Schritt für Schritt, wie sich eine Unicode-CSV in Excel VBA erzeugen lässt – inklusive chinesischer Zeichen und Sonderzeichen. Durch den Unicode-Export werden Zeichen außerhalb des ASCII-Satzes zuverlässig geschrieben. So erhalten Sie eine sauber codierte CSV-Datei, die sich in vielen Systemen korrekt weiterverarbeiten lässt.

Die Ausgangsdatei enthält drei Spalten, in der dritten Spalte befinden sich chinesische Zeichen, die in die CSV-Datei übertragen werden sollen, siehe Abbildung:

Was ist eine Unicode-CSV und warum Excel VBA?

Eine klassische CSV-Datei basiert oft auf ANSI bzw. ASCII und verliert dadurch Sonderzeichen oder nicht-lateinische Schriftzeichen. Eine Unicode-CSV speichert die Daten hingegen in einem Unicode-Zeichensatz. Der untenstehende VBA-Code schreibt eine UTF-16-LE-codierte CSV mit Byte Order Mark (BOM). Das sorgt dafür, dass Editoren wie Windows-Editor (Notepad) oder Importfunktionen vieler Anwendungen die Datei als Unicode erkennen und Zeichen wie ä, ö, ü, ß oder chinesische Schrift korrekt darstellen.

Voraussetzungen und Datenaufbau in Excel

Die Ausgangsdatei enthält drei Spalten; in der dritten Spalte befinden sich unter anderem chinesische Zeichen, die in die CSV-Datei übernommen werden sollen. Der Code verwendet als Trennzeichen ein Semikolon, was in deutschsprachigen Ländereinstellungen üblich ist. Ermittelt wird die Anzahl der zu exportierenden Spalten anhand des Tabellenblatts "Daten"; die zu exportierenden Zeilen werden vom jeweils aktiven Arbeitsblatt gelesen.

Schritt-für-Schritt: Unicode-CSV in Excel VBA erzeugen

  1. Arbeitsmappe vorbereiten: Legen Sie Ihre Daten an. Stellen Sie sicher, dass das Blatt "Daten" die zu berücksichtigende letzte Spalte korrekt repräsentiert. Enthaltene Sonderzeichen (z. B. chinesische Schrift) bleiben im Export erhalten.
  2. VBA-Modul anlegen: Öffnen Sie den VBA-Editor (ALT+F11), fügen Sie ein Standardmodul ein und kopieren Sie die drei Prozeduren unverändert in das Modul.
  3. Export starten: Führen Sie die Prozedur "UniCode_CSV_erzeugen" aus. Die erzeugte Unicode-CSV wird im gleichen Ordner wie die Excel-Datei gespeichert.
  4. Ergebnis prüfen: Öffnen Sie die CSV in einem Editor, der Unicode erkennt (z. B. Notepad). Achten Sie auf korrekt dargestellte Sonderzeichen und Trennzeichen.

VBA-Code zur Erzeugung von Unicode-CSV-Dateien

Sub UniCode_CSV_erzeugen()
'** Dimensionierung der Variablen
Dim strFile As Variant
'** Dateiname + Pfad festlegen
'strFile = Application.GetSaveAsFilename("Unicode_CSV-Datei.csv", "CSV-Dateien,*.csv,Alle Dateien,*.*")
strFile = ThisWorkbook.Path & "\Unicode-CSV-Datei.csv"
'** Beenden, wenn kein Dateiname vorhanden ist
If strFile = False Then Exit Sub
'** Speicher-Prozedur aufrufen
Code_CSV_speichern (strFile)
End Sub

Sub Code_CSV_speichern(strFile As String)
'** Dimensionierung der Variablen
Dim filenr, a, b, lngAnzSp As Integer
Dim strData As String '** CSV-Datenzeile
'** Vorgaben definieren
filenr = FreeFile
lngAnzSp = ThisWorkbook.Sheets("Daten").Cells.SpecialCells(xlCellTypeLastCell).Column
'** Datei öffnen
Open strFile For Output As #filenr
'** Daten in CSV-Datei schreiben
Print #filenr, Chr(255); Chr(254);
For a = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
  strData = ""
  For b = 1 To lngAnzSp - 1
     strData = strData & Cells(a, b).Text & ";"
  Next b
  strData = strData & Cells(a, b).Text & vbCrLf
  Print #filenr, GetUniCodeString(strData);
Next a
'** Datei schließen
Close #filenr
End Sub

Private Function GetUniCodeString(s As String) As String
'** Dimensionierung der Variablen
Dim a As Integer  ' Zähler über die einzelnen Bytes des Unicode-Strings
'** Umwanden in Unicode-Zeichen
GetUniCodeString = ""
For a = 1 To LenB(s)
   GetUniCodeString = GetUniCodeString & Chr(AscB(MidB(s, a, 1)))
Next
End Function

So funktioniert der Code im Detail

Die Prozedur "UniCode_CSV_erzeugen" legt den Zielspeicherort fest und ruft die Speicher-Routine auf. In "Code_CSV_speichern" wird zuerst die freie Dateinummer ermittelt und die maximale Spaltenanzahl vom Blatt "Daten" gelesen. Direkt nach dem Öffnen der Zieldatei wird die BOM für UTF-16 Little Endian mit Chr(255); Chr(254); geschrieben. Anschließend werden alle Zeilen des aktiven Blatts gelesen, zu einer Semikolon-separierten Zeichenkette zusammengefügt und per "GetUniCodeString" in eine Unicode-Ausgabe überführt. Die Funktion "GetUniCodeString" zerlegt den Byte-String und baut daraus die korrekten Unicode-Zeichen auf, damit Sonderzeichen unverfälscht in der Datei ankommen.

Praxisbeispiel und Ergebnis prüfen

Angenommen, die Spalten A:C enthalten Name; Artikel; Anmerkung, wobei in Spalte C chinesische Zeichen stehen, etwa: Müller;Tastatur;测试. Nach dem Export sehen Sie in einem geeigneten Editor alle Zeichen korrekt. Prüfen Sie bei einem CSV-Import in andere Systeme, ob als Trennzeichen ein Semikolon erwartet wird. Falls ein Komma verlangt ist, muss die Importlogik des Zielsystems entsprechend konfiguriert werden.

Häufige Fehlerquellen und Lösungen

  • Falscher Blattname: Die Spaltenanzahl wird über das Blatt "Daten" ermittelt. Existiert es nicht oder ist es leer, stimmen die Spalten nicht.
  • Aktives Blatt vs. Spaltenquelle: Zeilen werden vom aktiven Blatt exportiert. Aktivieren Sie vor dem Export das gewünschte Datenblatt.
  • Trennzeichen: Das Skript nutzt ein Semikolon. Erwartet das Zielsystem ein Komma, muss der Import entsprechend angepasst werden.
  • Versteckte oder leere Endspalten/Zeilen: Die Ermittlung der letzten Zelle (SpecialCells) richtet sich nach dem verwendeten Bereich. Unerwünschte Formatierungen am Tabellenende können das Ergebnis verfälschen. Bereinigen Sie den verwendeten Bereich bei Bedarf.
  • Anführungszeichen innerhalb von Feldern: Enthalten Felder Semikola oder Zeilenumbrüche, prüfen Sie beim Import, ob Textqualifizierer gesetzt werden. Die vorliegende Routine schreibt reine Feldinhalte mit Semikolon-Trennzeichen.
  • Speicherpfad: Standardmäßig wird im Arbeitsmappenordner gespeichert. Für eine individuelle Auswahl kann die auskommentierte GetSaveAsFilename-Zeile genutzt werden (Code ist bereits enthalten).

Tipps für den produktiven Einsatz

Viele Systeme bevorzugen UTF-8. Der bereitgestellte Export schreibt bewusst UTF-16 LE mit BOM, da Excel und der Windows-Editor diese Variante zuverlässig erkennen. Prüfen Sie die Anforderungen des Zielsystems vorab. Kontrollieren Sie zudem das verwendete Trennzeichen, die Feldreihenfolge und ob alle Spalten aus dem Blatt "Daten" benötigt werden. Für wiederholte Exporte empfiehlt sich ein kurzer Probelauf mit wenigen Zeilen, um Zeichensatz und Importparameter sauber abzustimmen.

Fazit

Mit dem hier gezeigten VBA-Ansatz erzeugen Sie eine Unicode-CSV, in der Sonderzeichen und nicht-lateinische Schriften korrekt gespeichert werden. Dank UTF-16-BOM, sauberer Trennung der Felder und einer klaren Exportlogik eignet sich die Lösung für zuverlässige Datenübergaben aus Excel in nachgelagerte Systeme.

Die Beispieldatei können Sie über den folgenden Link herunterladen:

Relevante Artikel

Projekt-Anfrage

Excel automatisieren. Zeit sparen.
Fehler vermeiden.
Wir entwickeln Ihre individuelle
Excel- / VBA-Lösung.
Jetzt anfragen!

    Wir benutzen Cookies
    Ihre Zufriedenheit ist unser Ziel, deshalb verwenden wir Cookies. Mit diesen ermöglichen wir, dass unsere Webseite zuverlässig und sicher läuft, wir die Performance im Blick behalten und Sie besser ansprechen können. Cookies werden benötigt, damit technisch alles funktioniert und Sie auch externe Inhalte lesen können. Des Weiteren sammeln wir unter anderem Daten über aufgerufene Seiten, getätigte Käufe oder geklickte Buttons, um so unser Angebot an Sie zu Verbessern. Mehr über unsere verwendeten Dienste erfahren Sie unter „Weitere Informationen“. Mit Klick auf „Akzeptieren“ erklären Sie sich mit der Verwendung dieser Dienste einverstanden. Ihre Einwilligung können Sie jederzeit mit Wirkung auf die Zukunft widerrufen oder ändern.