powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразовать 123 в "сто двадцать три"
5 сообщений из 5, страница 1 из 1
Преобразовать 123 в "сто двадцать три"
    #32358568
Evgenyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется число, например 123 ,(сумма по накладной)
необходимо отобразить его прописью, т.е. "сто двадцать три"
Язык VisualBasic
Как это сделать?
...
Рейтинг: 0 / 0
Преобразовать 123 в "сто двадцать три"
    #32358671
Фотография ulis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таких конвнрторов по инету не меряно, я использую такой (уже не и помню, где утащил)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
' Представление числа прописью на русском языке.
' Поддержка чисел типа Currency во всем диапазоне (т.е до ~922 триллионов рублей)
' При втором аргументе функции равном 0, вывод только числа прописью,
' при втором аргументе функции равном 1, дополнительно вывод рублей и копеек

Private Skl As Byte

Public Function Num2Str(n As Currency, Optional rub As Boolean) As String
    
    Dim s As String, R As String, K As String
    Dim t, u, v, w As Integer

    s = ""

    If n <  0  Then
        n = Abs(n)
        s = "минус"
    End If
'-----------------------------------------------------------------------------
    v = (n - Fix(n)) *  100  ' Число копеек
    w = Val(Right(Format(v),  1 )) ' Получить число единиц копеек
    
    n = Fix(n) ' Целое число рублей
    t = Val(Right(Format(n),  2 )) ' Получить две последние цифры рублей
    u = Val(Right(t,  1 )) ' Получить число единиц рублей
    
    If t >  10  And t <  15  Then
        R = " рублей" ' Получить подпись для рублей
    ElseIf u =  1  Then
        R = " рубль"
    ElseIf u >  1  And u <  5  Then
        R = " рубля"
    Else
        R = " рублей"
    End If

If v >  10  And v <  15  Then
K = " копеек." ' Получить подпись для копеек
ElseIf w =  1  Then
K = " копейка."
ElseIf w >  1  And w <  5  Then
K = " копейки."
Else
K = " копеек."
End If

'-----------------------------------------------------------------------------
If n >  1000000000000 # Then
s = AddStr(s, Num2Str2(Int(n /  1000000000000 #), True))
Select Case Skl
Case  0 
s = AddStr(s, "триллион")
Case  1 
s = AddStr(s, "триллиона")
Case  2 
s = AddStr(s, "триллионов")
End Select
n = n - Int(n /  1000000000000 #) *  1000000000000 #
End If

If n >  1000000000  Then
s = AddStr(s, Num2Str2(Int(n /  1000000000 ), True))
Select Case Skl
Case  0 
s = AddStr(s, "миллиард")
Case  1 
s = AddStr(s, "миллиарда")
Case  2 
s = AddStr(s, "миллиардов")
End Select
n = n - Int(n /  1000000000 ) *  1000000000 
End If

If n >  1000000  Then
s = AddStr(s, Num2Str2(n \  1000000 , True))
Select Case Skl
Case  0 
s = AddStr(s, "миллион")
Case  1 
s = AddStr(s, "миллиона")
Case  2 
s = AddStr(s, "миллионов")
End Select
n = n Mod  1000000 
End If

If n >  1000  Then
s = AddStr(s, Num2Str2(n \  1000 , False))
Select Case Skl
Case  0 
s = AddStr(s, "тысяча")
Case  1 
s = AddStr(s, "тысячи")
Case  2 
s = AddStr(s, "тысяч")
End Select
n = n Mod  1000 
End If

If n >  0  Then
s = AddStr(s, Num2Str2(n, True))
End If

If s = "" Then
s = "ноль"
ElseIf s = "минус" Then
s = s + " ноль"
End If

Num2Str = StrConv(Mid(s,  1 ,  1 ), vbUpperCase) + Mid(s,  2 , Len(s) -  1 )
If (rub) Then Num2Str = Num2Str & R & Format(v, " 00") & K

End Function
'-----------------------------------------------------------------------------

Private Function Num2Str2(n As Currency, male As Boolean) As String
Dim s As String
s = ""
If n >=  100  Then
s = Num2Str1(((n \  100 ) *  100 ), male)
n = n Mod  100 
End If
If n >=  20  Then
s = AddStr(s, Num2Str1(((n \  10 ) *  10 ), male))
n = n Mod  10 
End If
Num2Str2 = AddStr(s, Num2Str1(n, male))
End Function
'-----------------------------------------------------------------------------

Private Function Num2Str1(n As Currency, male As Boolean) As String
Skl =  2 
Select Case n
Case  100 
Num2Str1 = "сто"
Case  200 
Num2Str1 = "двести"
Case  300 
Num2Str1 = "триста"
Case  400 
Num2Str1 = "четыреста"
Case  500 
Num2Str1 = "пятьсот"
Case  600 
Num2Str1 = "шестьсот"
Case  700 
Num2Str1 = "семьсот"
Case  800 
Num2Str1 = "восемьсот"
Case  900 
Num2Str1 = "девятьсот"
Case  11 
Num2Str1 = "одиннадцать"
Case  12 
Num2Str1 = "двенадцать"
Case  13 
Num2Str1 = "тринадцать"
Case  14 
Num2Str1 = "четырнадцать"
Case  15 
Num2Str1 = "пятнадцать"
Case  16 
Num2Str1 = "шестнадцать"
Case  17 
Num2Str1 = "семнадцать"
Case  18 
Num2Str1 = "восемнадцать"
Case  19 
Num2Str1 = "девятнадцать"
Case  20 
Num2Str1 = "двадцать"
Case  30 
Num2Str1 = "тридцать"
Case  40 
Num2Str1 = "сорок"
Case  50 
Num2Str1 = "пятьдесят"
Case  60 
Num2Str1 = "шестьдесят"
Case  70 
Num2Str1 = "семьдесят"
Case  80 
Num2Str1 = "восемьдесят"
Case  90 
Num2Str1 = "девяносто"
Case  1 
Skl =  0 
If male Then
Num2Str1 = "один"
Else
Num2Str1 = "одна"
End If
Case  2 
Skl =  1 
If male Then
Num2Str1 = "два"
Else
Num2Str1 = "две"
End If
Case  3 
Skl =  1 
Num2Str1 = "три"
Case  4 
Skl =  1 
Num2Str1 = "четыре"
Case  5 
Num2Str1 = "пять"
Case  6 
Num2Str1 = "шесть"
Case  7 
Num2Str1 = "семь"
Case  8 
Num2Str1 = "восемь"
Case  9 
Num2Str1 = "девять"
Case  10 
Num2Str1 = "десять"
End Select
End Function
'-----------------------------------------------------------------------------

Private Function AddStr(S1 As String, S2 As String)
If S1 = "" Then
AddStr = S2
ElseIf S2 = "" Then
AddStr = S1
Else
AddStr = S1 + " " + S2
End If
End Function
'************************************
Function JS_Num2Str(MySumma As Variant)
'Дополнение к Сумме прописью
Dim MyValue As Currency

If IsNumeric(MySumma) Then
    MyValue = CCur(MySumma)
    JS_Num2Str = Num2Str(MyValue, True)
Else
    JS_Num2Str = "Сумма не указана !"
End If
End Function
...
Рейтинг: 0 / 0
Преобразовать 123 в "сто двадцать три"
    #32359414
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этим кодом я пользуюсь уже пару лет - еще не подводил. К тому-же действительно красивая реализация - спасибо автору.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
' (c) Andrew Usachov, 2:5100/87@fidonet, Andrejs.Usacovs@rota.lv
' (c) Anatoly Ressin, 2:5100/87.9@fidonet, Anatolijs.Ressins@rota.lv

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

взято с www.vbrussian.com
...
Рейтинг: 0 / 0
Преобразовать 123 в "сто двадцать три"
    #32359653
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Преобразовать 123 в "сто двадцать три"
    #32365869
vlad_707
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо вам большое....
хм... я не работал ниразу на VB в ехеле

А как теперь сделать в ехеле чтоб я смог применять её к ячейкам в листе????
можно теперь в строке писать =funSupr(A1, 0) или как её применить ??
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразовать 123 в "сто двадцать три"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]