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

CSV Format speicher, trotzdem getrennte Zellen

Forumthread: CSV Format speicher, trotzdem getrennte Zellen

CSV Format speicher, trotzdem getrennte Zellen
24.08.2008 22:11:07
Marc
Hallo liebe Excelfreunde,
ich habe ein etwas ungewöhnliches Problem. Ich habe einen Beleg, aus dem ich per VBA einen CSV Beleg erstellen lasse. Neben einigen Umformatierungen lasse ich die Datei dann auch mit der folgenden Codezeile
ActiveSheet.SaveAs Filename:="C:\Name".csv" , FileFormat:=xlCSVWindows
in eine CSV Datei umwandeln und so speichern. Mein Problem dabei ist, dass Excel die Daten, wie der Name des Formats schon sagt, Comma Separated Values File, nur noch durch Kommata trennt und die Trennung in Zellen aufhebt. Diese Trennung soll aber erhalten bleiben. Denn die so erzeugte Datei wird durch ein Schnittstellenprogramm in ein automatisches System eingelesen. Und dieses System benötigt einerseits eine CSV Datei und andererseits trotzdem die Trennung in Zellen. Dahingehend gibt es also leider keine Diskussion.
Wenn ich die Datei von Hand erstelle und sie von Hand als eine CSV Datei abspeichere, dann bleibt auch die Trennung in Zellen erhalten. Wie kann ich VBA dazu bringen das gleiche zu tun? Ihr würdet mir unheimlich helfen, wenn ihr mir diese Frage beantworten könnt.
Ich danke euch bereits im Voraus vielmals für die Gedanken und die Mühe, die ihr euch macht!
Herzliche Grüße,
Marc
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Format speicher, trotzdem getrennte Zellen
24.08.2008 22:36:00
Daniel
Hi
eine CSV-Datei hat keine Aufteilung in Zellen, egal was du machst. die Kennzeichnung für die Zellentrennung ist, wie der Name CSV schon sagt, das KOMMA (in deutschen CSV-Dateien allerdings öfters auch das Semikolon)
der eindruck, daß die Zellteilung mal bestehen bleibt und mal aufgehoben wird, kommt dadurch, daß excel versucht, beim Öffenen der CSV-Datei diese automatisch in Zellen aufzuteilen. bei bestimmten Trennzeichen (Semikolon) funktioniert das, bei anderen (Komma) eben nicht, aber das liegt nicht an der CSV-Datei, sondern an der Import-Routine von Excel.
wenn du gewissheit haben willst, was du tatsächlich abgespeichert hast, dann öffnest du die CSV-Datei mit dem Windows-Editor (oder einem vergleichbaren Programm). Nur dort siehst du die CSV-Daten auch so, wie sie tatsächlich vorliegen.
Entscheidend ist also, welches Trennzeichen in der CSV-Datei verwendet wird, Komma oder Semikolon.
das wird über die Eigenschaft "Local:=True / False" gesteuert.
bei "Local:=True" wird das deutsche Semikolon verwendet, ansonsten das internationale Komma.
dein Befehl zum Speichern müsste also so lauten:

ActiveWorkbook.SaveAs ""C:\Name", FileFormat:=xlCSVWindows, local:=True


(die Dateiendung ".csv" kannst du beim Speichern weglassen, die wird automatsich ergänzt)
Gruß, Daniel

Anzeige
AW: CSV Format speicher, trotzdem getrennte Zellen
24.08.2008 22:49:08
Marc
Hallo Daniel,
vielen Dank schonmal für Deine Antwort. Das ist schon eine sehr hilfreiche Antwort!!! Nur seltsamerweise ist es egal was ich eingebe, ob local:=True oder local:=False. Als Trennzeichen erscheint in beiden Fällen das Komma. Gibt es einen anderen Trick, mit dem ich Excel zum Semikolon überreden kann?
Grüße,
Marc
Anzeige
Mit sanfter Gewalt! ;)
24.08.2008 23:04:00
Backowe
Hi Marc,
VBA-Code:
Sub export_CSV()
Dim fileSaveName As Variant
Dim Trennzeichen As String, Text As String
Dim ZeileMax As Long, SpalteMax As Long, _
  Zeile As Long, Spalte As Long
