Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como leer archivo TXT delimitado por ancho fijo de caracteres


.

Se publicaron varios poste relacionados con macros que leen TXT, entre ellos macro que lee TXT, macro que lee TXT delimitado por coma o punto y coma, macro que lee TXT delimitado por tabulaciones, ahora presento una macro que lee archivos TXT delimitado por un ancho fijo de caracteres.

Antes de continuar con el desarrollo del presente post, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
A diferencia con los otros ejemplos de macros que permitían leer archivos TXT, en este caso el archivo TXT está separado o delimitado por un ancho fijo de caracteres; muchos aplicativos cuando exportan los datos a archivos de texto otorgan un ancho fijo de caracteres para separar datos, es decir normalmente cuando se exportan fechas se les da un ancho de 10 caracteres es decir: 2 caracteres para el día, uno para la /, dos más para el mes, uno más para la / y cuatro más para el año (12/07/2020); en base a los datos que contenga la base de datos se otorga un ancho fijo a cada tipo de datos cuando se exporta.

Esta macro tiene en cuenta el ancho de cada uno de los datos cargados en cada una de las líneas del archivo TXT que se encuentra en el archivo comprimido, que se descarga conjuntamente con el fichero con la macro, recorriendo con un bucle hasta llegar al final del archivo, escribiendo en cada una de las celdas los datos correspondientes.

En el ejemplo se extraen los datos de 10 columnas, es decir se agregan en las columnas A a J los datos del archivo txt, cada línea del archivo se agregarán en las distintas filas de la hoja de Excel, recomiendo descargar el archivo y ver el vídeo para comprender más fácilmente el ejemplo de macro que permite leer archivos TXT delimitado por ancho fijo de caracteres.

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

 

Código que se inserta en un módulo
Sub opentxtseparadoanchofijo()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Dim myfile As Variant, cad As String, tx As Variant
Dim fil As Long
ruta = ActiveWorkbook.Path
ChDir ruta
Set a = Sheets(ActiveSheet.Name)
myfile = Application.GetOpenFilename(«Archivos Txt (*.txt*), *.txt*»)
If VarType(myfile) = vbBoolean Then Exit Sub
Open myfile For Input As #1
Cells.Clear
fil = 2
While Not EOF(1)
Line Input #1, cad
tx = cad
With Sheets(«Hoja1»)
.Cells(fil, 1) = Trim(Mid(tx, 1, 11))
.Cells(fil, 2) = Trim(Mid(tx, 12, 3))
.Cells(fil, 3) = Trim(Mid(tx, 15, 19))
.Cells(fil, 4) = Trim(Mid(tx, 34, 19))
.Cells(fil, 5) = Trim(Mid(tx, 53, 8))
.Cells(fil, 6) = Trim(Mid(tx, 61, 8))
.Cells(fil, 7) = Trim(Mid(tx, 69, 12))
.Cells(fil, 8) = Trim(Mid(tx, 81, 12))
.Cells(fil, 9) = Trim(Mid(tx, 93, 12))
.Cells(fil, 10) = Trim(Mid(tx, 105, 12))
End With
fil = fil + 1
Wend
Close #1
a.Range(«A1») = «DATO A»
a.Range(«B1») = «DATO B»
a.Range(«C1») = «DATO C»
a.Range(«D1») = «DATO D»
a.Range(«E1») = «DATO E»
a.Range(«F1») = «DATO F»
a.Range(«G1») = «DATO G»
a.Range(«H1») = «DATO H»
a.Range(«I1») = «DATO I»
a.Range(«J1») = «DATO J»

MsgBox («Se importaron los datos con éxito»), vbInformation, «AVISO»
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Sub borrar()
Cells.Clear
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends