Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Convertir cifra numérica en letras

761 views
Skip to first unread message

AnaMar

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to
Por favor,
¿alguien conoce algún módulo para convertir una cifra numérica en letras?
Es decir, estoy desarrollando unos recibos en Access y necesito escribir el
importe en letras.

Gracias
Ana


fernando

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to
Eso que solicitas no es convertir una cifra numérica en letras, para eso Access
tiene una función (Cstr()).

Lo que tu necesitas es un trozo de código para "traducir un número" en su
correspondiente texto según la moneda legal en curso, "recuerda que dentro de
poco está el euro" y todo cambia.

Y para esto no he tenido la necesidad y la verdad no me he parado a ver como
tratarlo. Si tengo un rato lo probaré.

Saludos y suerte.

-----Mensaje original-----

Gracias
Ana

.


Gabriel Ortiz

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to
Prueba este código: Alguien lo puso en este grupo hace un tiempo y funciona
al menos en Access 97

Option Compare Database
Option Explicit

Dim EngNum(90) As String
Dim StringNum As String, Chunk As String, English As String
Dim Hundreds As Integer, Tens As Integer, Ones As Integer
Dim LoopCount As Integer, StartVal As Integer
Dim TensDone As Integer
Dim msg, ErrorTrapping As String
Dim Pennies As String

'---------------------------------------------------------------------------
-

'No la he probado con número negativos, porque la utilizo para cheques y
'ajustes pero debe funcionar
Static Function NumWordEsp(ByVal AmountPassed As Currency) As String
'** Convertir Cantidad Numérica en letras
'** Ejemplo: NumWordEsp(120.45) Devuelve Ciento Veinte con 45/100
'** Maneja Cantidades desde 0 hasta $999,999,999.99
'** El siguiente arreglo y demas variables estan dimensionadas
'** y declaradas mas arriba If ErrorTrapping Then
On Error GoTo NumWord_Err

Dim msg As String
'** Llenar el arreglo engnum, si no está lleno
If Not EngNum(1) = "Un" Then
EngNum(0) = ""
EngNum(1) = "Un"
EngNum(2) = "Dos"
EngNum(3) = "Tres"
EngNum(4) = "Cuatro"
EngNum(5) = "Cinco"
EngNum(6) = "Seis"
EngNum(7) = "Siete"
EngNum(8) = "Ocho"
EngNum(9) = "Nueve"
EngNum(10) = "Diez"
EngNum(11) = "Once"
EngNum(12) = "Doce"
EngNum(13) = "Trece"
EngNum(14) = "Catorce"
EngNum(15) = "Quince"
EngNum(16) = "Dieciseis"
EngNum(17) = "Diecisiete"
EngNum(18) = "Dieciocho"
EngNum(19) = "Diecinueve"
EngNum(20) = "Veinte"
EngNum(30) = "Treinta"
EngNum(40) = " Cuarenta"
EngNum(50) = " Cincuenta"
EngNum(60) = "Sesenta"
EngNum(70) = "Setenta"
EngNum(80) = "Ochenta"
EngNum(90) = "Noventa"
End If


StringNum = Format$(AmountPassed, "000000000.00")

'** Inicializando otras variables
English = ""
LoopCount = 1
StartVal = 1
Pennies = Mid$(StringNum, 11, 2)

'** Solo en caso de que sea menos que uno
If AmountPassed < 1 Then
English = "Cero"
End If

For LoopCount = 1 To 3
Chunk = Mid$(StringNum, StartVal, 3)
Hundreds = vAL(Mid$(Chunk, 1, 1))
Tens = vAL(Mid$(Chunk, 2, 2))
Ones = vAL(Mid$(Chunk, 3, 1))

If vAL(Chunk) = 100 Then
English = Trim(English & " Cien ")
End If
If vAL(Chunk) > 100 And (Chunk) < 200 Then
English = Trim(English & " Ciento ")
End If
If vAL(Chunk) > 199 And (Chunk) < 300 Then
English = Trim(English & " Doscientos ")
End If
If vAL(Chunk) > 299 And (Chunk) < 400 Then
English = Trim(English & " Trescientos ")
End If
If vAL(Chunk) > 399 And (Chunk) < 500 Then
English = Trim(English & EngNum(Hundreds)) & " Cientos "
End If
If vAL(Chunk) > 499 And (Chunk) < 600 Then
English = Trim(English & " Quinientos ")
End If
If vAL(Chunk) > 599 And (Chunk) < 700 Then
English = Trim(English & " Seiscientos ")
End If
If vAL(Chunk) > 699 And (Chunk) < 800 Then
English = Trim(English & " Setecientos ")
End If
If vAL(Chunk) > 799 And (Chunk) < 900 Then
English = Trim(English & " Ochocientos ")
End If
If vAL(Chunk) > 899 And (Chunk) < 1000 Then
English = Trim(English & " Novecientos ")
End If

