Вы находитесь на странице: 1из 3

=English(Sheet1!

C8)
Function English(ByVal N As Currency) As String
Const
Const
Const
Const

Thousand = 1000@
Million = Thousand * Thousand
Billion = Thousand * Million
Trillion = Thousand * Billion

If (N = 0@) Then English = "zero": Exit Function


Dim Buf As String: If (N < 0@) Then Buf = "negative " Else Buf = ""
Dim Frac As Currency: Frac = Abs(N - Fix(N))
If (N < 0@ Or Frac <> 0@) Then N = Abs(Fix(N))
Dim AtLeastOne As Integer: AtLeastOne = N >= 1
If (N >=
Buf =
N = N
If (N
End If

Trillion) Then
Buf & EnglishDigitGroup(Int(N / Trillion)) & " trillion"
- Int(N / Trillion) * Trillion
>= 1@) Then Buf = Buf & " "

If (N >=
Buf =
N = N
If (N
End If

Billion) Then
Buf & EnglishDigitGroup(Int(N / Billion)) & " billion"
- Int(N / Billion) * Billion
>= 1@) Then Buf = Buf & " "

If (N >=
Buf =
N = N
If (N
End If

Million) Then
Buf & EnglishDigitGroup(N \ Million) & " million"
Mod Million
>= 1@) Then Buf = Buf & " "

If (N >=
Buf =
N = N
If (N
End If

Thousand) Then
Buf & EnglishDigitGroup(N \ Thousand) & " thousand"
Mod Thousand
>= 1@) Then Buf = Buf & " "

If (N >= 1@) Then


Buf = Buf & EnglishDigitGroup(N)
End If
If (Frac = 0@) Then
Buf = Buf & " Only"
ElseIf (Int(Frac * 100@) = Frac * 100@) Then
If AtLeastOne Then Buf = Buf & " and "
Buf = Buf & Format$(Frac * 100@, "00") & "/100 Only"
Else
If AtLeastOne Then Buf = Buf & " and "
Buf = Buf & Format$(Frac * 10000@, "0000") & "/10000 Only"
End If
English = Buf
End Function
Private Function EnglishDigitGroup(ByVal N As Integer) As String

Const Hundred = " hundred"


Const One = "One"
Const Two = "Two"
Const Three = "Three"
Const Four = "Four"
Const Five = "Five"
Const Six = "Six"
Const Seven = "Seven"
Const Eight = "Eight"
Const Nine = "Nine"
Dim Buf As String: Buf = ""
Dim Flag As Integer: Flag = False
Select Case (N
Case 0: Buf
Case 1: Buf
Case 2: Buf
Case 3: Buf
Case 4: Buf
Case 5: Buf
Case 6: Buf
Case 7: Buf
Case 8: Buf
Case 9: Buf
End Select

\
=
=
=
=
=
=
=
=
=
=

100)
"": Flag = False
One & Hundred: Flag = True
Two & Hundred: Flag = True
Three & Hundred: Flag = True
Four & Hundred: Flag = True
Five & Hundred: Flag = True
Six & Hundred: Flag = True
Seven & Hundred: Flag = True
Eight & Hundred: Flag = True
Nine & Hundred: Flag = True

If (Flag <> False) Then N = N Mod 100


If (N > 0) Then
If (Flag <> False) Then Buf = Buf & " "
Else
EnglishDigitGroup = Buf
Exit Function
End If
Select Case (N \ 10)
Case 0, 1: Flag =
Case 2: Buf = Buf
Case 3: Buf = Buf
Case 4: Buf = Buf
Case 5: Buf = Buf
Case 6: Buf = Buf
Case 7: Buf = Buf
Case 8: Buf = Buf
Case 9: Buf = Buf
End Select

False
& "Twenty": Flag = True
& "Thirty": Flag = True
& "Forty": Flag = True
& "Fifty": Flag = True
& "Sixty": Flag = True
& "Seventy": Flag = True
& "Eighty": Flag = True
& "Ninety": Flag = True

If (Flag <> False) Then N = N Mod 10


If (N > 0) Then
If (Flag <> False) Then Buf = Buf & "-"
Else
EnglishDigitGroup = Buf
Exit Function
End If
Select Case (N)
Case 0:
Case 1: Buf =
Case 2: Buf =
Case 3: Buf =
Case 4: Buf =

Buf
Buf
Buf
Buf

&
&
&
&

One
Two
Three
Four

Case 5: Buf = Buf & Five


Case 6: Buf = Buf & Six
Case 7: Buf = Buf & Seven
Case 8: Buf = Buf & Eight
Case 9: Buf = Buf & Nine
Case 10: Buf = Buf & "Ten"
Case 11: Buf = Buf & "Eleven"
Case 12: Buf = Buf & "Twelve"
Case 13: Buf = Buf & "Thirteen"
Case 14: Buf = Buf & "Fourteen"
Case 15: Buf = Buf & "Fifteen"
Case 16: Buf = Buf & "Sixteen"
Case 17: Buf = Buf & "Seventeen"
Case 18: Buf = Buf & "Eighteen"
Case 19: Buf = Buf & "Nineteen"
End Select
EnglishDigitGroup = Buf
End Function

Вам также может понравиться