Convertir números en texto

Esta función, convierte un número en su correspondiente trascripción a letras.

Function NumerosALetras(Numero As Double) As String
    Dim letras 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
           letras = letras & " exactos"
        End If
    End If
    
    NumerosALetras = letras
End Function
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
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s