como se puede transformar un monto de numeros en letras

15/06/2005 - 18:06 por Vasko | Informe spam
quiero escribir en forma automatica un monto , el cual resulta de una suma.
Por favor si alguien tiene una idea le agradecere que me informe.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/06/2005 - 23:50 | Informe spam
hola, Vasko !

... escribir en forma automatica un monto [...]



parece que [eventualmente] 'asoma un cansancio' de responder a tan 'socorrida' consulta :))
podrias 'echarle un ojo' a las siguientes direcciones [funciones para 'convertir' numeros a texto]:
la 'mas famosa' es la de 'el Guille':
http://www.elguille.info/vb/utilida...m2Text.htm el archivo se descarga en:
http://downloads.elguille.info/Baja...m2Text.zip
una mas de las 'famosas' la encuentras en...
http://www.sistemaslym.net/vba/exce...etras.html el archivo se descarga en:
http://www.sistemaslym.net/vba/arch...letras.zip
o puedes probar con el algoritmo que expongo al final, publicado por Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria] es de los mas 'sencillos' y faciles de 'adaptar' que me ha tocado conocer por estos 'lares'
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en las primeras 12 lineas.
ya 'incluye' un argumento 'opcional' para la 'salida' del texto en mayusculas/minusculas/... :))
->solo monedas del 'genero' masculino<-... 'trabajar' con el genero femenino 'requiere quemar' [unas cuantas] mas neuronas :))
existen otros diversos algoritmos [desde 'sencillos' hasta 'complejos'] para otras tambien diversas 'necesidades'...
=>copialo en un modulo 'normal' y 'llama' a la funcion como a cualquier otra funcion de hoja de calculo<=>TEN CUIDADO con los 'saltos de linea' si copias/pegas el codigo desde la ventana del mensaje<
saludos,
hector.
en un modulo de codigo 'normal' ==Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String ' Función Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda
Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
If Cents = 1 Then Fracs = " centavo" Else Fracs = " centavos"
If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) & Fracs
EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fracs
If Valor < 0 Then EnLetras = "menos " & EnLetras
If Tipo = 2 Then EnLetras = UCase(EnLetras) ' TODO EN MAYUSCULAS '
If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) ' Todo Como Nombre Propio '
If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2) ' Primer letra en mayuscula SOLAMENTE '
EnLetras = "(" & EnLetras & ")"
End Function
Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo' de la función 'principal'] '
Select Case Int(Valor)
Case 0: Letras = "cero"
Case 1: Letras = "un"
Case 2: Letras = "dos"
Case 3: Letras = "tres"
Case 4: Letras = "cuatro"
Case 5: Letras = "cinco"
Case 6: Letras = "seis"
Case 7: Letras = "siete"
Case 8: Letras = "ocho"
Case 9: Letras = "nueve"
Case 10: Letras = "diez"
Case 11: Letras = "once"
Case 12: Letras = "doce"
Case 13: Letras = "trece"
Case 14: Letras = "catorce"
Case 15: Letras = "quince"
Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
Case 20: Letras = "veinte"
Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
Case 30: Letras = "treinta"
Case 40: Letras = "cuarenta"
Case 50: Letras = "cincuenta"
Case 60: Letras = "sesenta"
Case 70: Letras = "setenta"
Case 80: Letras = "ochenta"
Case 90: Letras = "noventa"
Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10)
Case 100: Letras = "cien"
Case Is < 200: Letras = "ciento " & Letras(Valor - 100)
Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) & "cientos"
Case 500: Letras = "quinientos"
Case 700: Letras = "setecientos"
Case 900: Letras = "novecientos"
Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100)
Case 1000: Letras = "mil"
Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000)
Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil"
If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000)
Case 1000000: Letras = "un millón "
Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod 1000000)
Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) & " millones "
If (Valor - Int(Valor / 1000000) * 1000000) _
Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000)
Case 1000000000000#: Letras = "un billón "
Case Is < 2000000000000#
Letras = "un billón " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & " billones "
If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _
Then Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
End Select
End Function
Respuesta Responder a este mensaje
#2 Arcelia Sanchez
07/02/2006 - 06:19 | Informe spam
"Héctor Miguel" escribió:

hola, ric !

> ... no entendi nada me podias ayudar soy nuevo en la computacion

[una vez que estes en excel]
-> abre el editor de visual basic
a) [menu] herramientas / macro -> editor de visual basic
b) atajo de teclado: {alt}+{f11}
-> ve a [menu] insertar / modulo
-> [en la ventana de codigo del modulo 'recien' creado]...
copia / pega las lineas de la propuesta ->por cada funcion personalizada'<-
[desde donde dice 'Function' o... 'Private Function...' hasta donde dice 'End Function']
-> 'regresa' a excel...
a) {alt}+Q
b) {alt}+{f4}
c) {alt}+{tab}
-> [ya de regreso en excel] utiliza 'la funcion' [que haya sido de tu preferencia]...
-> de forma 'identica' a como utilizas las funciones integradas del excel [p.e.]
suponiendo que te hubieras 'decidido' por la propuesta que te hice...
si en 'A1' tienes el resultado numerico que se va a 'traducir'... usa:
=EnLetras(a1) [si omites el segundo argumento que es el 'tipo' de salida... se quedan en minusculas]
=EnLetras(a1,2) [al usar el segundo argumento OPCIONAL... el texto de salida sera convertido segun la opcion]

si cualquier duda... comentas?
saludos,
hector



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida