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
Teil 3: XML-Format

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

 
Gefällt Ihnen der Beitrag?

6 Gedanken zu “Dateien mit Excel VBA erzeugen – Teil 1 CSV/TXT-Format

  1. Guten Abend Herr Schade
    Ich habe Ihren Code im Netz entdeckt und habe eine Frage, ich habe eine Arbeitsmappe mit diversen Tabellenblätter und möchte ein bestimmtes Blatt in meinem fall “Protokoll” auslesen die Titel sind dabei fest in Zeile 1″Tabelle, Zelle, neuer Wert, Datum, Uhrzeit, Benutzer”, das heisst wenn etwas in der Mappe geändert wird wird das im Protokoll festgehalten, jetzt möchte ich das die *.txt erstellt wird dabei aus meiner cboKW an die Textdatei angehängt wird (Protokoll_2018_01) und anschliessen ab der Zeil2 und folgend der inhalt aus dem “Portokoll_Tabellenblatt” entfernt wird.

    Für ihre Idee wäre ich Ihnen sehr Dankbar, falls Sie meine Tabelle brauchen kann ich Ihnen diese per Mail übermitteln.

    Freundliche Grüsse Thomas Testa

    • @Thomas Testa: In diesem Fall darf die Textdatei nicht neu erstellt bzw. überschrieben werden, sondern die vorhandene Datei muss zum Bearbeiten geöffnet werden. Ungefähr so:

      Open strPath & strDateiname For Append As #1

      Darüber hinaus sind größere Anpassungen am Makro erforderlich um die weiteren individuellen Vorgaben zu erfüllen. Wenn Sie hierfür Unterstützung benötigen kann ich Ihnen gerne ein individuelles Angebot für die Programmierung erstellen.

  2. Guten Tag Herr Schade,
    ich habe mehrere xml Dateien von denen ich die Daten in Excel einlesen muss. Pro Datei muss ich ein Tabellenblatt erstellen. Es wurde mir gesagt, dass es mit VBA einfacher gehen würde ich weiß nicht wie ich voran gehen muss.

    • @Sarina: Einfacher als einzeln von Hand? Also generell kann natürlich jede Aufgabe auch mit VBA gelöst werden. Ob das im Einzelfall zielführend ist, kommt darauf an, ob man die Lösung immer wieder benötigt oder nur einmalig. Ein Makro zu schreiben ist keine Kleinigkeit und rechnet sich regelmäßig erst dann, wenn das Makro mehrfach genutzt werden soll.

      XML-Dateien mit VBA einlesen ist nicht gerade eine Aufgabe für Programmieranfänger. Ohne nähere Hintergründe zu Ihrem Vorhaben zu kennen, können Sie mit der Aufzeichnung von Makros den manuellen Einlesevorgang über die Standardfunktion in VBA umsetzen. Nachfolgend können Sie dann versuchen das aufgezeichnete Makro so anzupassen, dass Ihre weiteren Anforderungen untersützt werden. Weitere Unterstützung können Sie alternativ über die Beauftragung eines Auftragsmakros erhalten.

Schreibe einen Kommentar