I am a supporter of St. Joseph's hospice. If you find this site useful or if it helped you, consider a small donation to St. Joseph's, please.
Sometimes you need to spell numbers in English words with Dollars/Cents or british Pound Sterling/Pence or European Euros/Cents. 12.31 would result in Twelve Dollars and Thirtyone Cents, for example.
Other examples:
|
Number |
English Dollars/Cents |
English Pounds/Pence |
German Euros/Cents |
|
1000000000000000 |
>>>>> Error (Absolute amount > 999999999999999)! <<<<< |
>>>>> Error (Absolute amount > 999999999999999)! <<<<< |
>>>>> Fehler (Absolutbetrag > 999999999999999)! <<<<< |
|
0.123 |
Zero Dollars and Twelve Cents (rounded) |
Zero Pounds and Twelve Pence (rounded) |
Null Euro und Zwölf Cent (gerundet) |
|
-1 |
Minus One Dollar and Zero Cents |
Minus One Pound and Zero Pence |
Minus Ein Euro und Null Cent |
|
20.123 |
Twenty Dollars and Twelve Cents (rounded) |
Twenty Pounds and Twelve Pence (rounded) |
Zwanzig Euro und Zwölf Cent (gerundet) |
|
-20.123 |
Minus Twenty Dollars and Twelve Cents (rounded) |
Minus Twenty Pounds and Twelve Pence (rounded) |
Minus Zwanzig Euro und Zwölf Cent (gerundet) |
|
1.01 |
One Dollar and One Cent |
One Pound and One Penny |
Ein Euro und Ein Cent |
|
1000001.01 |
One Million One Dollars and One Cent |
One Million One Pounds and One Penny |
Eine Million und Ein Euro und Ein Cent |
Option Explicit
Private sNWord(0 To 28) As String
Private sHWord(1 To 4) As String
Function InWorten(ByVal sNumber As String) As String
InWorten = SpellNumber(sNumber, "German", "EUR")
End Function
Function SpellNumber(ByVal sNumber As String, _
Optional sLang As String = "English", _
Optional sCcy As String = "USD") As String
'Template was a version which circled in the web.
'This version informs the user about its limits.
'Reverse("moc.liborplus.www") PB 04-Oct-2009 V0.3
Dim Euros As String, cents As String
Dim Result As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
Dim Place(1 To 6) As String
Dim dNumber As Double
Dim prefix As String, suffix As String
Select Case sLang
Case "English"
Place(1) = ""
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
Place(6) = " Mantissa not wide enough for this number "
sHWord(1) = ">>>>> Error (Absolute amount > 999999999999999)! <<<<<"
sHWord(2) = " (rounded)"
sHWord(3) = "Minus "
sHWord(4) = "and"
sNWord(0) = "zero"
sNWord(1) = "one"
sNWord(2) = "two"
sNWord(3) = "three"
sNWord(4) = "four"
sNWord(5) = "five"
sNWord(6) = "six"
sNWord(7) = "seven"
sNWord(8) = "eight"
sNWord(9) = "nine"
sNWord(10) = "ten"
sNWord(11) = "eleven"
sNWord(12) = "twelve"
sNWord(13) = "thirteen"
sNWord(14) = "fourteen"
sNWord(15) = "fifteen"
sNWord(16) = "sixteen"
sNWord(17) = "seventeen"
sNWord(18) = "eighteen"
sNWord(19) = "nineteen"
sNWord(20) = "twenty"
sNWord(21) = "thirty"
sNWord(22) = "fourty"
sNWord(23) = "fifty"
sNWord(24) = "sixty"
sNWord(25) = "seventy"
sNWord(26) = "eighty"
sNWord(27) = "ninety"
sNWord(28) = "hundred"
Case "German"
Place(1) = ""
Place(2) = " Tausend "
Place(3) = " Millionen "
Place(4) = " Milliarden "
Place(5) = " Billionen "
Place(6) = " Die Mantisse ist nicht groß genug für diese Zahl "
sHWord(1) = ">>>>> Fehler (Absolutbetrag > 999999999999999)! <<<<<"
sHWord(2) = " (gerundet)"
sHWord(3) = "Minus "
sHWord(4) = "und"
sNWord(0) = "null"
sNWord(1) = "ein"
sNWord(2) = "zwei"
sNWord(3) = "drei"
sNWord(4) = "vier"
sNWord(5) = "fünf"
sNWord(6) = "sechs"
sNWord(7) = "sieben"
sNWord(8) = "acht"
sNWord(9) = "neun"
sNWord(10) = "zehn"
sNWord(11) = "elf"
sNWord(12) = "zwölf"
sNWord(13) = "dreizehn"
sNWord(14) = "vierzehn"
sNWord(15) = "fünfzehn"
sNWord(16) = "sechzehn"
sNWord(17) = "siebzehn"
sNWord(18) = "achtzehn"
sNWord(19) = "neunzehn"
sNWord(20) = "zwanzig"
sNWord(21) = "dreißig"
sNWord(22) = "vierzig"
sNWord(23) = "fünfzig"
sNWord(24) = "sechzig"
sNWord(25) = "siebzig"
sNWord(26) = "achtzig"
sNWord(27) = "neunzig"
sNWord(28) = "hundert"
End Select
'Empty string = 0
If "" = sNumber Then
sNumber = "0"
End If
dNumber = sNumber + 0#
'If we cannot cope with it, tell the user!
If Abs(dNumber) > 999999999999999# Then
SpellNumber = sHWord(1)
Exit Function
End If
'If we have to round we present a suffix "(rounded)"
If Abs(dNumber - Round(dNumber, 2)) > 1E-16 Then
dNumber = Round(dNumber, 2)
suffix = sHWord(2)
End If
'Negative numbers get a prefix "Minus"
If dNumber < 0# Then
prefix = sHWord(3)
dNumber = -dNumber
sNumber = Right(sNumber, Len(sNumber) - 1)
End If
sNumber = Trim(Str(sNumber))
If Left(sNumber, 1) = "." Then
sNumber = "0" & sNumber
End If
DecimalPlace = InStr(sNumber, ".")
If DecimalPlace > 0 Then
cents = GetTens(Left(Mid(sNumber, DecimalPlace + 1) & "00", 2), _
sLang, sCcy)
sNumber = Trim(Left(sNumber, DecimalPlace - 1))
End If
Count = 1
Do While sNumber <> ""
Temp = GetHundreds(Right(sNumber, 3), sLang, sCcy)
If Temp <> "" Then
If Euros <> "" And sLang = "German" Then
Euros = Temp & Place(Count) & " " & _
sHWord(4) & " " & Euros
Else
Euros = Temp & Place(Count) & Euros
End If
End If
If Len(sNumber) > 3 Then
sNumber = Left(sNumber, Len(sNumber) - 3)
Else
sNumber = ""
End If
Count = Count + 1
Loop
Select Case sCcy
Case "EUR"
Select Case Euros
Case ""
Euros = sNWord(0) & " Euros"
Case sNWord(1)
Euros = sNWord(1) & " Euro"
Case Else
Euros = Euros & " Euros"
End Select
Select Case cents
Case ""
cents = " " & sHWord(4) & " " & sNWord(0) & " Cents"
Case sNWord(1)
cents = " " & sHWord(4) & " " & sNWord(1) & " Cent"
Case Else
cents = " " & sHWord(4) & " " & cents & " Cents"
End Select
Case "GBP"
Select Case Euros
Case ""
Euros = sNWord(0) & " Pounds"
Case sNWord(1)
Euros = sNWord(1) & " Pound"
Case Else
Euros = Euros & " Pounds"
End Select
Select Case cents
Case ""
cents = " " & sHWord(4) & " " & sNWord(0) & " Pence"
Case sNWord(1)
cents = " " & sHWord(4) & " " & sNWord(1) & " Penny"
Case Else
cents = " " & sHWord(4) & " " & cents & " Pence"
End Select
Case "USD"
Select Case Euros
Case ""
Euros = sNWord(0) & " Dollars"
Case sNWord(1)
Euros = sNWord(1) & " Dollar"
Case Else
Euros = Euros & " Dollars"
End Select
Select Case cents
Case ""
cents = " " & sHWord(4) & " " & sNWord(0) & " Cents"
Case sNWord(1)
cents = " " & sHWord(4) & " " & sNWord(1) & " Cent"
Case Else
cents = " " & sHWord(4) & " " & cents & " Cents"
End Select
End Select
Temp = UCase(Replace(Euros & cents, " ", " "))
Select Case sLang
Case "English"
Temp = Application.WorksheetFunction.Proper(Temp)
Temp = Replace(Temp, " And ", " and ")
Case "German"
Temp = Application.WorksheetFunction.Proper(Temp)
Temp = Replace(Temp, "Ein Millionen", "Eine Million")
Temp = Replace(Temp, "Ein Milliarden", "Eine Milliarde")
Temp = Replace(Temp, "Ein Billionen", "Eine Billion")
Temp = Replace(Temp, "Dollars", "Dollar")
Temp = Replace(Temp, "Cents", "Cent")
Temp = Replace(Temp, "Pounds", "Pfund")
Temp = Replace(Temp, "Pound", "Pfund")
Temp = Replace(Temp, "Euros", "Euro")
Temp = Replace(Temp, "Pence", "Pennies")
Temp = Replace(Temp, " Und ", " und ")
End Select
SpellNumber = prefix & Temp & suffix
End Function
Private Function GetHundreds(ByVal sNumber, _
Optional sLang As String = "English", _
Optional sCcy As String = "USD") As String
Dim Result As String
If Val(sNumber) = 0 Then Exit Function
sNumber = Right("000" & sNumber, 3)
If Mid(sNumber, 1, 1) <> "0" Then
Result = GetDigit(Mid(sNumber, 1, 1)) _
& sNWord(28)
If Mid(sNumber, 2, 2) <> "00" Then
Result = Result & sHWord(4)
End If
End If
If Mid(sNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(sNumber, 2), sLang, sCcy)
ElseIf Mid(sNumber, 3, 1) <> "0" Then
Result = Result & GetDigit(Mid(sNumber, 3))
End If
GetHundreds = Result
End Function
Private Function GetTens(TensText As String, _
Optional sLang As String = "English", _
Optional sCcy As String = "USD")
Dim Result As String
Result = ""
If Val(Left(TensText, 1)) = 1 Then '10-19...
If Val(TensText) > 9 And Val(TensText) < 20 Then
GetTens = sNWord(Val(TensText))
End If
Exit Function
Else '20-99...
If Val(Left(TensText, 1)) > 1 And _
Val(Left(TensText, 1)) < 10 Then
Result = sNWord(18 + Val(Left(TensText, 1)))
Else
Result = GetDigit(Right(TensText, 1))
End If
If Right(TensText, 1) <> "0" And Left(TensText, 1) <> "0" Then
Select Case sLang
Case "German"
Result = GetDigit(Right(TensText, 1)) & _
sHWord(4) & Result
Case "English"
Result = Result & GetDigit(Right(TensText, 1))
End Select
End If
End If
GetTens = Result
End Function
Private Function GetDigit(Digit As String) As String
If Val(Digit) < 10 Then
GetDigit = sNWord(Val(Digit))
Else
GetDigit = ""
End If
End Function
[Sulprobil] [Get it done] [Organisation] [IT] [Controlling] [HR] [Family] [Contact] [Disclaimer]