Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schneller Export als CSV mit ";"

Forumthread: Schneller Export als CSV mit ";"

Schneller Export als CSV mit ";"
06.11.2002 20:04:28
Andreas Perlitz
Hallo,

ich habe das Problem, in Excel per VBA als CSV exportieren zu müssen. Jedoch als Trennzeichen ein ";" benötige. Nun gibts hier ja schon einige Lösungen, die leider alle viel zu langsam sind. Gibts evtl. ne Methode die performanter ist wie z.B. die untige?

Vielen Dank und Gruß
Andreas

Sub AlsTextSpeichern()
Dim TB As Worksheet, Dateinummer%
Dim z%, s%, exportfile$, TMP$
exportfile = "C:\test.csv"
Dateinummer = FreeFile
Set TB = ThisWorkbook.Worksheets(1)

Open exportfile For Output As #Dateinummer

For z = 1 To TB.UsedRange.Rows.Count
If Cells(z, 2).Value = Text Then SL = 10 Else SL = 6
For s = 1 To TB.UsedRange.Columns.Count
TMP = TMP & CStr(TB.Cells(z, s).Text) & ";"
Next s
TMP = Left(TMP, Len(TMP) - 1)
Print #Dateinummer, TMP
TMP = ""
Next z
Close #Dateinummer
End Sub


Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Schneller Export als CSV mit ";"
06.11.2002 22:50:27
Ramses
Hallo Andreas,

Verwende die Write# Methode um Daten in eine Datei zu sschreiben. Sonst könnten bei einem späteren Einlesen Probleme auftauchen.Ganz allgemein gebe ich zu bedenken, dass in Deutschland das Komma als Dezimaltrennzeichen gilt,... ein späteres Einlesen also unmöglich ist und auch für die weitere Verwendung keinen Sinn macht.

Das sollte so gehen:

Sub Replace_Semikolon_in_CSV_File()
'Allgemeine Variablen
Dim i As Long, n As Integer
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim TxtLines As Long
Dim TextArr As Variant
'Dateiname als Variable
Dim fName As String
fName = "C:\demo_csv.csv"
'Speichern einer aktiven Datei als CSV-file
ActiveWorkbook.SaveAs Filename:=fName, FileFormat:=xlCSVMSDOS, _
        CreateBackup:=False
ActiveWorkbook.Close
'Schliessen einer allenfalls geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open fName For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
TxtLines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    TxtLines = TxtLines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1

'Erneutes Öffnen um zum Dateianfang zu kommen
Open "c:\demo_csv.csv" For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim TextArr(TxtLines)
'Einlesen der Dateien in das Array
For i = 1 To TxtLines
    Line Input #1, TextArr(i)
    For n = 1 To Len(TextArr(i))
        'Suchen nach dem Semikolon
        If Mid(TextArr(i), n, 1) = "," Then
            'Ersetzen des Semikolins
            TextArr(i) = Application.WorksheetFunction.Replace(TextArr(i), n, 1, ";")
        End If
    Next n
Next i
Close #1
'Zum zurückschreiben musst du den ganzen Array
'wieder in die Datei zurückschreiben.
Open "C:\Demo_csv.csv" For Output As #1
For i = 1 To TxtLines
    Write #1, TextArr(i)
Next i
Close #1
End Sub

     Code eingefügt mit Syntaxhighlighter 1.14

Hier wird die DAtei zuerst exportiert, dann die Datei in ein Array eingelesen und im Array das Semikolon ersetzt.
Geht extrem schnell.


Gruss Rainer

Anzeige
Re: Schneller Export als CSV mit ";"
07.11.2002 10:45:53
Andreas Perlitz
Hallo Rainer,

stimmt, is schnell ;-)
Ich bin auf ne ähnliche Lösung gekommen (um 2:00 Uhr), doch bei weitem nich so elegant wie die Sache mit dem Array.

Vielen Dank
Gruß
Andreas

P.S.: Sollte es interessieren, hier meine Lösung:

'
' Export des aktiven sheets als CSV
'

exportfile_STRG= "C:\exportdatei.csv"

If Dir("C:\csvexport.tmp") = "csvexport.tmp" Then Kill ("C:\csvexport.tmp")
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs FileName:= _
"C:\csvexport.tmp", FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False

Workbooks.OpenText FileName:= _
"C:\csvexport.tmp", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1)


