Al usar las herramientas disponibles en la cinta para exportar una hoja de trabajo, como un archivo CSV, Arkadiusz señaló que puede especificar que quiere usar un punto y coma (;) como delimitador de campo. Sin embargo, si guarda un archivo CSV usando una macro (FileFormat: = xlCSV o xlCSVWindows), entonces no puede especificar un punto y coma como delimitador.

Esto funciona de esta manera por diseño en VBA. La implementación de Excel de las rutinas de exportación para VBA siempre usa la configuración regional de Windows para determinar cómo se deben separar los elementos en un CSV.

Específicamente, la rutina busca el delimitador en el campo Separador de listas. Esto significa que puede, si lo desea, cambiar el delimitador a un punto y coma cambiando la configuración del Separador de listas en su configuración regional.

Si no desea cambiar la configuración regional, puede escribir su propia macro que generará el archivo de la forma que desee.

Considere, por un momento, la siguiente macro, que generará el archivo:

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

Esta macro abre un archivo de texto que tiene el mismo nombre que su libro. Luego recorre cada fila y comienza a juntar una cadena del contenido de la celda. (Esto se coloca en la variable sTemp). Cada celda tiene un punto y coma entre ellas, como lo define la variable sSep. Los valores concatenados de cada fila se almacenan en el archivo de texto y, cuando termina, el archivo de texto se cierra. La rutina es muy rápida y, cuando termina, muestra un mensaje que indica cuántas filas se exportaron al archivo.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (9243) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Specifying_a_Delimiter_when_Saving_a_CSV_File_in_a_Macro [Especificando un delimitador al guardar un archivo CSV en una macro].