From Round Pig, 1 Year ago, written in Visual Basic.
Option Explicit
'*************************************************************************************************
Explicit
'*************************************************************************************************
'        FUNCION PARA CONVERTIR NUMEROS A LETRAS
'
LETRAS
'
'        Copyright (C) 2005 Mauricio Baeza Servin
Servin
la 
la 
la 
la 
posterior.
'
posterior.
'
incluso 
incluso 
 \n 
detalles.
'
detalles.
'
ha 
ha 
 \n'\n 
'
'        Mauricio Baeza        -        mauricio@correolibre.net
'
'*************************************************************************************************
-        
'
'*************************************************************************************************
'Hago uso de variables bastante explicitas para facilitar la lectura del codigo
codigo
'Los comentarios cumplen y complementan la misma funcion

funcion

'Ultima modificacion Octubre del 2002
'Argumentos:
2002
'Argumentos:
'Numero = Valor que deseamos convertir en texto
texto
'Moneda = es el nombre de la moneda a mostrar
mostrar
'Fraccion_Letras = Verdadero para que la fraccion de la moneda
moneda
'                 tambien la convierta a letras
letras
'Fraccion = Es el nombre de la fraccion de la moneda
moneda
'Texto_Inicial = Cualquier texto que quieras al principio del resultado
resultado
'Texto_Final = Cualquier texto que quieras al finla del resultado
resultado
'Estilo = Formato de salida
salida
'           1 = MAYUSCULAS
MAYUSCULAS
'           2 = minusculas
minusculas
'           3 = Tipo Titulo
Titulo
'Los valores negativos los convierte a positivos
positivos
'El valor minimo en 0, el valor maximo es  9,999,999,999,999.99

99

Function Numeros_Letras(ByVal Numero As Double, _
                    
_
                    
ByVal Moneda As String, _
                    
_
                    
ByVal Fraccion_Letras As Boolean , _
                    
_
                    
ByVal Fraccion As String, _
                    
_
                    
ByVal Texto_Inicial As String, _
                    
_
                    
ByVal Texto_Final As String, _
                    
_
                    
ByVal Estilo As Integer) As String
String
Dim strLetras As String
String
Dim NumTmp As String
String
Dim intFraccion As Integer

  
Integer

  
strLetras = Texto_Inicial
  
Texto_Inicial
  
'Convertimos a positivo si es negativo
  
negativo
  
Numero = Abs(Numero)
Abs(Numero)
  NumTmp = Format(Numero, "000000000000000.00")
  
00")
  
If Numero < 1 Then
    
Then
    
strLetras = strLetras & "cero " & Plural(Moneda) & " "
  Else
    
"
  Else
    
strLetras = strLetras & NumLet(Val(Left(NumTmp, 15)))
    
15)))
    
If Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
      
Then
      
strLetras = strLetras & Moneda & " "
    
"
    
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then
      
Then
      
strLetras = strLetras & "de " & Plural(Moneda) & " "
    Else
      
"
    Else
      
strLetras = strLetras & Plural(Moneda) & " "
    
"
    
End If
  
If
  
End If
  
If
  
If Fraccion_Letras Then
    
Then
    
intFraccion = Val(Right(NumTmp, 2))
    
2))
    
Select Case intFraccion
      
intFraccion
      
Case 0
        
0
        
strLetras = strLetras & "con cero " & Plural(Fraccion)
      
Plural(Fraccion)
      
Case 1
        
1
        
strLetras = strLetras & "con un " & Fraccion
      
Fraccion
      
Case Else
        
Else
        
strLetras = strLetras & "con " & NumLet(Val(Right(NumTmp, 2))) & Plural(Fraccion)
    
Plural(Fraccion)
    
End Select
  Else
    
Select
  Else
    
strLetras = strLetras & Right(NumTmp, 2)
  
2)
  
End If
  
If
  
strLetras = strLetras & Texto_Final
  
Texto_Final
  
Select Case Estilo
    
Estilo
    
Case 1
      
1
      
strLetras = UCase(strLetras)
    
UCase(strLetras)
    
Case 2
      
2
      
strLetras = LCase(strLetras)
    
LCase(strLetras)
    
Case 3
      
3
      
strLetras = strLetras          'StrConv(strLetras, vbProperCase)
  
vbProperCase)
  
End Select
    
  
Select
    
  
Numeros_Letras = strLetras
  
strLetras
  
End Function


Function


Function NumLet(ByVal Numero As Double) As String
  
String
  
Dim NumTmp As String
  
String
  
Dim co1 As Integer
  
Integer
  
Dim co2 As Integer
  
Integer
  
Dim pos As Integer
  
Integer
  
Dim dig As Integer
  
Integer
  
Dim cen As Integer
  
Integer
  
Dim dec As Integer
  
Integer
  
Dim uni As Integer
  
Integer
  
Dim letra1 As String
  
String
  
Dim letra2 As String
  
String
  
Dim letra3 As String
  
String
  
Dim Leyenda As String
  
String
  
Dim TFNumero As String
        
  
String
        
  
NumTmp = Format(Numero, "000000000000000")        'Le da un formato fijo
  
fijo
  
co1 = 1
  
1
  
pos = 1
  
1
  
TFNumero = ""
  
""
  
'Para extraer tres digitos cada vez
  
vez
  
Do While co1 <= 5
    
5
    
co2 = 1
    
1
    
Do While co2 <= 3
      
3
      
'Extrae un digito cada vez de izquierda a derecha
      
derecha
      
dig = Val(Mid(NumTmp, pos, 1))
      
1))
      
Select Case co2
        
co2
        
Case 1: cen = dig
        
dig
        
Case 2: dec = dig
        
dig
        
Case 3: uni = dig
      
dig
      
End Select
      
Select
      
co2 = co2 + 1
      
1
      
pos = pos + 1
    Loop
    
1
    Loop
    
letra3 = Centena(uni, dec, cen)
    
cen)
    
letra2 = Decena(uni, dec)
    
dec)
    
letra1 = Unidad(uni, dec)
            
    
dec)
            
    
Select Case co1
      
co1
      
Case 1
        
1
        
If cen + dec + uni = 1 Then
          
Then
          
Leyenda = "billon "
        
"
        
ElseIf cen + dec + uni > 1 Then
          
Then
          
Leyenda = "billones "
        
"
        
End If
      
If
      
Case 2
        
2
        
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then
          
Then
          
Leyenda = "mil millones "
        
"
        
ElseIf cen + dec + uni >= 1 Then
          
Then
          
Leyenda = "mil "
        
"
        
End If
      
If
      
Case 3
        
3
        
If cen + dec = 0 And uni = 1 Then
          
Then
          
Leyenda = "millon "
        
"
        
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
          
Then
          
Leyenda = "millones "
        
"
        
End If
      
If
      
Case 4
        
4
        
If cen + dec + uni >= 1 Then
          
Then
          
Leyenda = "mil "
        
"
        
End If
      
If
      
Case 5
        
5
        
If cen + dec + uni >= 1 Then
          
Then
          
Leyenda = ""
        
""
        
End If
      
If
      
End Select
            
      
Select
            
      
co1 = co1 + 1
      
1
      
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda
      
      
Leyenda
      
      
Leyenda = ""
      
""
      
letra1 = ""
      
""
      
letra2 = ""
      
""
      
letra3 = ""
  Loop
       
  
""
  Loop
       
  
NumLet = TFNumero
    
TFNumero
    
End Function


Function


Function Centena(ByVal uni As Integer, ByVal dec As Integer, _
                         
_
                         
ByVal cen As Integer) As String
String
Dim cTexto As String

  
String

  
Select Case cen
    
cen
    
Case 1
      
1
      
If dec + uni = 0 Then
        
Then
        
cTexto = "cien "
      Else
        
"
      Else
        
cTexto = "ciento "
      
"
      
End If
    
If
    
Case 2: cTexto = "doscientos "
    
"
    
Case 3: cTexto = "trescientos "
    
"
    
Case 4: cTexto = "cuatrocientos "
    
"
    
Case 5: cTexto = "quinientos "
    
"
    
Case 6: cTexto = "seiscientos "
    
"
    
Case 7: cTexto = "setecientos "
    
"
    
Case 8: cTexto = "ochocientos "
    
"
    
Case 9: cTexto = "novecientos "
    
"
    
Case Else: cTexto = ""
  
""
  
End Select
  
Select
  
Centena = cTexto
    
cTexto
    
End Function


Function


Function Decena(ByVal uni As Integer, ByVal dec As Integer) As String
String
Dim cTexto As String
  
  
String
  
  
Select Case dec
    
dec
    
Case 1:
      
1:
      
Select Case uni
        
uni
        
Case 0: cTexto = "diez "
        
"
        
Case 1: cTexto = "once "
        
"
        
Case 2: cTexto = "doce "
        
"
        
Case 3: cTexto = "trece "
        
"
        
Case 4: cTexto = "catorce "
        
"
        
Case 5: cTexto = "quince "
        
"
        
Case 6 To 9: cTexto = "dieci"
      
"dieci"
      
End Select
    
Select
    
Case 2:
      
2:
      
If uni = 0 Then
        
Then
        
cTexto = "veinte "
      
"
      
ElseIf uni > 0 Then
        
Then
        
cTexto = "veinti"
      
"veinti"
      
End If
    
If
    
Case 3: cTexto = "treinta "
    
"
    
Case 4: cTexto = "cuarenta "
    
"
    
Case 5: cTexto = "cincuenta "
    
"
    
Case 6: cTexto = "sesenta "
    
"
    
Case 7: cTexto = "setenta "
    
"
    
Case 8: cTexto = "ochenta "
    
"
    
Case 9: cTexto = "noventa "
    
"
    
Case Else: cTexto = ""
  
""
  
End Select
  
  
Select
  
  
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
    
  
"
    
  
Decena = cTexto
  
cTexto
  
End Function


Function


Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As String
String
Dim cTexto As String
  
  
String
  
  
If dec <> 1 Then
    
Then
    
Select Case uni
      
uni
      
Case 1: cTexto = "un "
      
"
      
Case 2: cTexto = "dos "
      
"
      
Case 3: cTexto = "tres "
      
"
      
Case 4: cTexto = "cuatro "
      
"
      
Case 5: cTexto = "cinco "
    
"
    
End Select
  
Select
  
End If
  
If
  
Select Case uni
    
uni
    
Case 6: cTexto = "seis "
    
"
    
Case 7: cTexto = "siete "
    
"
    
Case 8: cTexto = "ocho "
    
"
    
Case 9: cTexto = "nueve "
  
"
  
End Select
  
  
Select
  
  
Unidad = cTexto

cTexto

End Function


Function


'Funcion que convierte al plural el argumento pasado
pasado
Private Function Plural(ByVal Palabra As String) As String
String
Dim pos As Integer
Integer
Dim strPal As String

  
String

  
If Len(Trim(Palabra)) > 0 Then
    
Then
    
pos = InStr(1, "aeiou", Right(Palabra, 1), 1)
    
1)
    
If pos > 0 Then
      
Then
      
strPal = Palabra & "s"
    Else
      
"s"
    Else
      
strPal = Palabra & "es"
    
"es"
    
End If
  
If
  
End If
  
If
  
Plural = strPal
  
strPal
  
End Function
Function