- Код: Выделить всё
Attribute VB_Name = "NumbersInWords"
' (c) Andrew Usachov, 2:5100/87@fidonet, Andrejs.Usacovs@rota.lv
' (c) Anatoly Ressin, 2:5100/87.9@fidonet, Anatolijs.Ressins@rota.lv
Option Compare Database
Option Explicit
Function TriadInWords$(Triad$, Gender%, Unit1$, Unit2$, Unit5$)
Dim Result$
If Triad = "000" Then
TriadInWords = ""
Else
Result = Choose(Mid(Triad, 1, 1) + 1, "", " сто", " двести", " триста", " четыреста", _
" пятьсот", " шестьсот", " семьсот", " восемьсот", " девятьсот")
If Mid(Triad, 2, 1) = 1 Then
Result = Result & " " & Choose(Mid(Triad, 3, 1) + 1, "десять", "одиннадцать", _
"двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", _
"семнадцать", "восемнадцать", "девятнадцать") & " " & Unit5
Else
Result = Result & Choose(Mid(Triad, 2, 1) + 1, "", "", " двадцать", " тридцать", _
" сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят", " девяносто")
Select Case Mid(Triad, 3, 1)
Case 1: Result = Result & Choose(Gender, " один ", " одна ", " одно ") & Unit1
Case 2: Result = Result & Choose(Gender, " два ", " две ", " два ") & Unit2
Case 3: Result = Result & " три " & Unit2
Case 4: Result = Result & " четыре " & Unit2
Case Else: Result = Result & Choose(Mid(Triad, 3, 1) + 1, "", "", "", "", "", _
" пять", " шесть", " семь", " восемь", " девять") & " " & Unit5
End Select
End If
TriadInWords = Result
End If
End Function
Function NumberInWords(Number, Gender%, Unit1$, Unit2$, Unit5$)
Dim Image$, Modulus$
If IsNull(Number) Then
NumberInWords = Null
Else
Image = Format(Abs(Number), String(15, "0"))
If Image = 0 Then
NumberInWords = Trim("ноль " & Unit5)
Else
If Len(Image) > 15 Then
Modulus = " <много> " & Unit5
Else
Modulus = TriadInWords(Mid(Image, 1, 3), 1, "триллион", "триллионa", "триллионов") & _
TriadInWords(Mid(Image, 4, 3), 1, "миллиард", "миллиарда", "миллиардов") & _
TriadInWords(Mid(Image, 7, 3), 1, "миллион", "миллиона", "миллионов") & _
TriadInWords(Mid(Image, 10, 3), 2, "тысяча", "тысячи", "тысяч") & _
IIf(Mid(Image, 13, 3) = "000", " " & Unit5, _
TriadInWords(Mid(Image, 13, 3), Gender, Unit1, Unit2, Unit5))
End If
NumberInWords = Trim(IIf(Number < 0, "минус", "") & Modulus)
End If
End If
End Function
Function AmountInWords(Amount, Gender1%, Dollar1$, Dollar2$, Dollar5$, Gender2%, Cent1$, Cent2$, Cent5$)
Dim Image$
If IsNull(Amount) Then
AmountInWords = Null
Else
Image = Format(Amount, "0.00")
AmountInWords = IIf(Left(Image, 1) = "-", "минус ", "") & _
NumberInWords(Abs(Left(Image, Len(Image) - 3)), Gender1, Dollar1, Dollar2, Dollar5) & _
", " & NumberInWords(Right(Image, 2), Gender2, Cent1, Cent2, Cent5)
End If
End Function
Function IntegerInWords(Number)
IntegerInWords = NumberInWords(Number, 1, "", "", "")
End Function
Function RoublesInWords(Amount)
RoublesInWords = AmountInWords(Amount, 1, "рубль", "рубля", "рублей", 2, "копейка", "копейки", "копеек")
End Function
Function DollarsInWords(Amount)
DollarsInWords = AmountInWords(Amount, 1, "доллар", "доллара", "долларов", 1, "цент", "цента", "центов")
End Function
Function MarksInWords(Amount)
MarksInWords = AmountInWords(Amount, 2, "марка", "марки", "марок", 1, "пфеннинг", "пфеннинга", "пфеннингов")
End Function