Você está na página 1de 3

' Complemento para convertir numeros a letras

' 2012 - Excel: Facil para mi.

'

'

Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional


MonedaPlural As String = "") As String

Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte,


lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte,
lnBloqueCero

Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como
Option Explicit

Dim ValorEntero As Long

Valor = Round(Valor, 2)

lyCantidad = Int(Valor)

ValorEntero = lyCantidad

lyCentavos = (Valor - lyCantidad) * 100

laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO",


"NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE",
"DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES",
"VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")

laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA",


"SETENTA", "OCHENTA", "NOVENTA")

laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS",


"QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")

lnNumeroBloques = 1

Do

lnPrimerDigito = 0

lnSegundoDigito = 0

lnTercerDigito = 0

lcBloque = ""
lnBloqueCero = 0

For I = 1 To 3

lnDigito = lyCantidad Mod 10

If lnDigito <> 0 Then

Select Case I

Case 1

lcBloque = " " & laUnidades(lnDigito - 1)

lnPrimerDigito = lnDigito

Case 2

If lnDigito <= 2 Then

lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)

Else

lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque

End If

lnSegundoDigito = lnDigito

Case 3

lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN",
laCentenas(lnDigito - 1)) & lcBloque

lnTercerDigito = lnDigito

End Select

Else

lnBloqueCero = lnBloqueCero + 1

End If

lyCantidad = Int(lyCantidad / 10)

If lyCantidad = 0 Then

Exit For

End If

Next I

Select Case lnNumeroBloques


Case 1

NumLetras = lcBloque

Case 2

NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras

Case 3

NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And


lnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras

End Select

lnNumeroBloques = lnNumeroBloques + 1

Loop Until lyCantidad = 0

NumLetras = NumLetras & " " & Format(Str(lyCentavos), "00") & "/100 " & IIf(ValorEntero = 1,
MonedaSingular, MonedaPlural)

End Function

Você também pode gostar