Dateien mit Excel VBA erzeugen – Teil 1 CSV/TXT-Format

Dateien aus Excel können vielfach direkt in andere Anwendungen importiert werden. Manche Systeme/Anwendungen benötigen jedoch speziell aufbereitete Daten in bestimmten Speicherformaten um diese weiterverarbeiten oder nutzen zu können. An einem einfachen Beispiel zeige ich Ihnen in drei Teilen, wie Sie mit einem Excel-Makro Daten aus einer Exceltabelle in unterschiedlichen Speicherformaten erzeugen.

Teil 1: CSV/TXT-Format
Teil 2: HTML Format (Veröffentlichung erfolgt in Kürze)
Teil 3: XML Format (Veröffentlichung erfolgt in Kürze)

Für den Import/Export von Dateien werden grundsätzlich verschiedene Dateiformate genutzt. Die gängigsten hierfür genutzten Formate sind Textdateien, bei denen die Datensätze ohne die Informationen zur Formatierung der Zellwerte gespeichert werden und mit einem fest definierten Trennzeichen (z.B. Semikolon) oder einer festgelegten Breite die Abgrenzung der Spalten sicherstellen. Der Vorteil von Textdateien liegt insbesondere darin, dass diese Formate sehr leicht zu verarbeiten sind und zahlenmäßig von den meisten Anwendungen unterstützt werden. Das Risiko bei diesen Speichertypen: Die festgelegte Breite ist bei langen Inhalten nicht breit genug gewählt oder das Trennzeichen kommt auch innerhalb einer Zeichenkette im Zellwert vor. Zudem kann es zu Problemen kommen, wenn beim Import die Zellwerte aufgrund der fehlenden Angaben zur Formatierung von der Anwendung falsch interpretiert werden. Gängige Probleme in Excel sind Zahlenwerte mit mehr als 11 Ziffern und Zahlen, die mit einer Null beginnen. Diese Zellwerte müssen grundsätzlich als Text formatiert werden um Fehlinterpretationen in Excel zu verhindern. Beim Export in einer Textdatei geht die Information zur Formatierung jedoch verloren.

Für die Erstellung einer CSV oder TXT Datei steht am Ende des Beitrag eine Mustermappe zum Download bereit. Hier wird der erforderliche VBA-Code exemplarisch für eine Tabelle mit drei Spalten genutzt.

Der folgende VBA-Code erstellt eine Datei im Format “.txt”. Grundsätzlich ist dieser Programmcode identisch mit der Erstellung einer Datei im CSV-Format. Allerdings muss hier die Dateiendung angepasst werden. Beim Export im CSV-Format muss allerdings noch beachtet werden, dass die Spaltenüberschriften mit Bedacht gewählt werden. Steht zum Beispiel in Zelle A1 die Überschrift “ID” meldet Excel beim Öffnen der Datei den Fehler:

Das Dateiformat und die Dateierweiterung von ‘dateiname.csv’ passen nicht zueinander. Möglicherweise ist die Datei beschädigt oder nicht sicher. Sie sllten sie nicht öffnen, wenn Sie ihrer Quelle nicht vertrauen. Möchten Sie die Datei trotzdem öffnen?

Um den VBA-Code zu testen sind die Werte für die Variablen strPath und strDateiname ggf. zu ändern. Die Variable strPath beinhaltet den Speicherpfad in der die Textdatei erstellt werden soll. Der Ordner muss bereits existieren und mit einem abschließenden “\” enden. In der Variable strDateiname wird der Dateiname und die Dateiendung der zu erstellenden Textdatei festgelegt. Achtung: Existiert die Datei im Ordner bereits, wird die Datei ohne Warnung überschrieben!

Sub TXT_erzeugen()

Dim strDateiname As String, strPath As String
Dim i As Long, lngZeile As Long

strPath = "C:\Dateien_erstellen\TXT\" 'Speicherpfad eintragen
strDateiname = "txt_dateiname.txt" 'Dateinamen mit Dateiendung eintragen
lngZeile = Range("A" & Rows.Count).End(xlUp).Row

Open strPath & strDateiname For Output As #1

For i = 1 To lngZeile
    Print #1, Cells(i, 1).Value & ";" & Cells(i, 2).Value & ";" & Cells(i, 3).Value
Next i

Close #1

End Sub

Die Anzahl der Datensätze wird über die letzte genutzte Zelle in Spalte A ermittelt. Überschriften werden in Zeile 1 erwartet. Hat die Tabelle keine Überschriften, oder sollen anders beschriftete Überschriften erstellt werden, kann das Makro wie folgt angepasst werden.

For i = 1 To lngZeile
    if i = 1 then
        Print #1, "SpalteA;SpalteB;SpalteC"
    else
        Print #1, Cells(i, 1).Value & ";" & Cells(i, 2).Value & ";" & Cells(i, 3).Value
    end if
Next i

Zur Vollständigkeit noch der VBA-Code für die Erstellung einer Datei im CSV-Format:

Sub CSV_erzeugen()

Dim strDateiname As String, strPath As String
Dim i As Long, lngZeile As Long

strPath = "C:\Dateien_erstellen\CSV\" 'Speicherpfad eintragen
strDateiname = "txt_dateiname.csv" 'Dateinamen mit Dateiendung eintragen
lngZeile = Range("A" & Rows.Count).End(xlUp).Row

Open strPath & strDateiname For Output As #1

For i = 1 To lngZeile
    Print #1, Cells(i, 1).Value & ";" & Cells(i, 2).Value & ";" & Cells(i, 3).Value
Next i

Close #1

End Sub

Excel Mustermappe:

Dateien im CSV/TXT-Format erstellentextdatei_erstellen.xlsm

 

Schreibe einen Kommentar