Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20-05-2008, 20:22:29
lee-mon-shu-pao lee-mon-shu-pao is offline
Buena Participación en el Foro
 
Registrado: feb 2005
Ubicación: Detras de un monitor...
Posts: 98
lee-mon-shu-pao Valoración +2
Predeterminado Re: Transformar números a palabras...

Public Function SonEnPalabras(Cifra As Long) As String
If Cifra > 999999999 Then
SonEnPalabras = Cifra
Exit Function
End If
Dim CifraChr As String
Dim Millones As Boolean
Dim Mil As Boolean

CifraChr = ""
Dim Decenas(0 To 29)
Decenas(0) = " "
Decenas(1) = " UN "
Decenas(2) = " DOS "
Decenas(3) = " TRES "
Decenas(4) = " CUATRO "
Decenas(5) = " CINCO "
Decenas(6) = " SEIS "
Decenas(7) = " SIETE "
Decenas(8) = " OCHO "
Decenas(9) = " NUEVE "
Decenas(10) = " DIEZ "
Decenas(11) = " ONCE "
Decenas(12) = " DOCE "
Decenas(13) = " TRECE "
Decenas(14) = " CATORCE "
Decenas(15) = " QUINCE "
Decenas(16) = " DIECISEIS "
Decenas(17) = " DIECISIETE "
Decenas(18) = " DIECIOCHO "
Decenas(19) = " DIECINUEVE "
Decenas(20) = " VEINTE "
Decenas(21) = " VEINTIUN "
Decenas(22) = " VEINTIDOS "
Decenas(23) = " VEINTITRES "
Decenas(24) = " VEINTICUATRO "
Decenas(25) = " VEINTICINCO "
Decenas(26) = " VEINTISEIS "
Decenas(27) = " VEINTISIETE "
Decenas(28) = " VEINTIOCHO "
Decenas(29) = " VEINTINUEVE "

Dim Decenas2(3 To 9)
Decenas2(3) = " TREINTA "
Decenas2(4) = " CUARENTA "
Decenas2(5) = " CINCUENTA "
Decenas2(6) = " SESENTA "
Decenas2(7) = " SETENTA "
Decenas2(8) = " OCHENTA "
Decenas2(9) = " NOVENTA "


Dim Centenas(1 To 9)
Centenas(1) = " CIENTO "
Centenas(2) = " DOSCIENTOS "
Centenas(3) = " TRESCIENTOS "
Centenas(4) = " CUATROCIENTOS "
Centenas(5) = " QUINIENTOS "
Centenas(6) = " SEISCIENTOS "
Centenas(7) = " SETECIENTOS "
Centenas(8) = " OCHOCIENTOS "
Centenas(9) = " NOVECIENTOS "
If Cifra = 0 Then
SonEnPalabras = "CERO PESOS"
Exit Function
End If

If Cifra < 0 Then
CifraChr = " MENOS "
Cifra = Cifra * -1
End If


' -------- Millones -------
If Cifra >= 100000000 And Cifra <= 100999999 Then
CifraChr = CifraChr & " CIEN "
Cifra = Cifra - 100000000
Millones = True
End If

If Cifra > 100999999 Then
CifraChr = CifraChr & Centenas(Int(Cifra / 100000000))
Cifra = Cifra - (Int(Cifra / 100000000) * 100000000)
Millones = True
End If

If Cifra > 999999 And Cifra <= 1999999 Then
CifraChr = CifraChr & " UN MILLON "
Cifra = Cifra - 1000000
Millones = False
ElseIf Cifra > 1999999 And Cifra <= 29999999 Then
CifraChr = CifraChr & Decenas(Int(Cifra / 1000000))
Cifra = Cifra - (Int(Cifra / 1000000) * 1000000)
Millones = True
ElseIf Cifra > 29999999 Then
CifraChr = CifraChr & Decenas2(Int(Cifra / 10000000))
Cifra = Cifra - (Int(Cifra / 10000000) * 10000000)
If Cifra > 999999 Then
CifraChr = CifraChr & " Y "
CifraChr = CifraChr & Decenas(Int(Cifra / 1000000))
Cifra = Cifra - (Int(Cifra / 1000000) * 1000000)
End If
Millones = True
End If

If Millones Then
CifraChr = CifraChr & " MILLONES "
End If

If CifraChr <> "" And Cifra = 0 Then
CifraChr = CifraChr & " DE "
End If

'------------ Miles ------------
If Cifra >= 100000 And Cifra <= 100999 Then
CifraChr = CifraChr & " CIEN "
Cifra = Cifra - 100000
Miles = True
End If

If Cifra > 100999 Then
CifraChr = CifraChr & Centenas(Int(Cifra / 100000))
Cifra = Cifra - (Int(Cifra / 100000) * 100000)
Miles = True
End If

If Cifra > 999 And Cifra <= 1999 Then
If CifraChr = "" Then
CifraChr = CifraChr & " MIL "
Else
CifraChr = CifraChr & " UN MIL "
End If
Cifra = Cifra - 1000
Miles = False
ElseIf Cifra > 1999 And Cifra <= 29999 Then
CifraChr = CifraChr & Decenas(Int(Cifra / 1000))
Cifra = Cifra - (Int(Cifra / 1000) * 1000)
Miles = True
ElseIf Cifra > 29999 Then
CifraChr = CifraChr & Decenas2(Int(Cifra / 10000))
Cifra = Cifra - (Int(Cifra / 10000) * 10000)
If Cifra > 999 Then
CifraChr = CifraChr & " Y "
CifraChr = CifraChr & Decenas(Int(Cifra / 1000))
Cifra = Cifra - (Int(Cifra / 1000) * 1000)
End If
Miles = True
End If

If Miles Then
CifraChr = CifraChr & " MIL "
End If

'------------ Las Chauchas ------------
If Cifra = 100 Then
CifraChr = CifraChr & " CIEN "
Cifra = Cifra - 100
End If

If Cifra > 100 Then
CifraChr = CifraChr & Centenas(Int(Cifra / 100))
Cifra = Cifra - (Int(Cifra / 100) * 100)
End If

If Cifra > 0 And Cifra <= 29 Then
CifraChr = CifraChr & Decenas(Cifra)
ElseIf Cifra > 29 Then
CifraChr = CifraChr & Decenas2(Int(Cifra / 10))
Cifra = Cifra - (Int(Cifra / 10) * 10)
If Cifra > 0 Then
CifraChr = CifraChr & " Y "
CifraChr = CifraChr & Decenas(Cifra)
End If
End If

CifraChr = CifraChr & " PESOS"

CifraChr = LTrim(RTrim(CifraChr))
Dim Encontrado As Integer
Encontrado = InStr(1, CifraChr, " ")
Do Until Not Encontrado
CifraChr = Left(CifraChr, Encontrado - 1) & Mid$(CifraChr, Encontrado + 1)
Encontrado = InStr(1, CifraChr, " ")
Loop
CifraChr = Left(CifraChr, 1) & LCase(Mid$(CifraChr, 2))
SonEnPalabras = CifraChr
End Function

Ponela en un modulo,
Para los decimales, primero manda la parte entera, concatenas la coma y luego la parte decimal.
Espero te sea de ayuda.
__________________
---------------------
Ácido, pero vitamínico.

Maipú- Chile
Responder Con Cita