Pasar de numero a letras en excel

Hola amigos tengo la siguiente macro que convierte de numero a letras pero tengo un inconveniente y es que no me escribe los "centavos" y me los muestra de la siguiente manera:
255.12 = "doscientos cincuenta y cinco con 12/100"
la forma que necesito que lo muestre es asi:
255.12 = "doscientos cincuenta y cinco con doce centavos"
Ademas necesito que antes del 1000 me coloque la palabra "un" . Por ejemplo
1100 = "un mil cien"
El codigo del que les hablo es el siguiente:
Function Letras(x)
Nu = Array("cero", "uno", "dos", "tres", "cuatro", "cinco", _
"seis", "siete", "ocho", "nueve", "diez", "once", "doce", _
"trece", "catorce", "quince", "dieciseis", "diecisiete", _
"dieciocho", "diecinueve", "veinte", "veintiuno", "veintidos", _
"veintitres", "veinticuatro", "veinticinco", "veintiseis", _
"veintisiete", "veintiocho", "veintinueve")
Nd = Array("", "", "", "treinta", "cuarenta", "cincuenta", _
"sesenta", "setenta", "ochenta", "noventa")
Nc = Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", _
"quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
u = x Mod 10
d = Int(x / 10) Mod 10
c = Int(x / 100)
If d > 2 Then
Letras = Nd(d) + " y " + Nu(u)
Else
u = d * 10 + u
Letras = Nu(u)
End If
If u = 0 Then Letras = Nd(d)
If c > 0 Then Letras = Nc(c) + " " + Letras
If x = 100 Then Letras = "cien"
End Function
Function Enletras(x)
centavos = Int(x * 100) Mod 100
x = Int(x)
grupo1 = x Mod 1000
grupo2 = Int(x / 1000) Mod 1000
grupo3 = Int(x / 1000000)
n = Letras(grupo3)
If Right(n, 3) = "uno" Then
Enletras = Left(n, Len(n) - 1) + " millones "
Else
If grupo3 > 0 Then Enletras = n + " millones "
End If
If grupo3 = 1 Then Enletras = "un millón "
n = Letras(grupo2)
If Right(n, 3) = "uno" Then
Enletras = Enletras + Left(n, Len(n) - 1) + " mil "
Else
If grupo2 > 0 Then Enletras = Enletras + n + " mil "
End If
If grupo1 > 0 Then Enletras = Enletras + Letras(grupo1)
If centavos > 0 Then Enletras = Enletras + " con " + Str(centavos) + "/00"
End Function
Ojala me puedan dar una mano.
Saludos!

1 Respuesta

Respuesta
1
Te dejo el ajuste en negrita para reemplazar la última línea de la 2da rutina:
If grupo1 > 0 Then Enletras = Enletras + Letras(grupo1)
If centavos = 1 Then
Enletras = Enletras + " con " + "un centavo"
ElseIf centavos > 0 Then
Enletras = Enletras + " con " + Letras(centavos) & " centavos"
End If
End Function
Sdos
Elsa
PD) Hay novedades en mi sitio... te invito a visitarlo !
Hola amigos tengo la siguiente macro que convierte de numero a letras pero tengo un inconveniente y es que no me escribe los "centavos" y me los muestra de la siguiente manera:
255.12 = "doscientos cincuenta y cinco con 12/100"
la forma que necesito que lo muestre es asi:
255.12 = "doscientos cincuenta y cinco con doce centavos"
Ademas necesito que antes del 1000 me coloque la palabra "un" . Por ejemplo
1100 = "un mil cien"
El codigo del que les hablo es el siguiente:
Function Letras(x)
Nu = Array("cero", "uno", "dos", "tres", "cuatro", "cinco", _
"seis", "siete", "ocho", "nueve", "diez", "once", "doce", _
"trece", "catorce", "quince", "dieciseis", "diecisiete", _
"dieciocho", "diecinueve", "veinte", "veintiuno", "veintidos", _
"veintitres", "veinticuatro", "veinticinco", "veintiseis", _
"veintisiete", "veintiocho", "veintinueve")
Nd = Array("", "", "", "treinta", "cuarenta", "cincuenta", _
"sesenta", "setenta", "ochenta", "noventa")
Nc = Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", _
"quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
u = x Mod 10
d = Int(x / 10) Mod 10
c = Int(x / 100)
If d > 2 Then
Letras = Nd(d) + " y " + Nu(u)
Else
u = d * 10 + u
Letras = Nu(u)
End If
If u = 0 Then Letras = Nd(d)
If c > 0 Then Letras = Nc(c) + " " + Letras
If x = 100 Then Letras = "cien"
End Function
Function Enletras(x)
centavos = Int(x * 100) Mod 100
x = Int(x)
grupo1 = x Mod 1000
grupo2 = Int(x / 1000) Mod 1000
grupo3 = Int(x / 1000000)
n = Letras(grupo3)
If Right(n, 3) = "uno" Then
Enletras = Left(n, Len(n) - 1) + " millones "
Else
If grupo3 > 0 Then Enletras = n + " millones "
End If
If grupo3 = 1 Then Enletras = "un millón "
n = Letras(grupo2)
If Right(n, 3) = "uno" Then
Enletras = Enletras + Left(n, Len(n) - 1) + " mil "
Else
If grupo2 > 0 Then Enletras = Enletras + n + " mil "
End If
If grupo1 > 0 Then Enletras = Enletras + Letras(grupo1)
If centavos > 0 Then Enletras = Enletras + " con " + Str(centavos) + "/00"
End Function
Ojala me puedan dar una mano.
Saludos!
Muchas gracias! Lo probé y funciona.
Solo un detalle que me encontré.
Al colocar por ejemplo 500.21 = quinientos con veintiuno centavos
Me sigue colocando el "uno" cuando debería decir "un" centavos
Lo probé poniendo con 01 centavos y ese si lo realiza bien. En fin quise probar agregando yo un comando (guiándome por lo que me respondiste pero no lo pude lograr correctamente)
En fin disculpa la molestia y desde ya que agradezco tu ayuda!
Hola, logre completar los comandos que faltaban, lo hice de esta manera
If grupo1 > 0 Then Enletras = Enletras + Letras(grupo1)
If centavos = 1 Then
Enletras = Enletras + " con " + "un centavo"
ElseIf centavos = 21 Then
Enletras = Enletras + " con " + "veintiun centavos"
ElseIf centavos = 31 Then
Enletras = Enletras + " con " + "treinta y un centavos"
ElseIf centavos = 41 Then
Enletras = Enletras + " con " + "cuarenta y un centavos"
ElseIf centavos = 51 Then
Enletras = Enletras + " con " + "cincuenta y un centavos"
ElseIf centavos = 61 Then
Enletras = Enletras + " con " + "sesenta y un centavos"
ElseIf centavos = 71 Then
Enletras = Enletras + " con " + "setenta y un centavos"
ElseIf centavos = 81 Then
Enletras = Enletras + " con " + "ochenta y un centavos"
ElseIf centavos = 91 Then
Enletras = Enletras + " con " + "noventa y un centavos"
ElseIf centavos > 0 Then
Enletras = Enletras + " con " + Letras(centavos) & " centavos"
End If
End Function
Por lo que me quedo resuelto!
Muchas gracias por ayudarme con esto, saludos y excelente tu ayuda!
Aquí va ajustada:
If centavos = 1 Then
Enletras = Enletras + " con " + "un centavo"
ElseIf centavos > 0 Then
If Right(centavos, 1) = 1 Then
texto = Left(Letras(centavos), Len(Letras(centavos)) - 1)
Else
texto = Letras(centavos)
End If
Enletras = Enletras + " con " + texto & " centavos"
End If
End Function
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas