
Tips.Net > ExcelTips Home > Files > Specifying a Delimiter when Saving a CSV File in a Macro
Summary: When you create a CSV file from within Excel, you can do some things (like specify delimiters) that you cannot do from within a macro. The only way around this shortcoming is to change how you create the output file, as described in this tip. (This tip works with Microsoft Excel 97, Excel 2000, Excel 2002, Excel 2003, and Excel 2007.)
When creating a CSV file using the menus to export a worksheet, Arkadiusz noted that he can specify that he wants to use a semicolon (;) as a field delimiter. However, if he saves a CSV file using a macro (FileFormat:=xlCSV or xlCSVWindows), then he cannot specify a semicolon as a delimiter.
This works this way by design in VBA. The Excel implementation of the export routines for VBA always use whatever the Windows regional settings are to determine how items in a CSV should be separated. Specifically, the routine looks at the List Separator field for the delimiter. This means that you can, if desired, change the delimiter to a semicolon by changing the List Separator setting in your regional settings configuration.
If you don't want to change the regional settings, then you can instead write your own macro that will output the file in any way you desire. Consider, for a moment, the following macro, which will output the file:
Sub CreateFile()
FName = ActiveWorkbook.Name
If Right(FName, 4) = ".xls" Then
FName = Mid(FName, 1, Len(FName) - 4)
End If
Columns(1).Insert Shift:=xlToRight
For i = 1 To Range("B65000").End(xlUp).Row
TempString = ""
For j = 2 To Range("HA1").End(xlToLeft).Column
If j <> Range("HA1").End(xlToLeft).Column Then
TempString = TempString & _
Cells(i, j).Value & ";"
Else
TempString = TempString & _
Cells(i, j).Value
End If
Next
Cells(i, 1).Value = TempString
Next
Columns(1).Select
Selection.Copy
Workbooks.Add
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:=FName & ".txt", _
FileFormat:=xlPrinter
End Sub
This macro takes a unique approach to creating the output file. What it does is to insert a column at the left of your worksheet, and then concatenates all the data to the right of that column into the newly inserted column A. It adds a semicolon between each field. Once that is done, it grabs the information it put into column A and writes it into a new workbook. This workbook is then saved to disk using the xlPrinter file format, which means that it is put out "as is" without any modification whatsoever.
If you prefer a more direct approach, writing the information directly to a file without making changes to your worksheet, take a look at the macro at this blog post:
http://www.dicks-blog.com/archives/2004/11/09/roll-your-own-csv/
The macro uses commas between each field, but it can be easily modified so that it uses semicolons instead.
Tip #3232 applies to Microsoft Excel versions: 97 2000 2002 2003 2007
More Power! For some people, the prospect of creating macros can be scary. Those who conquer their fears, however, find they become much more confident and productive once they learn how to make Excel do exactly what they want. ExcelTips: The Macros is an invaluable source for learning Excel macros. You are introduced to the topic in bite-sized chunks, pulled from past issues of ExcelTips. Learn at your own pace, exactly the way you want.
Check out ExcelTips: The Macros today!
Thousands of ExcelTips, available for immediate download. Have all the Microsoft Excel info you need, right at your fingertips. (more information...)
Ask an Excel Question
Make a Comment
ExcelTips FAQ
ExcelTips Premium
Beauty Tips
Bugs and Pests Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pet Tips
Word2007 Tips
WordTips
Advertise on the
ExcelTips Site