TensDone = False

If Tens < 10 Then
English = Trim(English) & " " & EngNum(Ones)
TensDone = True
End If

If (Tens >= 11 And Tens <= 19) Then
English = English & " " & EngNum(Tens)
TensDone = True
End If

If (Tens / 10#) = Int(Tens / 10#) Then
English = English & " " & EngNum(Tens)
TensDone = True
End If

If Not TensDone Then
English = English & " " & EngNum((Int(Tens / 10)) * 10)
English = Trim(English) & " y " & EngNum(Ones)
End If

'** añadir la palabra "million" si es necesaria.
If LoopCount = 1 And vAL(Chunk) = 1 Then
English = Trim(English) + " Millon "
End If
If LoopCount = 1 And vAL(Chunk) > 1 Then
English = Trim(English) + " Millones "
End If

'** añadir la palabra "mil" si es necesaria.
If LoopCount = 2 And vAL(Chunk) > 0 Then
English = Trim(English) + " Mil "
End If

'** Do pass through second three digits
StartVal = StartVal + 3

Next LoopCount

'** Retornar el valores
'Si desea Emplear esta función para trabajar has con dos decimales
escriba
'el retorno de la función Así: NumWordEsp = Trim(English) & " con " &
Pennies & "/100"

'** Retorno de la función

NumWordEsp = Trim(English) & " Pesos M/Cte."

Exit Function

NumWord_Err:
MsgBox "Error es " & Error$ & Chr(13) & Chr(10) & "En NumWordEsp()" &
Chr(13) & Chr(10) & "Erro de la Función"
MsgBox msg, 16, "Error de Aplicación "
Exit Function

End Function

--
Gabriel Ortiz L.

gor...@col-online.com
"AnaMar" <ma...@ran.es> escribió en el mensaje
news:#NxS0PKV...@cppssbbsa02.microsoft.com...

José A. Giménez [Py]

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to
Inserta el siguiente código en un módulo de Access:

Dim Numeros(103) As String
Dim letras As String
Function Centenas(VCentena As Double) As String
If VCentena = 1 Then
Centenas = Numeros(100)
Else
If VCentena = 5 Then
Centenas = Numeros(101)
Else
If VCentena = 7 Then
Centenas = letras & Numeros(102)
Else
If VCentena = 9 Then
Centenas = letras & Numeros(103)
Else
Centenas = Numeros(VCentena)
End If
End If
End If
End If
End Function
Function Unidades(VUnidad As Double) As String
Unidades = Numeros(VUnidad)
End Function
Function Decenas(VDecena As Double) As String
Decenas = Numeros(VDecena)
End Function
Sub inicializar()
Numeros(0) = "cero"
Numeros(1) = "uno"
Numeros(2) = "dos"
Numeros(3) = "tres"
Numeros(4) = "cuatro"
Numeros(5) = "cinco"
Numeros(6) = "seis"
Numeros(7) = "siete"
Numeros(8) = "ocho"
Numeros(9) = "nueve"
Numeros(10) = "diez"
Numeros(11) = "once"
Numeros(12) = "doce"
Numeros(13) = "trece"
Numeros(14) = "catorce"
Numeros(15) = "quince"
Numeros(20) = "veinte"
Numeros(30) = "treinta"
Numeros(40) = "cuarenta"
Numeros(50) = "cincuenta"
Numeros(60) = "sesenta"
Numeros(70) = "setenta"
Numeros(80) = "ochenta"
Numeros(90) = "noventa"
Numeros(100) = "ciento"
Numeros(101) = "quinientos"
Numeros(102) = "setecientos"
Numeros(103) = "novecientos"
End Sub
Function NumerosALetras(Numero As Double) As String
Dim HuboCentavos As Boolean
Dim Decimales As Double

Decimales = Numero - Int(Numero)
Numero = Int(Numero)
inicializar

letras = ""
Do
'*---> Validación si se pasa de 100 millones
If Numero >= 1000000000 Then
letras = "Error en Conversión a Letras"
Numero = 0
Decimales = 0
End If

'*---> Centenas de Millón
If (Numero < 1000000000) And (Numero >= 100000000) Then
If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero /
100000000) * 100000000)) < 1000000) Then
letras = letras & "cien millones "
Else
letras = letras & Centenas(Int(Numero / 100000000))
If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <>
5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9)
Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000000) * 100000000)
End If

