Angeben eines Trennzeichens beim Speichern einer CSV-Datei in einem Makro (Microsoft Excel)
Bei der Verwendung der in der Multifunktionsleiste verfügbaren Werkzeuge zum Exportieren eines Arbeitsblatts als CSV-Datei stellte Arkadiusz fest, dass er angeben kann, dass ein Semikolon (;) als Feldtrennzeichen verwendet werden soll. Wenn er jedoch eine CSV-Datei mit einem Makro (FileFormat: = xlCSV oder xlCSVWindows) speichert, kann er kein Semikolon als Trennzeichen angeben.
Dies funktioniert in VBA so. Die Excel-Implementierung der Exportroutinen für VBA verwendet immer die regionalen Windows-Einstellungen, um zu bestimmen, wie Elemente in einer CSV getrennt werden sollen.
Insbesondere untersucht die Routine das Feld Listentrennzeichen für das Trennzeichen. Dies bedeutet, dass Sie bei Bedarf das Trennzeichen in ein Semikolon ändern können, indem Sie die Einstellung Listentrennzeichen in Ihrer Konfiguration der regionalen Einstellungen ändern.
Wenn Sie die regionalen Einstellungen nicht ändern möchten, können Sie stattdessen ein eigenes Makro schreiben, das die Datei auf die von Ihnen gewünschte Weise ausgibt.
Betrachten Sie für einen Moment das folgende Makro, das die Datei ausgibt:
Sub CreateFile() Dim sFName As String Dim Rows As Long Dim Cols As Long Dim J As Long Dim K As Long Dim sTemp As String Dim sSep As String sSep = ";" 'Specify the separator to be used sFName = ActiveWorkbook.FullName If Right(sFName, 5) = ".xlsx" Then sFName = Mid(sFName, 1, Len(sFName) - 5) sFName = sFName & ".txt" Open sFName For Output As 1 With ActiveSheet 'Number of rows to export is based on the contents 'of column B. If it should be based on a different 'column, change the following line to reflect the 'column desired. Rows = .Cells(.Rows.Count, "B").End(xlUp).Row For J = 1 To Rows sTemp = "" Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column For K = 2 To Cols sTemp = sTemp & .Cells(J, K).Value If K < Cols Then sTemp = sTemp & sSep Next Print #1, sTemp Next J End With Close 1 sTemp = "There were " & Rows & " rows of data written " sTemp = sTemp & "to this file:" & vbCrLf & sFName Else sTemp = "This macro needs to be run on a workbook " sTemp = sTemp & "stored in the XLSX format." End If MsgBox sTemp End Sub
Dieses Makro öffnet eine Textdatei mit demselben Namen wie Ihre Arbeitsmappe. Anschließend wird jede Zeile durchlaufen und eine Zeichenfolge des Zelleninhalts zusammengestellt. (Dies wird in die Variable sTemp eingefügt.) Zwischen jeder Zelle befindet sich ein Semikolon, das durch die Variable sSep definiert wird. Die verketteten Werte jeder Zeile werden in der Textdatei gespeichert, und wenn Sie fertig sind, wird die Textdatei geschlossen. Die Routine ist sehr schnell und zeigt nach Abschluss eine Meldung an, wie viele Zeilen in die Datei exportiert wurden.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (9243) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: