Pasar una cifra en numeros a una en letras

Cerrado
vmcuki - 26 ene 2009 a las 13:00
madis_00 Mensajes enviados 1 Fecha de inscripción jueves, 4 de octubre de 2012 Estatus Miembro Última intervención jueves, 4 de octubre de 2012 - 4 oct 2012 a las 20:40
Hola, en un recibo de sueldos quiero pasar el importe total a pagar de numeros a letras, ej.$ 230.54 PESOS: DOSCIENTOS TREINTA CON 54/100.
Espero vs. respuesta , muchas gracias vmcuki.

9 respuestas

Martin_Alexandroff
5 may 2009 a las 00:04
Convertir Numeros a Letras en Exel (Argentina)
abris un exel, vas a herramientas, macro, macros. Donde dice nombre de la macro, pones n1 y despues hacé click en crear.
Te va a abrir un Visual Basic. Justo donde está el cursor, pegá lo siguiente:

Public Function NL(ByVal Numero As Double) As String
Dim NumTmp As String
Dim c01 As Integer
Dim c02 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim Leyenda1 As String
Dim TFNumero As String
If Numero < 0 Then Numero = Abs(Numero)
NumTmp = Format(Numero, "000000000000000.00")
c01 = 1
pos = 1
TFNumero = ""
Do While c01 <= 5
c02 = 1
Do While c02 <= 3
dig = Val(Mid(NumTmp, pos, 1))
Select Case c02
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
c02 = c02 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)
Select Case c01
Case 1
If cen + dec + uni = 1 Then
Leyenda = "Billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "Billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid _
(NumTmp, 7, 3)) = 0 Then
Leyenda = "Mil Millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "Millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "Millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select
c01 = c01 + 1
TFNumero = TFNumero + letra3 + letra2 + _
letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop
If Val(NumTmp) = 0 Or Val(NumTmp) < 1 Then
Leyenda1 = "Cero Pesos"
ElseIf Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
Leyenda1 = "Pesos "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid _
(NumTmp, 10, 6)) = 0 Then
Leyenda1 = "de Pesos "
Else
Leyenda1 = "Pesos "
End If
TFNumero = "Son Pesos " & TFNumero & "con " & Mid _
(NumTmp, 17) & "/100"
TFNumero = UCase(TFNumero)
NL = TFNumero
End Function
Private Function Centena(ByVal uni As Integer, _
ByVal dec As Integer, ByVal cen As Integer) As String
Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select
Centena = cTexto
cTexto = ""
End Function
Private Function Decena(ByVal uni As Integer, _
ByVal dec As Integer) As String
Select Case dec
Case 1
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
Decena = cTexto
cTexto = ""
End Function
Private Function Unidad(ByVal uni As Integer, _
ByVal dec As Integer) As String
If dec <> 1 Then
Select Case uni
Case 1: cTexto = "uno "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If
Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select
Unidad = cTexto
cTexto = ""

Una vez pegado, guardá el archivo (Archivo, Guardar) y cerrá la ventana del Visual Basic.
Te va a haber quedado abierta la ventana del exel que abriste en un principio, la cual ya contiene la fórmula para que transforme los número en letras.
Para ver como funciona te doy un ejemplo:
En la celda A1, colocá un número (ej:2987,65). Luego en la celda B1 colocá la siguiente fórmula: =nl(a1). En la celda B1 te aparecerá lo ésto: SON PESOS DOS MIL NOVECIENTOS OCHENTA Y SIETE CON 65/100.
La verdad que nunca respondo en los foros, pero con ésto, estube como un mes en google y no encontraba nada. Espero que les sirva
356
Muchisimas gracias!!!! gracias por que lo logre!!! No es complicado pero hay que saber, Chapeaux Caballero!!!
My didactica tu explicacion! Un abrazo vmcuki.
0
hola martin gracias por la ayuda k encontre en el foro me sirve de mucho pero tengo un detalle de komo poner la formula y k no aparesca son pesos... y k aparesca solamente, por ejemplo CINCO MIL CUATROCIENTOS VEINTISEIS PESOS CON 20/100 si mepodrias ayudar te lo agradeceria...

bueno espero tu respuesta
mi correo es robert03263@hotmail.com si me podrias enviar la respuesta a mi email... x fa
y muchas gracias..

bye
0
hola, me sirvio de mucho tu respuesta, esta formula la ocupo para facturacion, ya le hice algunos cambios.
Gracias
0
Muchas gracias!!!, llevaba mucho tiempo pensando que no podia pasar los números a letras porque no se hacer macros, pero con tu ayuda fue muy fácil!!!!

Nuevamente GRACIAS!!!
0
estoy tratando de armar un texto en mis facturas y consegui este que me parece el más idoneo para tal efecto sólo que al parecer está incompleto o lago le falta por que me marca error justo al final de la macro espero que me puedas ayudar
ejemplo: numero 1,861,347.86
Texto: SON: (UN MILLÓN OCHOCIENTOS SESENTA Y UN MIL TRESCIENTOS CUARENTA Y SIETE PESOS CON 86/100 M.N.)
Muchas gracias de antemano
saludos
0
buenas tardes Martin_Alexandroff espero y encuentres esta nota la verdad me sirvio mucho tu comentario pero keria saber si me podrias ayudar para poder kitar lo de SON PESOS y k pesos apareciera despues de poner la cantidad en letra por ejemplo CINCO MIL CUATROCIENTOS VEINTISEIS PESOS 20/100 si me podrias ayudar te lo agradeceria mucho compañero...
bueno....
me despido y esperare tu respuesta...
mi email es robert03263@hotmail.com si me lo podrias enviar gracias....
23
De antemano Gracias a Martín por el aporte.
Respondiendo a la necesida de Tatuapu, le hice unas modificaciones al código, para que me dé el resultado que necesito. ej: $1,302.34 al cambiar a texto arroja lo sig: UN MIL TRESCIENTOS DOS PESOS 34/100 M.N., que es el formato que utilizamos en México. Cabe mencionar que también ajusté la leyenda UNO por UN, ya que me daba lo siguiente: UNO MIL TRESCIENTOS DOS PESOS 34/100 M.N. que no es lo adecuado. bueno acá les dejo el código que utilizo.


Public Function NL(ByVal Numero As Double) As String
Dim NumTmp As String
Dim c01 As Integer
Dim c02 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim Leyenda1 As String
Dim TFNumero As String
If Numero < 0 Then Numero = Abs(Numero)
NumTmp = Format(Numero, "000000000000000.00")
c01 = 1
pos = 1
TFNumero = ""
Do While c01 <= 5
c02 = 1
Do While c02 <= 3
dig = Val(Mid(NumTmp, pos, 1))
Select Case c02
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
c02 = c02 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)
Select Case c01
Case 1
If cen + dec + uni = 1 Then
Leyenda = "Billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "Billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid _
(NumTmp, 7, 3)) = 0 Then
Leyenda = "Mil Millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "Millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "Millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select
c01 = c01 + 1
TFNumero = TFNumero + letra3 + letra2 + _
letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop
If Val(NumTmp) = 0 Or Val(NumTmp) < 1 Then
Leyenda1 = "Cero Pesos"
ElseIf Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
Leyenda1 = "Pesos "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid _
(NumTmp, 10, 6)) = 0 Then
Leyenda1 = "de Pesos "
Else
Leyenda1 = "Pesos "
End If
TFNumero = "" & TFNumero & "pesos " & Mid _
(NumTmp, 17) & "/100 M.N."
TFNumero = UCase(TFNumero)
NL = TFNumero
End Function
Private Function Centena(ByVal uni As Integer, _
ByVal dec As Integer, ByVal cen As Integer) As String
Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select
Centena = cTexto
cTexto = ""
End Function
Private Function Decena(ByVal uni As Integer, _
ByVal dec As Integer) As String
Select Case dec
Case 1
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
Decena = cTexto
cTexto = ""
End Function
Private Function Unidad(ByVal uni As Integer, _
ByVal dec As Integer) As String
If dec <> 1 Then
Select Case uni
Case 1: cTexto = "un "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If
Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select
Unidad = cTexto
cTexto = ""
1
LUCI > Oaxhero
14 ago 2009 a las 01:57
hola!!