Close #1
'fileSaveName = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv", Title:="Als CSV beliebiges Trennzeichen separiert speichern")
fileSaveName = "C:\Test.csv"
If fileSaveName <> False Then
  Open fileSaveName For Output As #1
  Trennzeichen = ";"
  ZeileMax = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
  SpalteMax = ActiveSheet.UsedRange.Columns.Count + ActiveSheet.UsedRange.Column - 1
  For Zeile = 1 To ZeileMax
    Text = ""
      For Spalte = 1 To SpalteMax
        Text = Text & ActiveSheet.Cells(Zeile, Spalte).Value & Trennzeichen
      Next Spalte
    Print #1, Text
  Next Zeile
Close #1
End If
End Sub
Gruß Jürgen
AW: Mit sanfter Gewalt! ;)
Marc

Hallo Jürgen,
vielen Dank für Deinen Code. Ehrlich gesagt verstehe ich ihn noch nicht so ganz... Aber es scheint mir, als ob der Code die Datei zwar aufgreift und sie mit der Dateiendung .csv versieht, sie aber trotzdem immer noch im xls Format abspeichert. Oder bin ich da jetzt auf dem Holzweg? Vielleicht habe ich ja den Code auch falsch eingebaut?! Ich bin zwar dabei mich mit Programmierung zu beschäftigen. Aber wie schon angegeben bin ich bei VBA immer noch bescheiden. Kannst Du mir vielleicht ein paar Erläuterungen dazu geben?
@ Daniel, ich habe nachgesehen. Wenn ich mich nicht irre oder ich an der falschen Stelle nachgesehen habe müsste die lokale Einstellung auf Deutschland stehen. Aber wer weiß schon, was MS Produkte hin und wieder machen... Ich danke Dir trotzdem sehr für Deine Hilfe. Mein Hintergrundwissen hat sich auf jeden Fall erweitert!
Grüße,
Marc
Der Code macht folgendes!
Backowe

Hi Marc,
als erstes wird in dem aktuellen Tabellenblatt die Zeilen- und Spaltenanzahl festgelegt, dann durch läuft der Code Zeile für Zeile und es wird jede Zelle in der Zeile als Zelle, Trennzeichen, Zelle usw. als Variable belegt, ist die komplette Zeile durchlaufen, wird die Variable Zeile für Zeile in die vorher festgelegte Textdatei geschrieben.
Gruß Jürgen
AW: CSV Format speicher, trotzdem getrennte Zellen
Daniel

Hi
nein.
bei mir überredet das Setzen des Parameters "Local:=True" Excel dazu, das Semikolon zu verwenden.
kommt vielleicht auch darauf an, was du grad für ne Ländereinstellung hast, ist die bei dir auf "Deutschland" eingestellt
ein letzter Workaround wäre natürlich, pro Zeile die ganzen Zellen in eine zusammenzufassen und dabei das Semikolon als Trennzeichen zu verwenden, beispielsweise in Spalte A eine neue Zeile einfügen mit dieser Formel:

=A1&";"&B1&";"&C1&";"&D1


dann in dieser Zeile Formeln durch Werte ersetzen, die alten Spalten löschen und dieses Blatt als CSV-Datei speichern. (wenn die originaldaten nicht gelöscht werden sollen, dann kann man diese Formel ja in einem anderen Blatt einfügen oder sich ein kleines Makro schreiben)
da jetzt für Excel die Datei nur eine Spalte hat, wird kein Spaltentrennzeichen eingefügt.
allerdings haben wir ja die Semikolons schon in den Text eingefügt und für die einlesende Anwendung ist es egal, ob die Semikolons aus dem Text kommen oder von Excel als Spaltentrennzeichen eingefügt werden, das ist nachträglich nicht mehr zu differnzieren.
Gruß, Daniel

