Сума прописом, MS Office, Програмні керівництва, статті









Модуль не наш. Взято з платіжки п’ятирічної давності. Втім, написати щось подібне, якщо ви трохи знайомі з математикою, не складе труднощів. Проте, спасибі автору за непотрібність витрати часу на створення створеного.
 
З недоліків – глючить функція часами. Тобто відмовляється працювати. Можливо, це пов’язано з російським написанням змінних і назви функції. Якщо хто розбереться у даній проблемі – ласкаво просимо висловитися на форумі. Все, що нижче потрібно просто вставити в новий модуль.

Option Compare Database
“Option Explicit

Public N (1 To 14) As Byte “в кожному розряді – число з суми
Public a, рядок As String
Public A1_муж, A1_жен, a2, a3, a0

Public Function Пропис (Сума, Optional Показивать_ноль_копеек As Boolean)
“Сума прописом в діапазоні від 0 до 999 млрд. з копійками
“Створена 26.11.97 (Бабіков Валерій Анатолійович)
“Якщо параметр Показивать_ноль_копеек = FALSE, _
то текст “00 копійок” не додається до результату.

A1_муж = Array (“”, “один”, “два”, “тpи”, “четиpе”, “п’ять”, “шість”, “сім”, “вісім”, “дев’ять”)
A1_жен = Array (“”, “одна”, “дві”, “тpи”, “четиpе”, “п’ять”, “шість”, “сім”, “вісім”, “дев’ять”)
a0 = Array (“десять”, “одинадцять”, “дванадцять”, “тринадцять”, “чотирнадцять”, “п’ятнадцять”, “шістнадцять”, “сімнадцять”, “вісімнадцять”, “дев’ятнадцять”)
a2 = Array (“”, “десять”, “двадцять”, “тpідцать”, “сорок”, “п’ятдесят”, “шістдесят”, “сімдесят”, “вісімдесят”, “дев’яносто”)
a3 = Array (“”, “сто”, “двісті”, “тpіста”, “чотириста”, “П’ятсот”, “Шістсот”, “сімсот”, “вісімсот”, “Дев’ятсот”)
мільярди = Array (“мільярд”, “мільярди”, “мільярдів”)
мільйони = Array (“мільйон”, “мільйони”, “мільйонів”)
тисячі = Array (“тисяча”, “тисячі”, “тисяч”)
рублі = Array (“рубль”, “рубля”, “рублів”)
копійки = Array (“копійка”, “копійки”, “копійок”)

a = “” “збирається рядок суми прописом
Позіція_разделітеля = InStr (1, Сума, “=”, 1) + InStr (1, Сума, “-“, 1) + InStr (1, Сума, “.”, 1) + InStr (1, Сума, “,” , 1)
If Позіція_разделітеля = 0 Then
коп = “00”
Позіція_разделітеля = Len (Сума) + 1
Else
коп = Left (Mid (Сума, Позіція_разделітеля + 1, 2) & “00”, 2)
End If

рядок = Right (“000000000000” & Mid (Сума, 1, Позіція_разделітеля – 1), 12)

If Val (рядок) <0 Or Val (рядок)> 999999999999.99 Then “перевірка умов
Пропис = “Сума виходить за межі допустимого діапазону (0-999999999999.99).”
    Exit Function
End If
For i = 1 To 12 “рублі
N (i) = Val (Mid (рядок, i, 1))
Next i
For i = 13 To 14 “копійки
N (i) = Val (Mid (коп, i – 12, 1))
Next i
If Розбір (0) Then “мільярди
a = a & мільярди (Схиляння (0)) + “”
End If
If Розбір (3) Then “мільйони
a = a & мільйони (Схиляння (3)) + “”
End If
If Розбір (6) Then “тисячі
a = a & тисячі (Схиляння (6)) + “”
End If
Розбір (9) “рублі
If a <> “” Then
a = a & рублі (Схиляння (9)) & “”
Else
a = “Нуль рублів”
End If
a = UCase (Mid (Trim (a), 1, 1)) & Mid (Trim (a), 2) “перша прописна
If Not Показивать_ноль_копеек And коп = “00” Then Else _
a = a & “” & коп & “” & копійки (Схиляння (11))
Пропис = a
End Function

Function Розбір (Зрушення) As Boolean
If Val (Mid (рядок, 1 + Зрушення, 3)) <> 0 Then
a = a & a3 (N (1 + Зрушення))
If N (2 + Зрушення) = 1 Then
a = a & a0 (N (3 + Зрушення))
    Else
a = a & a2 (N (2 + Зрушення)) & IIf (Зрушення = 6, A1_жен (N (3 + Зрушення)), A1_муж (N (3 + Зрушення)))
    End If
Розбір = True
Else
Розбір = False
End If
End Function
    
Public Function Схиляння (Зрушення)
If N (2 + Зрушення) = 1 Then “від 10 до 19
Схиляння = 2
Else
Select Case N (3 + Зрушення)
        Case 1
Схиляння = 0
        Case 2 To 4
Схиляння = 1
        Case Else
Схиляння = 2
    End Select
End If
End Function

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*