.
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.
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 seleccionarlas, buscar en listbox mientras escribes en textbox, ordenar hojas libro excel por su nombre, conectar 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
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
.
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