Anzeige
AW: Mit sanfter Gewalt! ;)
24.08.2008 23:35:43
Marc
Hallo Jürgen,
vielen Dank für Deinen Code. Ehrlich gesagt verstehe ich ihn noch nicht so ganz... Aber es scheint mir, als ob der Code die Datei zwar aufgreift und sie mit der Dateiendung .csv versieht, sie aber trotzdem immer noch im xls Format abspeichert. Oder bin ich da jetzt auf dem Holzweg? Vielleicht habe ich ja den Code auch falsch eingebaut?! Ich bin zwar dabei mich mit Programmierung zu beschäftigen. Aber wie schon angegeben bin ich bei VBA immer noch bescheiden. Kannst Du mir vielleicht ein paar Erläuterungen dazu geben?
@ Daniel, ich habe nachgesehen. Wenn ich mich nicht irre oder ich an der falschen Stelle nachgesehen habe müsste die lokale Einstellung auf Deutschland stehen. Aber wer weiß schon, was MS Produkte hin und wieder machen... Ich danke Dir trotzdem sehr für Deine Hilfe. Mein Hintergrundwissen hat sich auf jeden Fall erweitert!
Grüße,
Marc
Anzeige
Der Code macht folgendes!
25.08.2008 09:24:28
Backowe
Hi Marc,
als erstes wird in dem aktuellen Tabellenblatt die Zeilen- und Spaltenanzahl festgelegt, dann durch läuft der Code Zeile für Zeile und es wird jede Zelle in der Zeile als Zelle, Trennzeichen, Zelle usw. als Variable belegt, ist die komplette Zeile durchlaufen, wird die Variable Zeile für Zeile in die vorher festgelegte Textdatei geschrieben.
Gruß Jürgen
Anzeige
AW: CSV Format speicher, trotzdem getrennte Zellen
24.08.2008 23:07:00
Daniel
Hi
nein.
bei mir überredet das Setzen des Parameters "Local:=True" Excel dazu, das Semikolon zu verwenden.
kommt vielleicht auch darauf an, was du grad für ne Ländereinstellung hast, ist die bei dir auf "Deutschland" eingestellt
ein letzter Workaround wäre natürlich, pro Zeile die ganzen Zellen in eine zusammenzufassen und dabei das Semikolon als Trennzeichen zu verwenden, beispielsweise in Spalte A eine neue Zeile einfügen mit dieser Formel:

=A1&";"&B1&";"&C1&";"&D1


dann in dieser Zeile Formeln durch Werte ersetzen, die alten Spalten löschen und dieses Blatt als CSV-Datei speichern. (wenn die originaldaten nicht gelöscht werden sollen, dann kann man diese Formel ja in einem anderen Blatt einfügen oder sich ein kleines Makro schreiben)
da jetzt für Excel die Datei nur eine Spalte hat, wird kein Spaltentrennzeichen eingefügt.
allerdings haben wir ja die Semikolons schon in den Text eingefügt und für die einlesende Anwendung ist es egal, ob die Semikolons aus dem Text kommen oder von Excel als Spaltentrennzeichen eingefügt werden, das ist nachträglich nicht mehr zu differnzieren.
Gruß, Daniel

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

CSV Format speichern und trotzdem getrennte Zellen beibehalten


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle als CSV-Datei zu speichern und dabei die Trennung in Zellen zu erhalten, kannst Du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es, CSV-Dateien mit einem benutzerdefinierten Trennzeichen (z.B. Semikolon) zu erstellen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklicke auf "VBAProject" -> "Einfügen" -> "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub export_CSV()
       Dim fileSaveName As Variant
       Dim Trennzeichen As String
       Dim ZeileMax As Long, SpalteMax As Long, _
           Zeile As Long, Spalte As Long
    
       fileSaveName = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv", Title:="CSV speichern")
    
       If fileSaveName <> False Then
           Open fileSaveName For Output As #1
           Trennzeichen = ";"
           ZeileMax = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
           SpalteMax = ActiveSheet.UsedRange.Columns.Count + ActiveSheet.UsedRange.Column - 1
    
           For Zeile = 1 To ZeileMax
               Dim Text As String
               Text = ""
               For Spalte = 1 To SpalteMax
                   Text = Text & ActiveSheet.Cells(Zeile, Spalte).Value & Trennzeichen
               Next Spalte
               Print #1, Left(Text, Len(Text) - 1) ' Entferne das letzte Trennzeichen
           Next Zeile
           Close #1
       End If
    End Sub
  4. Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.

Mit diesem Code wird eine CSV-Datei mit dem Semikolon als Trennzeichen erstellt, sodass die Daten in den Zellen erhalten bleiben.


Häufige Fehler und Lösungen

  • Problem: Excel in CSV umwandeln funktioniert nicht.

    • Lösung: Stelle sicher, dass Du das richtige Trennzeichen verwendest. Wenn Du ein Semikolon benötigst, setze Local:=True beim Speichern.
  • Problem: CSV-Datei speichert Änderungen nicht.

    • Lösung: Überprüfe, ob die Datei im richtigen Format gespeichert wird. Verwende den Code, um sicherzustellen, dass das richtige Trennzeichen festgelegt ist.
  • Problem: CSV-Datei zeigt Daten nicht in Spalten an.

    • Lösung: Stelle sicher, dass Du die Datei mit dem richtigen Trennzeichen öffnest. Verwende den Windows-Editor, um die Datei zu überprüfen.

Alternative Methoden

  • Manuelles Speichern: Du kannst die Excel-Tabelle manuell als CSV mit Semikolon speichern, indem Du die Datei über "Speichern unter" und dann das entsprechende Trennzeichen auswählst.

  • Daten trennen: Verwende die Funktion "Text in Spalten" in Excel, um Daten, die durch Kommas oder andere Trennzeichen getrennt sind, in separate Spalten zu trennen.

=A1&";"&B1&";"&C1&";"&D1

Diese Formel fasst die Zellen zusammen und trennt sie mit einem Semikolon.


Praktische Beispiele

  • CSV Datei mit Komma getrennt erstellen: Verwende den Befehl ActiveWorkbook.SaveAs und setze local:=False, um eine CSV-Datei mit Komma zu erstellen.

  • CSV Datei in Spalten aufteilen: Nach dem Import einer CSV-Datei kannst Du die Funktion "Text in Spalten" verwenden, um die Daten auf Basis des Trennzeichens zu trennen.


Tipps für Profis

  • Nutze den Application.GetSaveAsFilename Befehl, um den Speicherort dynamisch auszuwählen.

  • Experimentiere mit verschiedenen Trennzeichen, um die beste Lösung für Deine Anwendung zu finden. Manchmal kann es sinnvoll sein, Semikolon statt Komma zu verwenden, besonders in deutschen Excel-Versionen.

  • Achte auf die Ländereinstellungen Deines Excel-Programms, da diese das Trennzeichen beeinflussen können.


FAQ: Häufige Fragen

1. Frage
Wie kann ich eine Excel-Tabelle als CSV mit Komma speichern?
Antwort: Verwende den Befehl ActiveWorkbook.SaveAs mit dem Parameter local:=False und setze das Trennzeichen auf Komma.

2. Frage
Was mache ich, wenn Excel die CSV-Datei nicht korrekt in Spalten trennt?
Antwort: Überprüfe das verwendete Trennzeichen und öffne die Datei im Windows-Editor, um die tatsächliche Struktur zu sehen. Stelle sicher, dass Du die richtige Import-Routine in Excel verwendest.

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