Você está na página 1de 5

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

"GUARANI", Optional MonedaPlural As String = "GUARAN�ES") As String


Function NumLetras(Valor As Currency) 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
'Si esta como Option Explicit
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

'Millardos
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, "MILLARDO", "MILLARDOS"))
NumLetras = letras_Millardos & NumLetras
End If

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

***********************************************************************************
*********************************************

'========================================================================
' Funci�n: Convertir n�meros a letras
'
' Creado por Otto Javier Gonz�lez
' www.youtube.com/ottojaviergonzalez
' Finalizado el 4 de Julio de 2013
'
' Visual Basic Para Microsoft Excel 2013
' Lista de reproducci�n del curso en YouTube:
' http://www.youtube.com/playlist?list=PLFNWPvtjBMjtnYLCp8KJwD1Ref7WLCIVZ
'
' Modificada por: Sergio Alejandro Campos, MVP Excel (18-jul-2019)
' Canal de Youtube EXCELeINFO, curso de macros:
' https://www.youtube.com/playlist?list=PLu8wBtXk2ly6-0LtqcC2aj4g6cEnJ-_nN
'========================================================================

Option Explicit

Function cMoneda2(num As Double) As String


Dim nEntero As Long
Dim Texto As String

nEntero = Int(num)
'nDecimal = Int(Round((num - nEntero) * 100)) 'Correcci�n de �ltimoo momento

Texto = cNumero(nEntero)

' Agrega la moneda


If nEntero = 1 Then
Texto = Texto

'Texto = Texto + " " + TipoCambio1


'Texto = Texto + " D�lar"
Else
If (nEntero Mod 1000000) = 0 Then
Texto = Texto

' Texto = Texto + " De"


End If
' Texto = Texto + " " + TipoCambio2

Texto = Texto
'Texto = Texto + " D�lares"
End If

''Agrega los centavos


'If Centavos = 1 Then
'
' If nDecimal <> 0 Then
' Texto = Texto
'
'' Texto = Texto & " Con " & cNumero(nDecimal)
' If nDecimal = 1 Then
' Texto = Texto
'
'' Texto = Texto & " Centavo"
' Else
' Texto = Texto
'
'' Texto = Texto & " Centavos"
' End If
' End If
'
'ElseIf Centavos = 0 Then
'
' If nDecimal <> 0 Then
' Texto = Texto
' If nDecimal = 1 Then
' Texto = Texto
'
' ' Texto = Texto & nDecimal & "/100"
' Else
' Texto = Texto
'
'' Texto = Texto & " " & nDecimal & "/100"
' End If
' End If
'End If
cMoneda2 = VBA.UCase(Texto)
'cMoneda2 = VBA.UCase(Texto) & " " & Denominacion

End Function

Function cNumero(ByVal num As Long) As String


Dim Texto As String

Dim cUnidades, cDecenas, cCentenas


Dim nUnidades, nDecenas, nCentenas As Byte

Dim nMiles As Long


Dim nMillones As Long

cUnidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete",


"Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis",
"Diecisite", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintid�s",
"Veintitr�s", "Veitnicuatro", "Veinticinco", "Veintiseis", "Veintisiete",
"Veintiocho", "Veintinueve")
cDecenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta",
"Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
cCentenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos",
"Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")

nMillones = num \ 1000000


nMiles = (num \ 1000) Mod 1000
nCentenas = (num \ 100) Mod 10
nDecenas = (num \ 10) Mod 10
nUnidades = num Mod 10

'Evaluaci�n de Millones

If nMillones = 1 Then
Texto = "Un Mill�n" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000),
"")
cNumero = Texto
Exit Function
ElseIf nMillones >= 2 And nMillones <= 999 Then
Texto = cNumero(num \ 1000000) + " Millones" + IIf(num Mod 1000000 <> 0, " " +
cNumero(num Mod 1000000), "")
cNumero = Texto
Exit Function

'Evaluaci�n de Miles

ElseIf nMiles = 1 Then


Texto = "Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
cNumero = Texto
Exit Function
ElseIf nMiles >= 2 And nMiles <= 999 Then
Texto = cNumero(num \ 1000) + " Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num
Mod 1000), "")
cNumero = Texto
Exit Function

End If
'Evaluaci�n desde 0 a 999

'Casos Especiales
If num = 100 Then
Texto = cDecenas(10)
cNumero = Texto
Exit Function
ElseIf num = 0 Then
Texto = "Cero"
cNumero = Texto
Exit Function
End If

If nCentenas <> 0 Then


Texto = cCentenas(nCentenas)
End If

If nDecenas <> 0 Then


If nDecenas = 1 Or nDecenas = 2 Then
If nCentenas <> 0 Then
Texto = Texto + " "
End If
Texto = Texto + cUnidades(num Mod 100)
cNumero = Texto
Exit Function
Else

If nCentenas <> 0 Then


Texto = Texto + " "
End If

Texto = Texto + cDecenas(nDecenas)


End If
End If

If nUnidades <> 0 Then


If nDecenas <> 0 Then
Texto = Texto + " y "
ElseIf nCentenas <> 0 Then
Texto = Texto + " "
End If
Texto = Texto + cUnidades(nUnidades)
End If

cNumero = Texto

End Function

Você também pode gostar