Hace unos días escribí un post sobre cómo importar archivos txt delimitados por caracteres, y quedaba pendiente para otro post (este), importar archivos txt pero de ancho fijo.

Pues bien, siguiendo con el ejemplo anterior, ahora lo que tenemos es una archivo de texto de ancho fijo, previamente definido especificando el ancho de cada campo de texto. Vemos el archivo:

IMPORTAR TXT DE ANCHO FIJOA simple vista ya podemos ver las diferencias con el archivo de la entrada anterior, efectivamente los datos están alineados y con una distancia específica entre cada cadena de texto. Para tratar e importar el archivo a Excel, vamos a usar la misma macro que el ejemplo anterior, pero con algunas modificaciones importantes:

Sub Import_TXT_Anchofijo()
'Definimos variables a utilizar
Dim Filtro As String
Dim nFichero As Integer
Dim sCadena As Variant
Dim i As Double
nFichero = FreeFile
'indicamos que tipo de archivo que vamos a seleccionar (txt)
Filtro = " TXT(*.TXT),"
'buscamos el archivo
txt = Application.GetOpenFilename(Filtro)
'si existe fichero comenzamos la instrucción, de lo contrario el proceso no se 'inicia
If txt <> Empty Then
'mediante un bucle do while recorremos todas las líneas de información del txt
Open txt For Input As nFichero
i = 0
Do While Not EOF(nFichero)
Line Input #nFichero, datos
i = i + 1
sCadena = datos
'definimos la longitud del ancho de cada información e indicamos en que columna se 'debe insertar
'la fila ya viene determinada con la longitud del fichero txt (i) que hemos 'definido al principio
'con la función Mid indicamos los campos a extraer y la con la función Trim 'eliminamos espacios en blanco
'que se nos puedan haber olvidado por error.
With Sheets(1)
.Cells(i, 1) = Trim(Mid(sCadena, 1, 3))
.Cells(i, 2) = Trim(Mid(sCadena, 4, 29))
.Cells(i, 3) = Trim(Mid(sCadena, 33, 20))
.Cells(i, 4) = Trim(Mid(sCadena, 53, 10))
.Cells(i, 5) = Trim(Mid(sCadena, 63, 8))
.Cells(i, 6) = Trim(Mid(sCadena, 71, 16))
.Cells(i, 7) = Trim(Mid(sCadena, 87, 21))
End With
Loop
'por último cerramos el proceso.
Close nFichero
End If
End Sub

Como podéis observar, una vez que seleccionamos el archivo txt, y aislamos la cadena de texto (sCadena) ya podemos extraer cada una de las palabras o caracteres con la función Mid. Por ejemplo, el primer campo tiene 3 espacios de ancho, por ello extraemos desde el punto 1 hasta el tercer carácter: Mid(sCadena, 1, 3)

Para reforzar la función, aplicaremos Trim que es otra función (espacios o recortar) que elimina los espacios en blanco al principio y final del texto, solucionando así si por error introducimos un espacio vacío.

Normalmente cuando tratamos archivos de ancho fijo, tenemos las especificaciones para realizar la importación, en caso de no tenerlas es necesario verificar con suma atención los anchos. En el INE, por ejemplo, todos los archivos que os descarguéis de ancho fijo vienen con un archivo Excel con las especificaciones definidas.

Y ahora ya tenemos toda la información necesaria para importar cualquier tipo de archivo txt, espero que os haya resultado de interés:

Descarga el archivo de ejemplo pulsando en: IMPORTAR TXT DE ANCHO FIJO

Descarga el archivo TXT de ejemplo pulsando en: ARCHIVO TXT ANCHO FIJO

Comparte este post