me podrias mandar porfavor un correo ya que no se hacer macros y ya me quebre la cabeza y no puedo, espero tu respuesta.

muchas gracias, saludos.....
0
hola,
me ha llamado la atencion tu pregunta. yo tengo un negociete y me hice una hoja de calculo en excel para que me imprimiera mis propios recibos, y que fuera capaz de escribir el importe en letras. Funciona muy bien (llevo 4 años usandolo), pero es un proceso bastante costoso. Si estas interesado, dimelo y me armare de valor para decirte como lo hice, jeje.
hasta luego
20
Migue a mi si me interesa me podrias sacar de la duda
0
QUE BUENO COMPAÑERO QUE TENGA ESA VALIOSA INFORMACION, PERO SE ME HACE QUE USTED ES UN MEDIOCRE, ESTE ES UN FORO PARA AYUDAR Y USTED NO LO HACE VALLA Y VENDALE SU IDEA A MICROSOFT AHI SI LE PAGARAN SU COSTOSO PROGRAMITA

YO LO TENGO NO EN EXCEL SI NO EN UN EJECUTABLE, EL CUAL YO MISMO LO PROGRAME Y ESTOY DISPUESTO A PASARLO A QUIEN ME LO PIDA, SOY LIC. EN INFORMATICA Y ME DEDICO HA PROGRAMAR SOFTWARE EL CUAL SI LO COBRO Y POR ESO NO TEMO A PASAR PEQUEÑOS PROGRAMITAS PARA AYUDAR A LA GENTE

CUIDESE Y OJALA Y SU CONOCIMIENTO LE SIRVA DE MUCHO
0

¿No encontraste la respuesta que buscabas?

Haz una pregunta
Yongtai Mensajes enviados 7 Fecha de inscripción lunes, 26 de enero de 2009 Estatus Miembro Última intervención lunes, 26 de enero de 2009 1
26 ene 2009 a las 16:04
Se me ocurre como hacerlo en un lenguaje de programación, pero no en algo tan básico como el excel...
14
b t moma pues te respondo a tu pregunta la verdad no se muy bien en donde guardar la formula para k te aparesca la cantidad en letras a komo yo tengo entendido esa formula la vas a poner cada bes k utilices una hoja de excel ando checando si puedo guardarlo en otra opcion para k cada ves k lo abra este en un libro nuevo si llego a dar con tu pregunta te mandare la respuesta completa saleee no mas k dame chance yo te aviso
bueno kuidat....
14
Mil gracias por esa super ayuda es algo necesario realmente me sirvio. solo tengo una duda en donde guardo el doc de las funciones para que automaticamente aparezca en un nuevo doc. agradeceria tu inf. gracias..

moma
10
Hola, a todos, gracias Martin por tu gran aportacion, me ha ayudado mucho, saludos Cordiales desde el Salvador
pd : para cambiar a otra moneda solo busca la linea en donde aparecen "son pesos" y solo les ponen la moneda de su pais y ya esta lista. aca esta ya corregido deacuerdo a mi pais como lo utilizo, nuevamente Martin Gracias.

c01 = c01 + 1
TFNumero = TFNumero + letra3 + letra2 + _
letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop
If Val(NumTmp) = 0 Or Val(NumTmp) < 1 Then
Leyenda1 = "Cero Pesos"
ElseIf Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
Leyenda1 = "Dolares "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid _
(NumTmp, 10, 6)) = 0 Then
Leyenda1 = "Dolares"
Else
Leyenda1 = "Dolares "
End If
TFNumero = TFNumero & Mid _
(NumTmp, 17) & "/100" & " Dolares "
TFNumero = UCase(TFNumero)
NL = TFNumero
10
Gracias
Con tu ayuda me ahorraste muchas horas de trabajo.
Saludos desde Chihuahua Chihuahua, Mexico.
9