Colocar decimales a dato numérico para generar archivo plano txt

Para Dante Amor:

Cordial saludo, tengo un archivo que contiene una macro para generar un archivo plano para importar información a otros sistema, el archivo plano se genera a partir de información ingresada en la "Hoja1" con nombre FIBATCH, tengo dificultad con las cifras numéricas, ya que según la estructura del plano, estas deben de contener 2 decimales y un signo + o -, (la estructura está definida en las filas 1 a 10), para solucionar el tema de los decimales he agregado al código "00", que me funciona perfectamente cuando las cifras no tienen decimales, pero cuando estas tienen decimales, me los toma como enteros alterando por lo tanto el valor real de las cifras; lo que necesito es que si la cifra no tiene decimales, me le agregue "00", pero si la cifra tiene decimales, entonces me reemplace el "00", por los 2 decimales que debe contener la cifra.

Espero haberme hecho entender con la exposisión de mi necesidad.

Adjunto imagen de la hoja FIBACTCH y el código que estoy utilizando

Como ejemplo se puede tomar la columna S que en el código corresponde a C18, no pude ingresar el 100% del código

Sub GenerarPlano()
Dim i As Double
Dim ruta As String
ruta = ThisWorkbook.Sheets("Datos").Range("A1")
nombre = "FIBATCH.DAT"
Set p = Sheets("FIBATCH")
    myfile = ruta & nombre
p.Select
'Ancho de campos
Col1 = p.Range("B5")
Col2 = p.Range("C5")
Col3 = p.Range("D5")
Col4 = p.Range("E5")
Col5 = p.Range("F5")
Col6 = p.Range("G5")
Col7 = p.Range("H5")
Col8 = p.Range("I5")
Col9 = p.Range("J5")
Col10 = p.Range("K5")
Col11 = p.Range("L5")
Col12 = p.Range("M5")
Col13 = p.Range("N5")
Col14 = p.Range("O5")
Col15 = p.Range("P5")
Col16 = p.Range("Q5")
Col17 = p.Range("R5")
Col18 = p.Range("S5")
Col19 = p.Range("T5")
'caracter para completar el campo
    cero = "0"
    esp = " "
    s = "+"
uf = p.Range("B" & Rows.Count).End(xlUp).Row
Open myfile For Output As #1
For i = 11 To uf
C1 = String(Col1 - Len(Cells(i, 2)), cero) & Cells(i, 2)
C2 = String(Col2 - Len(Cells(i, 3)), cero) & Cells(i, 3)
C3 = String(Col3 - Len(Cells(i, 4)), cero) & Cells(i, 4)
C4 = Cells(i, 5) & String(Col4 - Len(Cells(i, 5)), esp) 'Texto
C5 = String(Col5 - Len(Cells(i, 6)), cero) & Cells(i, 6)
C6 = String(Col6 - Len(Cells(i, 7)), cero) & Cells(i, 7)
C7 = Cells(i, 8) & String(Col7 - Len(Cells(i, 8)), esp) 'Texto
C8 = String(Col8 - Len(Cells(i, 9)), cero) & Cells(i, 9)
C9 = String(Col9 - Len(Cells(i, 10)), cero) & Cells(i, 10)
C10 = String(Col10 - Len(Cells(i, 11)), cero) & Cells(i, 11) & "00" & s
C11 = String(Col11 - Len(Cells(i, 12)), cero) & Cells(i, 12)
C12 = String(Col12 - Len(Cells(i, 13)), cero) & Cells(i, 13)
C13 = Cells(i, 14) & String(Col13 - Len(Cells(i, 14)), esp) 'Texto
C14 = String(Col14 - Len(Cells(i, 15)), cero) & Cells(i, 15)
C15 = Cells(i, 16) & String(Col15 - Len(Cells(i, 16)), esp) 'Texto
C16 = Cells(i, 17) & String(Col16 - Len(Cells(i, 17)), esp) 'Texto
C17 = String(Col17 - Len(Cells(i, 18)), cero) & Cells(i, 18)
C18 = String(Col18 - Len(Cells(i, 19)), cero) & Cells(i, 19) & "00" & s
C19 = String(Col19 - Len(Cells(i, 20)), cero) & Cells(i, 20) & "000"
'Lllenar el txt
Print #1, C1 & C2 & C3 & C4 & C5 & C6 & C7 & C8 & C9 & C10 & C11 & C12 _
& C13 & C14 & C15 & C16 & C17 & C18 & C19 & C20 & C21 & C22 & C23 & C24 _
& C25 & C26 & C27 & C28 & C29 & C30 & C31 & C32 & C33 & C34 & C35 & C36 _
& C37 & C38 & C39 & C40 & C41 & C42 & C43 & C44 & C45 & C46 & C47 & C48 _
& C49 & C50 & C51
Next i
'Cerrar el archivo
Close
End Sub

1 respuesta

Respuesta
1

No se puede ver tu imagen.

Puedes compartir tu archivo en la nube, puede ser google drive. En el archivo pon algunos ejemplos con decimales y en otra hoja o en el archivo de texto pon el mismo ejemplo con el resultado que quieres.

https://1drv.ms/u/s!AtvmAb1f26KXhXKiGrup_nx-dSNt?e=xdXzYz 

Hola Dante buenos días:

De antemano mil disculpas por no haber respondido antes, por alguna razón que desconozco no me llegaban las notificacines de Todoexpertos y además me ausenté por un tiempo de actividades laborales, pero ya estoy nuevamente laborando y si es posible que me colabore con el tema, le agradezco inmensamente.

El archivo de excel es el que contiene las macros, y adjunto dos archivos TXT, uno con la información como sale actualmente es decir con el erro y otro como debe quedar, los datos errados están en la línea 1 y 7 en el bloque de datos de las columnas 172 a 188.

Nuevamente, mil y mil gracias por su ayuda

Estimado Dante buenos días:

De antemano disculpas por insistir, ¿pero quiero saber si le ha sido posible revisar este tema?

Muchas gracias

Tampoco había respondido, porque no me llegaban las notificaciones.

Cambia esta línea:

C18 = String(Col18 - Len(Cells(i, 19)), cero) & Cells(i, 19) & "00" & s

Por esta línea:

c18 = Format(Int(Cells(i, 19) * 100), String(col18 + 2, "0")) & s

Te explico, para que lo puedas adaptar a las otras líneas.

Parte 1) String(col18 + 2, "0")

Lo que hace es llenar de ceros

col18 --> es igual a 15 enteros

+ 2 --> representa el número de decimales

15 + 2 = 17

String(15 + 2, "0") --> va a llenar en total con 17 ceros

------

Parte 2) Int(Cells(i, 19) * 100)

Cells(i, 19) --> es igual a 245519.23

Cells(i, 19) * 100 --> es igual a 24551923.00

Int(24551923.00) --> es igual a 24551923

------

Parte 3) Format(Int(Cells(i, 19) * 100), String(col18 + 2, "0")) & s

 Format(24551923, "00000000000000000")) & s

------

Resultado:

00000000024551923+


Estoy lanzando mi canal de youtube, te invito a que te Suscribas y actives las alertas, para que te lleguen los avisos de los nuevos vídeos.

https://www.youtube.com/channel/UCs644-v3ti4SF7zE_bt_YXA 

¡Gracias!, excelente como siempre...

Por supuesto que ya me suscribí a su canal, mil y mil gracias por compartir sus conocimientos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas