Importes en Letras


Usualmente en sistemas de cuenta corriente y en liquidación de haberes o jornales se suele colocar además del total numérico de un importe su escritura en letras. Aquí presentamos una función que pasándole el valor decimal se encarga de generar una cadena de caracteres conteniendo en forma escrita dicho valor. Esta función funciona hasta 9999999.99 o sea 10 millones.

Primero en cualquier módulo BAS del sistema agregar la siguiente función:

Function Textual (Monto As Single)
'Formatea la variable monto.
IM$ = Format(Monto, "0.00")

'Calcula el largo entero.
A = Len(IM$) - 3

'Genera los centavos.
Centavos = "CON " + Right(IM$, 2) + " Ctvos."

'Cifras de 1 a 9.
If A = 1 Then
U = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 99.
If A = 2 Then
U = Val(Mid$(IM$, 2, 1))
D = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 999.
If A = 3 Then
U = Val(Mid$(IM$, 3, 1))
D = Val(Mid$(IM$, 2, 1))
C = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 9999.
If A = 4 Then
U = Val(Mid$(IM$, 4, 1))
D = Val(Mid$(IM$, 3, 1))
C = Val(Mid$(IM$, 2, 1))
M = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 99999.
If A = 5 Then
U = Val(Mid$(IM$, 5, 1))
D = Val(Mid$(IM$, 4, 1))
C = Val(Mid$(IM$, 3, 1))
M = Val(Mid$(IM$, 2, 1))
x = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 999999.
If A = 6 Then
U = Val(Mid$(IM$, 6, 1))
D = Val(Mid$(IM$, 5, 1))
C = Val(Mid$(IM$, 4, 1))
M = Val(Mid$(IM$, 3, 1))
x = Val(Mid$(IM$, 2, 1))
Y = Val(Mid$(IM$, 1, 1))
End If

'Cifras de 1 a 9999999.
If A = 7 Then
U = Val(Mid$(IM$, 7, 1))
D = Val(Mid$(IM$, 6, 1))
C = Val(Mid$(IM$, 5, 1))
M = Val(Mid$(IM$, 4, 1))
x = Val(Mid$(IM$, 3, 1))
Y = Val(Mid$(IM$, 2, 1))
z = Val(Mid$(IM$, 1, 1))
End If

'Genera los millones.
If z = 1 Then txt$ = "UN MILLON "
If z = 2 Then txt$ = "DOS MILLONES "
If z = 3 Then txt$ = "TRES MILLONES "
If z = 4 Then txt$ = "CUATRO MILLONES "
If z = 5 Then txt$ = "CINCO MILLONES "
If z = 6 Then txt$ = "SEIS MILLONES "
If z = 7 Then txt$ = "SIETE MILLONES "
If z = 8 Then txt$ = "OCHO MILLONES "
If z = 9 Then txt$ = "NUEVE MILLONES "

'Genera los cientos redondos.
If Y = 1 And M = 0 And x = 0 Then txt$ = txt$ + "CIEN MIL "
If Y = 2 And M = 0 And x = 0 Then txt$ = txt$ + "DOCIENTOS MIL "
If Y = 3 And M = 0 And x = 0 Then txt$ = txt$ + "TRECIENTOS MIL "
If Y = 4 And M = 0 And x = 0 Then txt$ = txt$ + "CUATROCIENTOS MIL "
If Y = 5 And M = 0 And x = 0 Then txt$ = txt$ + "QUINIENTOS MIL "
If Y = 6 And M = 0 And x = 0 Then txt$ = txt$ + "SEICIENTOS MIL "
If Y = 7 And M = 0 And x = 0 Then txt$ = txt$ + "SETECIENTOS MIL "
If Y = 8 And M = 0 And x = 0 Then txt$ = txt$ + "OCHOCIENTOS MIL "
If Y = 9 And M = 0 And x = 0 Then txt$ = txt$ + "NOVECIENTOS MIL "