'*---> Decenas de Millón
If (Numero < 100000000) And (Numero >= 10000000) Then
If Int(Numero / 1000000) < 16 Then
letras = letras & Decenas(Int(Numero / 1000000))
letras = letras & " millones "
Numero = Numero - (Int(Numero / 1000000) * 1000000)
Else
letras = letras & Decenas(Int(Numero / 10000000) * 10)
Numero = Numero - (Int(Numero / 10000000) * 10000000)
If Numero > 1000000 Then
letras = letras & " y "
End If
End If
End If

'*---> Unidades de Millón
If (Numero < 10000000) And (Numero >= 1000000) Then
If Int(Numero / 1000000) = 1 Then
letras = letras & " un millón "
Else
letras = letras & Unidades(Int(Numero / 1000000))
letras = letras & " millones "
End If
Numero = Numero - (Int(Numero / 1000000) * 1000000)
End If

'*---> Centenas de Millar
If (Numero < 1000000) And (Numero >= 100000) Then
If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) *
100000)) < 1000) Then
letras = letras & "cien mil "
Else
letras = letras & Centenas(Int(Numero / 100000))
If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And
(Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000) * 100000)
End If

'*---> Decenas de Millar
If (Numero < 100000) And (Numero >= 10000) Then
If Int(Numero / 1000) < 16 Then
letras = letras & Decenas(Int(Numero / 1000))
letras = letras & " mil "
Numero = Numero - (Int(Numero / 1000) * 1000)
Else
letras = letras & Decenas(Int(Numero / 10000) * 10)
Numero = Numero - (Int((Numero / 10000)) * 10000)
If Numero > 1000 Then
letras = letras & " y "
Else
letras = letras & " mil "
End If
End If
End If

'*---> Unidades de Millar
If (Numero < 10000) And (Numero >= 1000) Then
If Int(Numero / 1000) = 1 Then
letras = letras & "un"
Else
letras = letras & Unidades(Int(Numero / 1000))
End If
letras = letras & " mil "
Numero = Numero - (Int(Numero / 1000) * 1000)
End If

'*---> Centenas
If (Numero < 1000) And (Numero > 99) Then
If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) <
1) Then
letras = letras & "cien "
Else
letras = letras & Centenas(Int(Numero / 100))
If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And
(Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100) * 100)

End If

'*---> Decenas
If (Numero < 100) And (Numero > 9) Then
If Numero < 16 Then
letras = letras & Decenas(Int(Numero))
Numero = Numero - Int(Numero)
Else
letras = letras & Decenas(Int((Numero / 10)) * 10)
Numero = Numero - (Int((Numero / 10)) * 10)
If Numero > 0.99 Then
letras = letras & " y "
End If
End If
End If

'*---> Unidades
If (Numero < 10) And (Numero > 0.99) Then
letras = letras & Unidades(Int(Numero))
Numero = Numero - Int(Numero)
End If
Loop Until (Numero = 0)

'*---> Decimales
If (Decimales > 0) Then
letras = letras & " con "
letras = letras & Format(Decimales * 100, "00") & "/100"
Else
' If (letras <> "Error en Conversión a Letras") And (Len(Trim(letras)) >
0) Then
' Select Case Valor1
' Case True
' letras = letras & " exactos"
' End Select
' End If
End If
NumerosALetras = letras
'Select Case Valor2
'Case True
'NumerosALetras = UCase(Left(letras, 1)) & Right(letras, Len(letras) - 1)
'End Select
End Function

Para probarlo, en un formulario puedes poner dos cuadros de texto uno en el
que se ingresa
el número (por ejemplo, llamdo Numero) y otro en el que aparecerá el
texto(por ej. llamado Letras) entonces la función se usa así:

[Letras]= NumerosALetras(Numero)

--
Saludos.

José A.Giménez.
Asunción, Paraguay

Jorge E. Jaramillo

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to
Había una aplicación que hacía esto en www.abarcode.net alguien sabe donde
quedo pues no logro encontrarla

--
Jorge E Jaramillo
king...@hotmail.com

Jorge E. Jaramillo

unread,
Nov 22, 2000, 3:00:00 AM11/22/00
to

Eva Etxebeste

unread,
Nov 23, 2000, 3:00:00 AM11/23/00
to
Hola AnaMar

Apúntate ésta página, seguro que la vas a consultar más de una vez

http://www.abarcode.net/tomasb/access.htm

AnaMar <ma...@ran.es> escribió en el mensaje de noticias

Francisco Sánchez

unread,
Nov 27, 2000, 3:00:00 AM11/27/00
to
Creo que hay algo en la página de Guille
http://guille.costasol.net
... por cierto, ahora no me está funcionando.
:¿?
0 new messages