Hace unas semanas publiqué una entrada sobre cómo importar archivos .txt desde Excel, lo hice pensando en que un tiempo después publicaría algo relacionado con exportar archivos .txt desde Excel.
Pues bien, hoy trataremos precisamente de cómo escribir en un archivo .txt la información contenida de una hoja Excel, o lo que es lo mismo cómo exportar nuestros datos a un archivo .txt.
Como el archivo .txt que podemos generar puede ser o bien delimitado por caracteres o bien de ancho fijo, voy a crear una entrada para cada uno de los casos, dado que el ancho fijo requiere un poco más de programación.
En el ejemplo de hoy nos quedaremos con la generación de un .txt delimitado por caracteres.
Los datos que vamos a pasar al .txt son los que había utilizado para una entrada anterior con la información de matriculaciones de vehículos por comunidades autónomas, los datos están en la hoja1:
Para realizar este proceso, lo primero que tenemos que hacer es crear un archivo .txt, esto es muy sencillo, lo podemos crear directamente con la macro (con el método Open) o de forma manual como un archivo nuevo con el bloc de notas. Para este ejemplo, el archivo lo creará la propia macro, y lo podemos hacer de 2 formas:
Especificando el directorio y se creará ahí de forma automática:
Archivo_txt = "E:\EJEMPLO.txt"
o creándose automáticamente en el mismo lugar donde tengamos este archivo Excel:
Archivo_txt = ThisWorkbook.Path & "\" & "EJEMPLO.txt"
Esta es la macro:
Sub EXPORTAR_TXT_CARACTERES()
Dim i As Double
'Creamos automáticamente un .txt en blanco que llamamos EJEMPLO
'el archivo se creará en la misma unidad que tenemos el Excel.
Archivo_txt = ThisWorkbook.Path & "\" & "EJEMPLO.txt"
'si queremos cambiar su ubicación basta con poner Archivo_txt = "E:\EJEMPLO.txt"
Open Archivo_txt For Output As #1
With Sheets(1)
fin = Application.CountA(Range("A:A"))
'realizamos bucle para pasar los datos al txt
For i = 1 To fin
'ejemplo de txt delimitado por caracteres (en este caso punto y coma)
Print #1, .Cells(i, 1) & ";" & .Cells(i, 2) & ";" & .Cells(i, 3) & ";" & .Cells(i, 4)
Next i
Close
End With
End Sub
Como podéis ver mediante un bucle for/next vamos asignando cada elemento de la hoja a la variable definida i y luego lo pasamos al print para llenar nuestro .txt. El carácter que he utilizado como delimitador es el punto y coma «;» y este es el resultado después de exportar los datos:
Es importante tener en cuenta que los datos que tenemos en Excel no siempre son texto o número, pueden ser formatos de hora o fecha, etc, para mantener dicho formato, tendríamos que aplicar un “format” a cada campo. Por ejemplo: si los datos de la primera columna fuesen fechas sería así:
Format(.Cells(i, 1), "dd/mm/yyyy")
Podemos incluir los encabezados, para este caso no existe problema dado que delimitamos con un carácter, sin embargo cuando hablamos de ancho fijo, debemos omitirlos.
Pues esto ha sido todo por hoy, ya tenemos una herramienta que nos ayuda a exportar nuestros datos (delimitados por caracteres) a un txt. En los próximos días publicaré sobre archivos .txt de ancho fijo. 🙂
Descarga el archivo de ejemplo pulsando en: EXPORTAR ARCHIVOS TXT DELIMITADOS POR CARACTERES
Exceletne explicación!!
Una pregunta, siempre que ejecuto la macro, se agrega una ultima fila adicional en blanco. ¿Existe alguna manera que no me genere esa fila adicional en blanco?
Puedes utilizar la función len para eliminar espacios:
Print #1, Len(.Cells(i, 1) & «;» & .Cells(i, 2) & «;» & .Cells(i, 3) & «;» & .Cells(i, 4))
Saludos.
como puedo seleccionar un rango de filas y columnas y que me exporte los datos a txt
Se tendría que programar de nuevo, si tengo tiempo lo haré. Saludos