Convertir fichero de texto a xls

Hola de nuevo Elsa, mira tengo un fichero de texto donde cada registro ocupa dos líneas con salto de línea incluido, si abro directamente con excel no sirve pues los datos no caen en columnas, luego necesito hacer una rutina vba donde le vaya diciendo a excel que coja del fichero de txt del carácter 1 al 5 celda a1, del a al 10 celda a2 así repetirlo para cada dos líneas que ocupa cada registro, ¿me entendiste?
Un saludo y gracias.

1 Respuesta

Respuesta
1
Aclarame lo siguiente: si importas el archivo a Excel, ¿te cae cada línea en una fila distinta?. ¿Lo qué necesitas es que cada 2 filas sea considerado un solo registro para ubicarlo en varias columnas?
Si no es así explicame un poquito más.
Exacto, el fichero tiene líneas que o bien empiezan por el código 22 o bien por el 23, ambas son de la misma longitud, las que empiezan por 22 son las que tienen los datos esenciales pero algunas veces debajo llevan otra línea de información adicional que empieza por 23, la cual lleva una estructura diferente y por eso rompe el poder hacer columnas.
En primer lugar vamos a importar el libro. Supongo que en la Hoja1 y a partir de la fila1.
Entonces copia la macro en la hoja1. (Alt+F11 para llamar al Editor, doble clic en Hoja1 y pegar la rutina adjunta).
La macro compara los 2 primeros caracteres de la fila. Si es 23 colocará los textos en la fila anterior. Como al finalizar te quedarán filas en blanco, la segunda parte de la macro evalúa la col B y cuando encuentra una fila vacía la elimina.
Si deseas mantener la información de la col A quitá esas líneas.
Sub pasandotexto()
Dim texto As String
Dim txtcorto As String
Dim largotot As Integer
Dim ini As Integer, col As Integer, fila As Integer
ini = 1
col = 1
Range("A1").Select
While ActiveCell <> ""
texto = ActiveCell.Value
largotot = Len(texto)
If Mid(texto, 1, 2) = "22" Then
col = 1
fila = 0
Else
fila = -1
End If
While ini <= largotot
txtcorto = Mid(texto, ini, 5)
ActiveCell.Offset(fila, col).Value = txtcorto
col = col + 1
ini = ini + 5
Wend
ini = 1
ActiveCell.Offset(1, 0).Select
Wend
?aquí comienza la rutina que elimina filas
fila = ActiveCell.Row
Range("B1").Select
While ActiveCell.Row < fila
If ActiveCell.Value = "" Then
ActiveCell.EntireRow.Delete
fila = fila - 1
Else
ActiveCell.Offset(1, 0).Select
End If
Wend
? Aquí finaliza la 2da. Parte
End Sub
Espero que esto sea lo que necesites. Cualquier duda me lo haces saber.
Funciona estupendamente, pero si no te importa y abusando de tu generosidad, vamos a perfeccionarla, la longitud de cada línea es de ochenta caracteres, y lo mejor es fusionar las líneas que empiezan en 22 con la/s de abajo que empiecen en 23(digo las porque encuentro ficheros que llevan más de una seguidas)en la misma celda y eliminar la división que me haces en grupos de cinco caracteres. Así quedaría una sola celda que tendría los ochenta caracteres de la línea que empieza por 22 más los ochenta de la/s que empiecen por 23 de debajo, y luego ya puedo aplicar la opción Datos-Texto en columnas. Gracias por todo.
Esto es otra cosa. Me pedías que separe de a 5 caracteres, por eso tenía que calcular el largo de cada fila.
La nueva macro, toma cada fila completa (no importa el largo) y la suma a la anterior si comienza por 23. Solo queda por ajustar si al unirse una fila con otra debe quedar un espacio. De ser así modificá la línea donde dice Texto1=Texto1+ActiveCell. value por esta otra:
texto1 = texto1 + " " + ActiveCell.Value
Espero tus comentarios o la finalización de la consulta.
Chau
Sub UniendoTexto()
Dim texto As String
Dim texto1 As String
Dim ini As Integer, fila As Integer
ini = 1
fila = 1
Range("A1").Select
While ActiveCell <> ""
texto = ActiveCell.Value
If Mid(texto, 1, 2) = "22" Then
If ini = 1 Then
ini = ini + 1
Else
Cells(fila, 2).Value = texto1
fila = fila + 1
End If
texto1 = ActiveCell.Value
Else
texto1 = texto1 + ActiveCell.Value
ini = ini + 1
End If
ActiveCell.Offset(1, 0).Select
Wend
Cells(fila, 2).Value = texto1
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas