VBA: CSV-Export mit Semikolon

VBA: *.csv mit Semikolon als Trennzeichen

Wenn Sie eine Datei ganz normal von Excel aus als *.csv speichern, dann wird automatisch das landesspezifische Trennzeichen für die einzelnen Spalten verwendet. Das ist hier in Deutschhand das Semikolon. Wenn Sie aber solch einen Export per VBA, also per Makro ausführen wollen, dann wird es wirklich „csv“ sein, also comma separated values. Beim Import werden diese Kommata aber nicht automatisch erkannt und es muss immer wieder ein zusätzlicher Schritt erfolgen, um das Trennzeichen Komma statt des Semikolons zu akzeptieren.

Da sollte das „Übel“ gleich bei der Wurzel gepackt werden und bereits beim speichern der Daten ein Semikolon als Trenner verwendet werden. Verwenden Sie dazu den folgenden Code (hier in der*.zip als Text- und *.bas – Datei) für den Export. Beachten Sie bitte: Das Zielverzeichnis muss existieren, eine vorhandene *.csv-Datei mit dem gleichen Pfad und Namen wird ohne Rückfrage überschrieben!

Option Explicit

Sub SaveAsCSV()
   Dim DstFileName As String, DstPfad As String
   Dim Delimiter As String
   Dim strZe As String
   Dim lRow As Long, lCol As Integer
   Dim Ze As Long, Sp As Integer
   Dim ff As Integer
   
   On Error GoTo ErrorHandler
   DstPfad = "C:\Daten\" 'Anpassen, muss bereits existieren
   DstFileName = DstPfad & "CSV-Export.csv" 'Anpassen
   Delimiter = ";"
   With ActiveSheet
      lRow = .Cells.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
      lCol = .Cells.Find(what:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
      ff = FreeFile
      Open DstFileName For Output As #ff
      'Zeile für Zeile lesen und schreiben ...
      For Ze = 1 To lRow
         For Sp = 1 To lCol - 1
            strZe = strZe & .Cells(Ze, Sp) & Delimiter
         Next Sp
         strZe = strZe & .Cells(Ze, Sp)
         Print #ff, strZe
         strZe = ""
      Next Ze
   
   End With

ErrorHandler:
   If Err.Number <> 0 Then MsgBox "Fehler Nr. " & Err.Number & vbCrLf _
    & Err.Description, vbCritical + vbOKOnly, "Das ging schief ..."
   If ff > 0 Then Close #ff
End Sub

Mit diesem Code wird der gesamte genutzte Bereich des Arbeitsblattes als *.csv exportiert. Sollen Texte in Anführungszeichen gesetzt werden, weil beispielsweise in dem Text auch das Trennzeichen (hier: Semikolon) vorkommen kann, dann muss der Code entsprechend ergänzt werden. Das Komma als Dezimaltrenner bleibt erhalten. Mit diesem Code haben Sie ein hohes Maß an Kontrolle beim Export.

Und jetzt, ganz zum Schluss und etwas verschämt eine weitere Methode, wie Sie mit sehr, sehr wenig Code eine beliebige Datei als *.csv mit den landesüblichen Trennzeichen für Spalten, Tausendergruppierung und auch Dezimalstellen speichern können:

ActiveSheet.SaveAs Filename:=csvName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True

wobei csvName eine String-Variable mit den Namen der künftigen CSV-Datei ist. Mehr dazu können Sie in der Microsoft-Hilfe zur SaveAs – Methode des Worksheet-Objekts nachlesen. Vielleicht ist der eine oder andere Parameter für Sie interessant.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00  freuen …

Dieser Beitrag wurde unter Code-Schnipsel, Downloads, Fehlerbehandlung, Verschiedenes abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.