You are on page 1of 2

Option Explicit

'********************************************************
' Dessarollada originalmente por Bernie Deitrick *
'********************************************************
'****************************************************************
' Adaptado al castellano por JLD - JLD Excel Blog en Castellano *
'****************************************************************

Function SpellNumberSP(ByVal n As Double, _


Optional ByVal ccy As String = "", _
Optional ByVal cents As String = "", _
Optional ByVal join As String = " con", _
Optional ByVal fraction As Boolean = False) As String
Dim myLength As Long
Dim i As Long
Dim myNum As Long
Dim Remainder As Long

SpellNumberSP = ""

Remainder = Round(100 * (n - Int(n)), 0) 'extrae la parte decimal

On Error Resume Next


myLength = Int(Application.Log10(n) / 3)

For i = myLength To 0 Step -1


myNum = Int(n / 10 ^ (i * 3)) 'extrae la parte entera
n = n - myNum * 10 ^ (i * 3)
If myNum > 0 Then
Select Case myNum
Case 1
SpellNumberSP = SpellNumberSP & _
Choose(i + 1, "uno", "mil ", "un mill�n ", "un bill�n ", "un
trill�n")
Case Else
SpellNumberSP = SpellNumberSP & MakeWord(Int(myNum)) & _
Choose(i + 1, "", " mil ", " millones ", " billones ", "
trillones")
End Select
End If

Next i
SpellNumberSP = SpellNumberSP & " " & ccy & _
IIf(Remainder > 0, join & " " & Format(Remainder, "00"), " ") &
_
IIf(fraction, "/100", "") & " " & cents
SpellNumberSP = (Trim(SpellNumberSP))

End Function

Function MakeWord(ByVal inValue As Long) As String


Dim unitWord, tenWord, tenWordEnt
Dim n As Long
Dim unit As Long, ten As Long, hund As Long
unitWord = Array("", "uno", "dos", "tres", "cuatro", _
"cinco", "seis", "siete", "ocho", _
"nueve", "diez", "once", "doce", _
"trece", "catorce", "quince", _
"dieciseis", "diecisiete", "dieciocho", "diecinueve")
tenWord = Array("", "diez", "veinti", "treinta y ", "cuarenta y ", _
"cincuenta y ", "sesenta y ", "setenta y ", "ochenta y ",
"noventa y ")
tenWordEnt = Array("", "diez", "veinte", "treinta", "cuarenta", _
"cincuenta", "sesenta", "setenta", "ochenta", "noventa")

MakeWord = ""
n = inValue
If n = 0 Then MakeWord = "cero"
hund = n \ 100 '"\" se usa para division entera
If hund > 0 Then
If n / 100 = 1 Then
MakeWord = "cien"
Exit Function
End If
Select Case hund
Case 1
MakeWord = "ciento "
Case 5
MakeWord = "quinientos "
Case Else
MakeWord = MakeWord & MakeWord(Int(hund)) & " cientos "
End Select
End If
n = n - hund * 100
If n < 20 Then
ten = n
MakeWord = MakeWord & unitWord(ten) '& " "
Else
Select Case n Mod 10
Case 0
ten = n \ 10
MakeWord = MakeWord & tenWordEnt(ten) '& " "
unit = n - ten * 10
MakeWord = Trim(MakeWord & unitWord(unit))
Case Else
ten = n \ 10
MakeWord = MakeWord & tenWord(ten) '& " "
unit = n - ten * 10
MakeWord = Trim(MakeWord & unitWord(unit))
End Select
End If
MakeWord = (Trim(MakeWord))

End Function

You might also like