Cells.Replace What:=",", Replacement:=seperator_STRG, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False

ActiveWorkbook.SaveAs FileName:= _
exportfile_STRG, _
FileFormat:=xlTextPrinter, CreateBackup:=False


ActiveWorkbook.Close SaveChanges:=False

Kill ("C:\csvexport.tmp")

End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schneller Export als CSV mit ";"


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA eine CSV-Datei zu erstellen, die das Trennzeichen ; verwendet, kannst Du folgende Schritte befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (deinArbeitsblattname) und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code:

    Sub AlsTextSpeichern()
       Dim TB As Worksheet
       Dim Dateinummer As Integer
       Dim z As Long, s As Long
       Dim exportfile As String
       Dim TMP As String
    
       exportfile = "C:\test.csv"
       Dateinummer = FreeFile
       Set TB = ThisWorkbook.Worksheets(1)
    
       Open exportfile For Output As #Dateinummer
    
       For z = 1 To TB.UsedRange.Rows.Count
           TMP = ""
           For s = 1 To TB.UsedRange.Columns.Count
               TMP = TMP & CStr(TB.Cells(z, s).Text) & ";"
           Next s
           TMP = Left(TMP, Len(TMP) - 1)
           Print #Dateinummer, TMP
       Next z
    
       Close #Dateinummer
    End Sub
  4. Führe das Makro aus:

    • Klicke im VBA-Editor auf Run > Run Sub/UserForm oder drücke F5.

Häufige Fehler und Lösungen

  • Fehler: Datei kann nicht gespeichert werden:

    • Stelle sicher, dass der angegebene Pfad C:\test.csv existiert und Du die nötigen Berechtigungen hast.
  • Fehler: Trennzeichen funktioniert nicht:

    • Überprüfe, ob Du das Trennzeichen im Code korrekt auf ; gesetzt hast.
  • Leere Zeilen in der CSV-Datei:

    • Achte darauf, dass Du keine leeren Zeilen im Arbeitsblatt hast. Diese können beim Export zu unerwarteten Ergebnissen führen.

Alternative Methoden

Eine alternative Methode zum Exportieren von Daten als CSV in Excel ist die Verwendung der SaveAs-Methode. Hier ist ein Beispiel:

Sub ExportAsCSV()
    ActiveWorkbook.SaveAs Filename:="C:\demo_csv.csv", FileFormat:=xlCSV, CreateBackup:=False
    ActiveWorkbook.Close SaveChanges:=False
End Sub

Beachte, dass bei dieser Methode das Standard-Komma als Trennzeichen verwendet wird. Um das Trennzeichen zu ändern, musst Du möglicherweise eine nachträgliche Verarbeitung vornehmen, wie im vorherigen Abschnitt beschrieben.


Praktische Beispiele

Hier sind zwei nützliche Beispiele zur Verwendung von Excel VBA für den CSV-Export:

  1. Export mit Array:

    Sub ExportCSVWithArray()
       Dim i As Long
       Dim TextArr() As String
       Dim fName As String
    
       fName = "C:\demo_csv.csv"
       ' Lese die Daten in ein Array
       ' Dein Code hier ...
       ' Schreibe das Array in eine CSV-Datei
       Open fName For Output As #1
       For i = LBound(TextArr) To UBound(TextArr)
           Print #1, TextArr(i)
       Next i
       Close #1
    End Sub
  2. Verwendung von Write#:

    Sub WriteCSV()
       Dim fName As String
       fName = "C:\demo_csv.csv"
       Open fName For Output As #1
       Write #1, "Dein", "Daten", "Hier"
       Close #1
    End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False zu Beginn Deines Codes, um die Ausführung zu beschleunigen.

  • Teste den Export mit kleinen Datenmengen, bevor Du das gesamte Blatt exportierst.

  • Nutze Debug.Print, um Ausgaben in das Direktfenster zu schreiben, falls Du Fehler im Code suchen musst.


FAQ: Häufige Fragen

1. Wie kann ich das Trennzeichen ändern? Um das Trennzeichen zu ändern, passe den Code an, wo die Daten verarbeitet werden, und setze das gewünschte Trennzeichen (z.B. ;) im Code.

2. Welche Excel-Version benötige ich für VBA? VBA ist in Excel-Versionen ab Excel 97 bis zu den neuesten Versionen verfügbar. Stelle sicher, dass Du eine Version hast, die Makros unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige