Especificación de un delimitador al guardar un archivo CSV en una macro (Microsoft Excel)
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]
.