'Genera los cientos parciales.
If Y = 1 And (M > 0 Or x > 0) Then txt$ = txt$ + "CIENTO "
If Y = 2 And (M > 0 Or x > 0) Then txt$ = txt$ + "DOCIENTOS "
If Y = 3 And (M > 0 Or x > 0) Then txt$ = txt$ + "TRECIENTOS "
If Y = 4 And (M > 0 Or x > 0) Then txt$ = txt$ + "CUATROCIENTOS "
If Y = 5 And (M > 0 Or x > 0) Then txt$ = txt$ + "QUINIENTOS "
If Y = 6 And (M > 0 Or x > 0) Then txt$ = txt$ + "SEICIENTOS "
If Y = 7 And (M > 0 Or x > 0) Then txt$ = txt$ + "SETECIENTOS "
If Y = 8 And (M > 0 Or x > 0) Then txt$ = txt$ + "OCHOCIENTOS "
If Y = 9 And (M > 0 Or x > 0) Then txt$ = txt$ + "NOVECIENTOS "

'Genera las decenas de mil redondas.
If x = 1 And M = 0 Then txt$ = txt$ + "DIEZ MIL "
If x = 2 And M = 0 Then txt$ = txt$ + "VEINTE MIL "
If x = 3 And M = 0 Then txt$ = txt$ + "TREINTA MIL "
If x = 4 And M = 0 Then txt$ = txt$ + "CUARENTA MIL "
If x = 5 And M = 0 Then txt$ = txt$ + "CINCUENTA MIL "
If x = 6 And M = 0 Then txt$ = txt$ + "SESENTA MIL "
If x = 7 And M = 0 Then txt$ = txt$ + "SETENTA MIL "
If x = 8 And M = 0 Then txt$ = txt$ + "OCHENTA MIL "
If x = 9 And M = 0 Then txt$ = txt$ + "NOVENTA MIL "

'Genera las decenas de mil parciales.
If x = 1 And M > 5 Then txt$ = txt$ + "DIEZ Y "
If x = 2 And M > 0 Then txt$ = txt$ + "VEINTI"
If x = 3 And M > 0 Then txt$ = txt$ + "TREINTA Y "
If x = 4 And M > 0 Then txt$ = txt$ + "CUARENTA Y "
If x = 5 And M > 0 Then txt$ = txt$ + "CINCUENTA Y "
If x = 6 And M > 0 Then txt$ = txt$ + "SESENTA Y "
If x = 7 And M > 0 Then txt$ = txt$ + "SETENTA Y "
If x = 8 And M > 0 Then txt$ = txt$ + "OCHENTA Y "
If x = 9 And M > 0 Then txt$ = txt$ + "NOVENTA Y "

If M = 1 And x = 1 Then txt$ = txt$ + "ONCE MIL "
If M = 2 And x = 1 Then txt$ = txt$ + "DOCE MIL "
If M = 3 And x = 1 Then txt$ = txt$ + "TRECE MIL "
If M = 4 And x = 1 Then txt$ = txt$ + "CATORCE MIL "
If M = 5 And x = 1 Then txt$ = txt$ + "QUINCE MIL "
If M = 6 And x = 1 Then txt$ = txt$ + "SEIS MIL "
If M = 7 And x = 1 Then txt$ = txt$ + "SIETE MIL "
If M = 8 And x = 1 Then txt$ = txt$ + "OCHO MIL "
If M = 9 And x = 1 Then txt$ = txt$ + "NUEVE MIL "

If M = 1 And x <> 1 Then txt$ = txt$ + "UN MIL "
If M = 2 And x <> 1 Then txt$ = txt$ + "DOS MIL "
If M = 3 And x <> 1 Then txt$ = txt$ + "TRES MIL "
If M = 4 And x <> 1 Then txt$ = txt$ + "CUATRO MIL "
If M = 5 And x <> 1 Then txt$ = txt$ + "CINCO MIL "
If M = 6 And x <> 1 Then txt$ = txt$ + "SEIS MIL "
If M = 7 And x <> 1 Then txt$ = txt$ + "SIETE MIL "
If M = 8 And x <> 1 Then txt$ = txt$ + "OCHO MIL "
If M = 9 And x <> 1 Then txt$ = txt$ + "NUEVE MIL "

