Busco Macro para guardar excel como txt delimitado por pipes, que pueda determinar cantidad de caracteres por columna
Tengo planilla excel que necesito transformar a TXT delimitado por pipes. Obtuve una, pero necesito que la cantidad de caracteres de algunas de ellas tengan un tamaño determinado. Ejemplo:
Este es formato que debería tener
23/01/2017|E|114215 |D| 2861.00| 100.42| 0| 28.490000| 0.00|23/01/2017|Eg.Caja|413|Patrimonio- DGI DGI| 1|4|
Este es el formato que obtengo
23/01/2017|E|114214|D|2861|100.42|0|28.49|0|23/01/2017|Eg.Caja|413|Patrimonio-DGI|1|4
1 respuesta
Puedes decirme lo siguiente.
- En qué fila empiezan los datos
- En qué columna empiezan los datos
- Las fechas son texto o tienes una fecha en la celda
- La cantidad de caracteres de cada campo, por ejemplo:
"A", "B", "C", etc
10, 1, 27, etc
Envíame tus comentarios en ese orden
¡Gracias! Los datos comienzan en la cela A1, en esa fila no tengo problema con los tamaños, porque es información resumida de lo que sigue a partir de la celda A2. A partir de la la fila 2, necesito que las siguientes columnas tengan la siguiente medida de caracteres: COLUMNA CANTIDAD DE CARACTERES
C 25
E 12
F 12
G 5
H 14
I 12
N 8
Esta es la macro que estoy utilizando:
Sub proceso()
'por luismondelo
ruta = ActiveWorkbook.Path & "\"
Open ruta & "ejemplo.txt" For Output As #1
Range("a1").Select
Do While ActiveCell.Offset(0, 1).Value <> ""
ubica = ActiveCell.Address
Do While ActiveCell.Column < 75
If ActiveCell.Value <> "" Then
lista = lista & "|" & ActiveCell.Value
End If
ActiveCell.Offset(0, 1).Select
Loop
lista = Mid(lista, 2, Len(lista) - 1)
Print #1, lista
lista = ""
Range(ubica).Offset(1, 0).Select
Loop
Close #1
MsgBox "Se ha creado el txt en la ruta: " & ruta
End Sub
Estoy confundido.
Faltaron varias columnas, qué pasa con la información de esas columnas, ¿no van el txt?
¡Gracias! , Las columnas que faltan en el detalle, también van al *.txt, pero como son de fechas, o texto, no me generan problemas en la conversión. Necesitas que le envíe la cantidad de caracteres de c/u de ellas?
Te anexo la macro.
En la macro puedes actualizar el tamaño de campo para cada una de las columnas.
También puedes poner el formato que necesites por campo, por ejemplo, para las columnas 5, 6 y 9 el formato es "0.00", se establece el formato, pero también se ajusta el tamaño del campo que estableciste, por ejemplo, la columna "E" tiene longitud de 12 y formato "0.00", es decir, la macro realizará las 2.
Si no sabes la longitud de un campo, entonces solamente pon un 1, por ejemplo la A y la B les puse un 1.
Sub GuardarTxt() 'Por.Dante Amor FileNum = FreeFile() ruta = ThisWorkbook.Path & "\" arch = "archivo.txt" Open ruta & arch For Output As #FileNum 'columnas A B C D E F G H I J K L M N O cols = Array(0, 1, 1, 25, 1, 12, 12, 5, 14, 12, 1, 1, 1, 1, 8, 1) For i = 2 To Range("A" & Rows.Count).End(xlUp).Row For j = 1 To Columns("O").Column dato = Cells(i, j) Select Case j Case 1, 10 dato = Format(dato, "dd/mm/yyyy") Case 5, 6, 9 dato = Formatear(dato, cols, j, "0.00") Case 8 dato = Formatear(dato, cols, j, "0.000000") Case 7, 14 dato = Formatear(dato, cols, j, "0") End Select largo = cols(j) If largo = 1 Then largo = Len(dato) End If For k = 1 To largo car = Mid(dato, k, 1) If car = "" Then car = " " Print #FileNum, car; Next Print #FileNum, "|"; Next Print #FileNum, Next Close #FileNum ' MsgBox "Txt generado" End Sub
.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
.
Avísame cualquier duda
.
Hola Dante, te envío esta parte como ejemplo para ver si puedo ser mas claro.
RELACION COLUMNAS EXCEL CON CADENA DE TEXTO
A B C D F G
23/01/2017|E|114215 |D| 2861.00| 100.42|
las columnas F y G son valores monetarios en el excel y se transcriben como los ves en la cadena, el de la Columna C es un código de cuenta que genera espacios vacíos hasta completar una cadena de 25 caracteres en total.
Te envié la macro, prueba y me comentas.
.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
.
Avísame cualquier duda
.
Presento mensaje de error al correr la macro. Modifique luego las sentencias que decían "formatear" por "format". Pero me apareció otro mensaje que dice lo siguiente;
Se ha producido el error '55' en tiempo de ejecución:
El archivo ya está abierto.
Formatear es una función que yo creé, no modifiques la macro.
¿Qué dice el primer mensaje que te aparece?
¿Y en qué línea se detiene?
Perdona, me faltó la función formatear, pon todo en un módulo y ejecuta la macro GuardarTxt
Sub GuardarTxt() 'Por.Dante Amor FileNum = FreeFile() ruta = ThisWorkbook.Path & "\" arch = "archivo.txt" Open ruta & arch For Output As #FileNum 'columnas A B C D E F G H I J K L M N O cols = Array(0, 1, 1, 25, 1, 12, 12, 5, 14, 12, 1, 1, 1, 1, 8, 1) For i = 2 To Range("A" & Rows.Count).End(xlUp).Row For j = 1 To Columns("O").Column dato = Cells(i, j) Select Case j Case 1, 10 dato = Format(dato, "dd/mm/yyyy") Case 5, 6, 9 dato = Formatear(dato, cols, j, "0.00") Case 8 dato = Formatear(dato, cols, j, "0.000000") Case 7, 14 dato = Formatear(dato, cols, j, "0") End Select largo = cols(j) If largo = 1 Then largo = Len(dato) End If For k = 1 To largo car = Mid(dato, k, 1) If car = "" Then car = " " Print #FileNum, car; Next Print #FileNum, "|"; Next Print #FileNum, Next Close #FileNum ' MsgBox "Txt generado" End Sub ' Function Formatear(dato, cols, j, formato) dato = Format(dato, formato) l = Len(dato) m = cols(j) d = m - l Formatear = String(d, " ") & dato End Function
.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
.
Avísame cualquier duda
.
- Compartir respuesta