Você está na página 1de 3

MACRO NÚMEROS A LETRAS

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


MonedaPlural As String = "UNIDAD") As String

Dim Cantidad As Currency, Centavos As Currency, Digito As Byte, PrimerDigito As Byte,


SegundoDigito As Byte, TercerDigito As Byte, Bloque As String, NumeroBloques As Byte,
BloqueCero

Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant

Dim ValorEntero As Long

Dim ValorOriginal As Double

Valor = Round(Valor, 2)

Cantidad = Int(Valor)

ValorEntero = Cantidad

Centavos = (Valor - Cantidad) * 100

Unidades = 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")

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


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

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


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

NumeroBloques = 1

Do

PrimerDigito = 0

SegundoDigito = 0

TercerDigito = 0

Bloque = ""

BloqueCero = 0

For I = 1 To 3

Digito = Cantidad Mod 10

If Digito <> 0 Then


Select Case I

Case 1

Bloque = " " & Unidades(Digito - 1)

PrimerDigito = Digito

Case 2

If Digito <= 2 Then

Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1)

Else

Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " Y", Null) & Bloque

End If

SegundoDigito = Digito

Case 3

Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "CIEN",
Centenas(Digito - 1)) & Bloque

TercerDigito = Digito

End Select

Else

BloqueCero = BloqueCero + 1

End If

Cantidad = Int(Cantidad / 10)

If Cantidad = 0 Then

Exit For

End If

Next I

Select Case NumeroBloques

Case 1

NumLetras = Bloque

Case 2

NumLetras = Bloque & IIf(BloqueCero = 3, Null, " MIL") & NumLetras

Case 3

NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito =


0, " MILLON", " MILLONES") & NumLetras
End Select

NumeroBloques = NumeroBloques + 1

Loop Until Cantidad = 0

If Valor >= 1000000000 Then

Dim millardos As Currency

Dim millarodsInt As Integer

Dim letras_Millardos As String

millarodsInt = Int(Valor / 1000000000)

millardos = millarodsInt

letras_Millardos = Replace(Trim(NumLetras(millardos)), "00/100", IIf(millarodsInt = 1, "MIL


MILLONES", "MIL MILLONES"))

NumLetras = letras_Millardos & NumLetras

End If

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

End Function

Você também pode gostar