If C = 1 And (D > 0 Or U > 0) Then txt$ = txt$ + "CIENTO "
If C = 1 And (D = 0 And U = 0) Then txt$ = txt$ + "CIEN "

If C = 2 Then txt$ = txt$ + "DOCIENTOS "
If C = 3 Then txt$ = txt$ + "TRECIENTOS "
If C = 4 Then txt$ = txt$ + "CUATROCIENTOS "
If C = 5 Then txt$ = txt$ + "QUINIENTOS "
If C = 6 Then txt$ = txt$ + "SEICIENTOS "
If C = 7 Then txt$ = txt$ + "SETECIENTOS "
If C = 8 Then txt$ = txt$ + "OCHOCIENTOS "
If C = 9 Then txt$ = txt$ + "NOVECIENTOS "

If D = 1 And U = 0 Then txt$ = txt$ + "DIEZ "
If D = 1 And U = 1 Then txt$ = txt$ + "ONCE "
If D = 1 And U = 2 Then txt$ = txt$ + "DOCE "
If D = 1 And U = 3 Then txt$ = txt$ + "TRECE "
If D = 1 And U = 4 Then txt$ = txt$ + "CATORCE "
If D = 1 And U = 5 Then txt$ = txt$ + "QUINCE "
If D = 1 And U = 6 Then txt$ = txt$ + "DIEZ Y SEIS "
If D = 1 And U = 7 Then txt$ = txt$ + "DIEZ Y SIETE "
If D = 1 And U = 8 Then txt$ = txt$ + "DIEZ Y OCHO "
If D = 1 And U = 9 Then txt$ = txt$ + "DIEZ Y NUEVE "

If D = 2 And U = 0 Then txt$ = txt$ + "VEINTE "
If D = 3 And U = 0 Then txt$ = txt$ + "TREINTA "
If D = 4 And U = 0 Then txt$ = txt$ + "CUARENTA "
If D = 5 And U = 0 Then txt$ = txt$ + "CINCUENTA "
If D = 6 And U = 0 Then txt$ = txt$ + "SESENTA "
If D = 7 And U = 0 Then txt$ = txt$ + "SETENTA "
If D = 8 And U = 0 Then txt$ = txt$ + "OCHENTA "
If D = 9 And U = 0 Then txt$ = txt$ + "NOVENTA "

If D = 2 And U > 0 Then txt$ = txt$ + "VEINTI"
If D = 3 And U > 0 Then txt$ = txt$ + "TREINTA Y "
If D = 4 And U > 0 Then txt$ = txt$ + "CUARENTA Y "
If D = 5 And U > 0 Then txt$ = txt$ + "CINCUENTA Y "
If D = 6 And U > 0 Then txt$ = txt$ + "SESENTA Y "
If D = 7 And U > 0 Then txt$ = txt$ + "SETENTA Y "
If D = 8 And U > 0 Then txt$ = txt$ + "OCHENTA Y "
If D = 9 And U > 0 Then txt$ = txt$ + "NOVENTA Y "

If U = 1 And D <> 1 Then txt$ = txt$ + "UNO "
If U = 2 And D <> 1 Then txt$ = txt$ + "DOS "
If U = 3 And D <> 1 Then txt$ = txt$ + "TRES "
If U = 4 And D <> 1 Then txt$ = txt$ + "CUATRO "
If U = 5 And D <> 1 Then txt$ = txt$ + "CINCO "
If U = 6 And D <> 1 Then txt$ = txt$ + "SEIS "
If U = 7 And D <> 1 Then txt$ = txt$ + "SIETE "
If U = 8 And D <> 1 Then txt$ = txt$ + "OCHO "
If U = 9 And D <> 1 Then txt$ = txt$ + "NUEVE "

If U = 0 And D = 0 And C = 0 And M = 0 And x = 0 And Y = 0 And z = 0 Then txt$ = "CERO "

Textual = txt$ + Centavos

End Function

Luego, donde se desee el importe en letras bastará con:

Printer.Print "Saldo Actual: PESOS ";Textual(Saldo)

O, donde se requiera asignar a una variable:

Saldo = Textual(Valor)

Autor: Pablo Canello