Source Rally PHP Community Scripts .. Sign up .. Login
transform a number into letter. Spanish Language only. Visual Basic Code.
Access: Public      Tags:
Add to favourites       Subscribe comments       Copy code       Bookmark
Public Function En_letra(VALOR As Variant, Optional xyz As Variant) As String
If IsNull(VALOR) Then Exit Function
'By Alberto Rodriguez Jarabo Research & Co. 2002 ver 1.0.0.0
'estructura de la numeracion:
'millares MIL //centenas//decenas//millones  MILLONES // centenas // decenas //millares  MIL // centenas//decenas//unidades EUROS
'con    //decenas//unidades CENTIMOS DE EUROS
Dim coma As Integer
Dim cadena1 As String
Dim cadena2 As String
Dim cadena_m As String
Dim n_caracteres As Integer
Dim euro As String
Dim longitud As Integer
Dim x As Integer
Dim a As Integer
Dim NuncaNegativoSiemprePositivo As Boolean   ' by ex-entrenador del Barsa

    ' Vamos a meternos con los negativos
    NuncaNegativoSiemprePositivo = False
    
    If Len(Trim((VALOR))) > 0 Then
        
    Else
        En_letra = ""
        Exit Function
    End If
    
    
    
    If Val(VALOR) < 0 Then
        En_letra = "!!!!!!  ERROR: NUMERO NEGATIVO    ¡¡¡¡¡¡¡¡¡¡"
        Exit Function
    End If
    VALOR = comprueba(CStr(VALOR))
    If Len(CStr(VALOR)) > 15 Then
        MsgBox "Too Many digits in the String ! ! "
        Exit Function
    End If
    
    longitud = Len(CStr(VALOR))
    coma = InStr(VALOR, ",")
    If longitud > 12 Then
        longitud = longitud - 3 'saco la len menos los decimales
        longitud = longitud - 9 'saco la len menos la cadena1

        cadena1 = CStr(CLng(Mid(VALOR, longitud + 1, 9)))
        cadena_m = CStr(CLng(Left(VALOR, longitud)))
        cadena2 = Right(VALOR, 2)
        x = 3
    Else
        cadena1 = CStr(CLng((Left(VALOR, coma - 1))))
        cadena2 = Mid(VALOR, coma + 1)
        
        x = 2
    End If
    
'Euro o Euros
    If Len(cadena1) > 1 Then
        euro = " Euros "
    Else
        If cadena1 = 1 Then
            euro = " Euro "
        Else
            euro = " Euros "
        End If
    End If

'empezamos con cadena1, en funcion de la longitud, llamamos a una función u a otra
For a = 1 To x
    If a = 1 Then
        n_caracteres = Len(cadena1)
        Select Case n_caracteres
            Case 1
                If cadena1 = 0 Then
                    cadena1 = "cero"
                Else
                    cadena1 = unidad(CInt(cadena1))
                End If
            Case 2
                cadena1 = decenas(CInt(cadena1))
            Case 3
                cadena1 = centenas(CInt(cadena1))
            Case 4
                If Left(cadena1, 1) = 1 Then
                    cadena1 = " mil " & centenas(Right(cadena1, 3))
                Else
                    cadena1 = unidad(Left(cadena1, 1)) & " mil " & centenas(Right(cadena1, 3))
                End If
            Case 5
                cadena1 = decenas(Left(cadena1, 2)) & " mil " & centenas(Right(cadena1, 3))
            Case 6
                cadena1 = centenas(Left(cadena1, 3)) & " mil " & centenas(Right(cadena1, 3))
            Case 7
                If Left(cadena1, 1) = 1 Then
                    cadena1 = "un millon " & centenas(Mid(cadena1, 2, 3)) & " mil " & centenas(Right(cadena1, 3))
                Else
                    cadena1 = unidad(Left(cadena1, 1)) & " millones " & centenas(Mid(cadena1, 2, 3)) & " mil " & centenas(Right(cadena1, 3))
                End If
            Case 8
                cadena1 = decenas(Left(cadena1, 2)) & " millones " & centenas(Mid(cadena1, 3, 4)) & " mil " & centenas(Right(cadena1, 3))
            Case 9
                cadena1 = centenas(Left(cadena1, 3)) & " millones " & centenas(Mid(cadena1, 4, 3)) & " mil " & centenas(Right(cadena1, 3))
            
                
        End Select
    End If
    
    If a = 2 Then
        'empezamos con cadena 2, los decimales
        n_caracteres = Len((cadena2))
        Select Case n_caracteres
            Case 1
                cadena2 = cadena2 & 0
                cadena2 = decenas(CInt(cadena2))
            Case 2
                cadena2 = decenas(CInt(cadena2))
        End Select
        If x = 2 Then
            Select Case cadena2
            Case "un"
                En_letra = UCase(cadena1 & euro & "con " & cadena2 & " centimo.")
            Case ""
                En_letra = UCase(cadena1 & euro)
            Case Else
                En_letra = UCase(cadena1 & euro & "con " & cadena2 & " centimos.")
            End Select
            
            
        End If
    End If
    If a = 3 Then
                n_caracteres = Len(cadena_m)
        Select Case n_caracteres
            Case 1
                cadena_m = unidad(CInt(cadena_m))
            Case 2
                cadena_m = decenas(CInt(cadena_m))
            Case 3
                cadena_m = centenas(CInt(cadena_m))
            Case 4
                If Left(cadena_m, 1) = 1 Then
                    cadena_m = " mil " & centenas(Right(cadena_m, 3))
                Else
                    cadena_m = unidad(Left(cadena_m, 1)) & " mil " & centenas(Right(cadena_m, 3))
                End If
            Case 5
                cadena_m = decenas(Left(cadena_m, 2)) & " mil " & centenas(Right(cadena_m, 3))
            Case 6
                cadena_m = centenas(Left(cadena_m, 3)) & " mil " & centenas(Right(cadena_m, 3))
            Case 7
                If Left(cadena_m, 1) = 1 Then
                    cadena_m = "un millon " & centenas(Mid(cadena_m, 2, 3)) & " mil " & centenas(Right(cadena_m, 3))
                Else
                    cadena_m = unidad(Left(cadena_m, 1)) & " millones " & centenas(Mid(cadena_m, 2, 3)) & " mil " & centenas(Right(cadena_m, 3))
                End If
            Case 8
                cadena_m = decenas(Left(cadena_m, 2)) & " millones " & centenas(Mid(cadena_m, 3, 4)) & " mil " & centenas(Right(cadena_m, 3))
            Case 9
                cadena_m = centenas(Left(cadena_m, 3)) & " millones " & centenas(Mid(cadena_m, 4, 3)) & " mil " & centenas(Right(cadena_m, 3))
            
                
        End Select

        If x = 3 Then
            If cadena2 = "" Then
                En_letra = UCase(cadena_m & " mil " & cadena1 & euro)
            Else
                If cadena2 = "un" Then
                    En_letra = UCase(cadena_m & " mil " & cadena1 & euro & "con " & cadena2 & " centimo.")
                Else
                    En_letra = UCase(cadena_m & " mil " & cadena1 & euro & "con " & cadena2 & " centimos.")
                End If
            End If
        End If
    
    End If
Next a
    
End Function
Private Function unidad(VALOR As Integer) As String
    Select Case VALOR
        Case 1
            unidad = "un"
        Case 2
            unidad = "dos"
        Case 3
            unidad = "tres"
        Case 4
            unidad = "cuatro"
        Case 5
            unidad = "cinco"
        Case 6
            unidad = "seis"
        Case 7
            unidad = "siete"
        Case 8
            unidad = "ocho"
        Case 9
            unidad = "nueve"
        Case 0
            unidad = ""
End Select

End Function

Private Function decenas(VALOR As Integer)

    'tenemos que distinguir entre once... doce... y los demás como siempre
    Dim pepe
    'si la longitud es un caracter, entonces llamamos a UNIDAD
    If Len(CStr(VALOR)) = 1 Then
        decenas = unidad(VALOR)
        Exit Function
    End If
    'cojemos el primer dígito
    pepe = Left(CStr(VALOR), 1)
    Select Case pepe
    
    
    Case 1
        Select Case VALOR
            Case 10
                decenas = "diez"
            Case 11
                decenas = "once"
            Case 12
                decenas = "doce"
            Case 13
                decenas = "trece"
            Case 14
                decenas = "catorce"
            Case 15
                decenas = "quince"
            Case 16
                decenas = "dieciseis"
            Case 17
                decenas = "diecisiete"
            Case 18
                decenas = "dieciocho"
            Case 19
                decenas = "diecinueve"
        End Select
    Case 9
        If Right(CStr(VALOR), 1) = 0 Then
            decenas = "noventa"
        Else
            decenas = "noventa y " & unidad(CInt(Right(CStr(VALOR), 1)))
        End If
    Case Else
        Select Case pepe
            Case 2
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "veinte"
                Else
                    decenas = "veinti" & unidad(Right(VALOR, 1))
                End If
            Case 3
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "treinta"
                Else
                    decenas = "treinta y " & unidad(Right(VALOR, 1))
                End If
            Case 4
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "cuarenta"
                Else
                    decenas = "cuarenta y " & unidad(Right(VALOR, 1))
                End If
                
            Case 5
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "cincuenta"
                Else
                    decenas = "cincuenta y " & unidad(Right(VALOR, 1))
                End If
                
            Case 6
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "sesenta"
                Else
                    decenas = "sesenta y " & unidad(Right(VALOR, 1))
                End If
                
            Case 7
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "setenta"
                Else
                    decenas = "setenta y " & unidad(Right(VALOR, 1))
                End If
                
            Case 8
                If Right(CStr(VALOR), 1) = 0 Then
                    decenas = "ochenta"
                Else
                    decenas = "ochenta y " & unidad(Right(VALOR, 1))
                End If
            Case 0
                    decenas = "" & unidad(Right(VALOR, 1))
        End Select
    End Select
End Function

Private Function centenas(VALOR As Variant) As String

    'si la cifra es de longitud uno, llamo a UNIDADES
    If Len(CStr(CInt(VALOR))) = 1 Then
        centenas = unidad(CInt(VALOR))
        Exit Function
    End If
    'si la cifra es de longitud 2, llamo a DECENAS
    If Len(CStr(CInt(VALOR))) = 2 Then
        centenas = decenas(CInt(VALOR))
        Exit Function
    End If
    
Dim pepe As Integer
VALOR = CStr(CInt(VALOR))
pepe = Left(VALOR, 1)

    Select Case pepe
        Case 1
            If VALOR = "100" Then
            centenas = "cien"
            Else
            centenas = "ciento " & decenas(Mid(VALOR, 2))
            End If
        Case 2
            centenas = "doscientos " & decenas(Mid(VALOR, 2))
        Case 3
            centenas = "trescientos " & decenas(Mid(VALOR, 2))
        Case 4
            centenas = "cuatrocientos " & decenas(Mid(VALOR, 2))
        Case 5
            centenas = "quinientos " & decenas(Mid(VALOR, 2))
        Case 6
            centenas = "seiscientos " & decenas(Mid(VALOR, 2))
        Case 7
            centenas = "setecientos " & decenas(Mid(VALOR, 2))
        Case 8
            centenas = "ochocientos " & decenas(Mid(VALOR, 2))
        Case 9
            centenas = "novecientos " & decenas(Mid(VALOR, 2))
    End Select

End Function



Private Function comprueba(VALOR As String) As String
Dim coma As Integer
Dim cadena2 As String
    coma = InStr(VALOR, ",")
    'si no hay coma entonces le pongo dos ceros decimales
    If coma = 0 Then
        VALOR = VALOR & ",00"
    End If
    'recupero coma
    coma = InStr(VALOR, ",")
    'meto los decimales en cadena2
    cadena2 = Mid(CStr(VALOR), coma + 1)
    'si la len de cadena2=1 entonces le pongo un 0 al final
    If Len(CStr(cadena2)) = 1 Then
        VALOR = VALOR & 0
    End If
    comprueba = VALOR
End Function
Add to favourites       Subscribe comments       Copy code       Bookmark
Sign up to add your own comment here!

Shared by:

fokker

Mail user Add to friends
All user contributed content is available under the LGPL unless specified otherwise.
Remaining copyrights Regin Gaarsmand © 2006-2008
About SourceRally.net
Adelgazar sin trucos Programador PHP