Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/117: Рейтинг темы: голосов - 117, средняя оценка - 4.53
neDark
1

Макрос преобразование цифр в слова

07.04.2012, 13:57. Показов 21608. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Подскажите есть ли макрос для MS Office 2007, который преобразовывает цифры в словесное написание денежных единиц? или что то наподобие!

Например: 1 234, 56 (одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2012, 13:57
Ответы с готовыми решениями:

Преобразование цифр в слова
У меня есть такая задачка. Есть текстовый файл с таким текстом: "Мой телефон -123 - 45 - 67". И...

Сделать макрос в Word, вводишь строку и макрос произвольно меняет шрифт, цвет и размер для каждого слова из этого активного вордовского документа.
Началось VBA - лекций нет, только практика. Препод категоричеки отказывается что-нить объяснять,...

Преобразование формата данных через макрос
Добрый день, Уважаемые Форумчане. Помогите, пожалуйста, с решением вопроса по написанию макроса,...

Макрос для LibreOffice: заменять все буквы каждого пятого слова на вторые буквы следующего слова за ним
Здравсвуйте! Нужен макрос для LibreOffice, который будет заменять все буквы каждого 5-го слова на...

6
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
07.04.2012, 14:42 2
Есть. Например Ввести число и вывести его словами (число до 10 000)

Именно для денежных сумм есть также надстройка в Excel’е — не помню у кого.
0
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
02.05.2012, 12:10 3
Макрос переводит выделенное цифровое значение в текстовое предложение, добавляя текст к цифрам.
Пробелы и знаки ' при интерпретации удаляются
Число не более 999 миллиардов 999 миллионов 999 тысяч 999 .

Visual Basic
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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
Sub Перевести_выделенное_число_в_текст()
    Dim SumBase As Double, SumText As String
    With Selection
        SumText = .Text
        SumText = Replace(SumText, " ", "", 1, , vbTextCompare) ' Удаляем в числе пробелы
        SumText = Replace(SumText, "'", "", 1, , vbTextCompare) ' Удаляем в числе знаки '
        SumText = Replace(SumText, ",", ".", 1, , vbTextCompare) ' Меняем , на .
        SumText = Replace(SumText, Chr(160), "", 1, , vbBinaryCompare) ' Удаляем в числе неразрывные пробелы
        SumBase = Val(SumText)
        .Collapse Direction:=wdCollapseEnd
        .TypeText Text:=" " & Число_в_текст(SumBase, "руб")
    End With
End Sub
 
Public Function Число_в_текст(ByVal SumBase As Double, ByVal Valuta As String) As String
'Переводит цифровое значение в текстовое предложение.
'Параметр Valuta:
' "руб" - рубли,
' "дол" - доллары,
' "евр" - евро,
' "грив"- гривны,
' "" - без наименования,
' прочие текстовые наименования валют используются без склонения.
    Dim Edinicy(0 To 19) As String
    Dim Desyatki(0 To 9) As String
    Dim Sotni(0 To 9) As String
    Dim mlrd(0 To 9) As String
    Dim mln(0 To 9) As String
    Dim tys(0 To 9) As String
    Dim SumInt, x, shag, vl As Integer
    Dim txt, Sclon_Tys As String
    Dim Naim_Valuta_1 As String, Naim_Valuta_2 As String, Naim_Valuta_5 As String
    Dim Naim_Sotye_1 As String, Naim_Sotye_2 As String, Naim_Sotye_5 As String
    Dim Sotye As Integer, StrSotye As String
    Dim PereKluch  As String
    Edinicy(0) = ""
    Edinicy(1) = "один "
    Edinicy(2) = "два "
    Edinicy(3) = "три "
    Edinicy(4) = "четыре "
    Edinicy(5) = "пять "
    Edinicy(6) = "шесть "
    Edinicy(7) = "семь "
    Edinicy(8) = "восемь "
    Edinicy(9) = "девять "
    Edinicy(11) = "одиннадцать "
    Edinicy(12) = "двенадцать "
    Edinicy(13) = "тринадцать "
    Edinicy(14) = "четырнадцать "
    Edinicy(15) = "пятнадцать "
    Edinicy(16) = "шестнадцать "
    Edinicy(17) = "семнадцать "
    Edinicy(18) = "восемнадцать "
    Edinicy(19) = "девятнадцать "
    '---------------------------------------------
    Desyatki(0) = ""
    Desyatki(1) = "десять "
    Desyatki(2) = "двадцать "
    Desyatki(3) = "тридцать "
    Desyatki(4) = "сорок "
    Desyatki(5) = "пятьдесят "
    Desyatki(6) = "шестьдесят "
    Desyatki(7) = "семьдесят "
    Desyatki(8) = "восемьдесят "
    Desyatki(9) = "девяносто "
    '---------------------------------------------
    Sotni(0) = ""
    Sotni(1) = "сто "
    Sotni(2) = "двести "
    Sotni(3) = "триста "
    Sotni(4) = "четыреста "
    Sotni(5) = "пятьсот "
    Sotni(6) = "шестьсот "
    Sotni(7) = "семьсот "
    Sotni(8) = "восемьсот "
    Sotni(9) = "девятьсот "
    '---------------------------------------------
    mlrd(0) = "миллиардов "
    mlrd(1) = "миллиард "
    mlrd(2) = "миллиарда "
    mlrd(3) = "миллиарда "
    mlrd(4) = "миллиарда "
    mlrd(5) = "миллиардов "
    mlrd(6) = "миллиардов "
    mlrd(7) = "миллиардов "
    mlrd(8) = "миллиардов "
    mlrd(9) = "миллиардов "
    '---------------------------------------------
    mln(0) = "миллионов "
    mln(1) = "миллион "
    mln(2) = "миллиона "
    mln(3) = "миллиона "
    mln(4) = "миллиона "
    mln(5) = "миллионов "
    mln(6) = "миллионов "
    mln(7) = "миллионов "
    mln(8) = "миллионов "
    mln(9) = "миллионов "
    '---------------------------------------------
    tys(0) = "тысяч "
    tys(1) = "тысяча "
    tys(2) = "тысячи "
    tys(3) = "тысячи "
    tys(4) = "тысячи "
    tys(5) = "тысяч "
    tys(6) = "тысяч "
    tys(7) = "тысяч "
    tys(8) = "тысяч "
    tys(9) = "тысяч "
    '---------------------------------------------
    On Local Error Resume Next
    shag = 0
    SumInt = Int(SumBase)
    For x = Len(SumInt) To 1 Step -1
        shag = shag + 1
        Select Case x
            Case 12 ' - сотни миллиардов
                vl = Mid(SumInt, shag, 1)
                txt = txt & Sotni(vl)
            Case 11 ' - десятки  миллиардов
                vl = Mid(SumInt, shag, 1)
                If vl = "1" And Mid(SumInt, shag + 1, 1) <> 0 Then GoTo LblNextX Else txt = txt & Desyatki(vl)  ' - если конец триады от 11 до 19 то перескакиваем на единицы, иначе - формируем десятки
            Case 10 ' - единицы  миллиардов
                vl = Mid(SumInt, shag, 1)
                If shag > 1 Then
                    If Mid(SumInt, shag - 1, 1) = 1 Then txt = txt & Edinicy(Mid(SumInt, shag - 1, 2)) & "миллиардов " Else txt = txt & Edinicy(vl) & mlrd(vl) 'числа в диапозоне от 11 до 19 склоняются на "миллиардов" независимо от последнего числа триады
                Else
                    txt = txt & Edinicy(vl) & mlrd(vl)
                End If
 
                '-КОНЕЦ БЛОКА_______________________
            Case 9 ' - сотни миллионов
                vl = Mid(SumInt, shag, 1)
                txt = txt & Sotni(vl)
            Case 8 ' - десятки  миллионов
                vl = Mid(SumInt, shag, 1)
                If vl = "1" And Mid(SumInt, shag + 1, 1) <> 0 Then GoTo LblNextX Else txt = txt & Desyatki(vl)  ' - если конец триады от 11 до 19 то перескакиваем на единицы, иначе - формируем десятки
            Case 7 ' - единицы  миллионов
                vl = Mid(SumInt, shag, 1)
                If shag > 2 Then
                    If (Mid(SumInt, shag - 2, 1) = 0 And Mid(SumInt, shag - 1, 1) = 0 And vl = "0") Then GoTo LblNextX
                End If
                If shag > 1 Then
                    If Mid(SumInt, shag - 1, 1) = 1 Then txt = txt & Edinicy(Mid(SumInt, shag - 1, 2)) & "миллионов " Else: txt = txt & Edinicy(vl) & mln(vl)  'числа в диапозоне от 11 до 19 склоняются на "миллиардов" независимо от последнего числа триады
                Else
                    txt = txt & Edinicy(vl) & mln(vl)
                End If
                '-КОНЕЦ БЛОКА_______________________
            Case 6 ' - сотни тысяч
                vl = Mid(SumInt, shag, 1)
                txt = txt & Sotni(vl)
            Case 5 ' - десятки  тысяч
                vl = Mid(SumInt, shag, 1)
                If vl = 1 And Mid(SumInt, shag + 1, 1) <> 0 Then GoTo LblNextX Else txt = txt & Desyatki(vl)  ' - если конец триады от 11 до 19 то перескакиваем на единицы, иначе - формируем десятки
                Case 4 ' - единицы  тысяч
                vl = Mid(SumInt, shag, 1)
                If shag > 2 Then
                    If (Mid(SumInt, shag - 2, 1) = 0 And Mid(SumInt, shag - 1, 1) = 0 And vl = "0") Then GoTo LblNextX
                End If
                Sclon_Tys = Edinicy(vl) & tys(vl) ' - вводим переменную Sclon_Tys из-за иного склонения  тысяч в русском языке
                If vl = 1 Then Sclon_Tys = "одна " & tys(vl) ' - для тысяч склонение "один" и "два" неприменимо ( поэтому вводим переменную  Sclon_Tys )
                If vl = 2 Then Sclon_Tys = "две " & tys(vl) ' - для тысяч склонение "один" и "два" неприменимо ( поэтому вводим переменную  Sclon_Tys )
                If shag > 1 Then
                    If Mid(SumInt, shag - 1, 1) = 1 Then Sclon_Tys = Edinicy(Mid(SumInt, shag - 1, 2)) & "тысяч "
                End If
                txt = txt & Sclon_Tys
                '-КОНЕЦ БЛОКА_______________________
            Case 3 ' - сотни
                vl = Mid(SumInt, shag, 1)
                txt = txt & Sotni(vl)
            Case 2 ' - десятки
                vl = Mid(SumInt, shag, 1)
                If vl = "1" And Mid(SumInt, shag + 1, 1) <> 0 Then GoTo LblNextX Else txt = txt & Desyatki(vl)  ' - если конец триады от 11 до 19 то перескакиваем на единицы, иначе - формируем десятки
            Case 1 ' - единицы
                vl = Mid(SumInt, shag, 1)
                If shag > 2 Then
                    If (Mid(SumInt, shag - 2, 1) = 0 And Mid(SumInt, shag - 1, 1) = 0 And vl = "0") Then GoTo LblNextX
                End If
                If shag > 1 Then
                    If Mid(SumInt, shag - 1, 1) = 1 Then txt = txt & Edinicy(Mid(SumInt, shag - 1, 2)) Else: txt = txt & Edinicy(vl)
                Else
                    txt = txt & Edinicy(vl)
                End If
                '-КОНЕЦ БЛОКА_______________________
        End Select
LblNextX:
    Next x
    If InStr(1, LCase(Valuta), "руб") > 0 Then Valuta = "рубли"
    If InStr(1, LCase(Valuta), "дол") > 0 Then Valuta = "доллары"
    If InStr(1, LCase(Valuta), "евр") > 0 Then Valuta = "евро"
    If InStr(1, LCase(Valuta), "грив") > 0 Then Valuta = "гривны"
    Select Case Valuta
        Case "рубли"
            Naim_Valuta_1 = "рубль"
            Naim_Valuta_2 = "рубля"
            Naim_Valuta_5 = "рублей"
            Naim_Sotye_1 = "копейка"
            Naim_Sotye_2 = "копейки"
            Naim_Sotye_5 = "копеек"
        Case "доллары"
            Naim_Valuta_1 = "доллар"
            Naim_Valuta_2 = "доллара"
            Naim_Valuta_5 = "долларов"
            Naim_Sotye_1 = "цент"
            Naim_Sotye_2 = "цента"
            Naim_Sotye_5 = "центов"
        Case "евро"
            Naim_Valuta_1 = "евро"
            Naim_Valuta_2 = "евро"
            Naim_Valuta_5 = "евро"
            Naim_Sotye_1 = "цент"
            Naim_Sotye_2 = "цента"
            Naim_Sotye_5 = "центов"
        Case "гривны"
            Naim_Valuta_1 = "гривна"
            Naim_Valuta_2 = "гривны"
            Naim_Valuta_5 = "гривен"
            Naim_Sotye_1 = "копейка"
            Naim_Sotye_2 = "копейки"
            Naim_Sotye_5 = "копеек"
        Case ""
            Naim_Valuta_1 = ""
            Naim_Valuta_2 = ""
            Naim_Valuta_5 = ""
            Naim_Sotye_1 = ""
            Naim_Sotye_2 = ""
            Naim_Sotye_5 = ""
        Case Else
            Naim_Valuta_1 = Valuta
            Naim_Valuta_2 = Valuta
            Naim_Valuta_5 = Valuta
            Naim_Sotye_1 = "сотая"
            Naim_Sotye_2 = "сотых"
            Naim_Sotye_5 = "сотых"
    End Select
    If shag = 1 Then shag = 2
    If vl = 0 Or vl > 4 Or (Mid(SumInt, shag - 1, 2) > 10 And Mid(SumInt, shag - 1, 2) < 20) Then
        txt = txt + Naim_Valuta_5
    Else
        If vl = 1 Then txt = txt + Naim_Valuta_1 Else txt = txt + Naim_Valuta_2
    End If
    Sotye = CInt((SumBase - SumInt) * 100)
    StrSotye = Format(Sotye, "00")
    txt = txt & " " & StrSotye & " "
    Select Case Left(StrSotye, 1)
        Case "0", "2", "3", "4", "5", "6", "7", "8", "9"
            PereKluch = Right(StrSotye, 1)
        Case Else
            PereKluch = StrSotye
    End Select
    Select Case PereKluch
        Case "1"
            txt = txt & Naim_Sotye_1
        Case "2", "3", "4"
            txt = txt & Naim_Sotye_2
        Case Else
            txt = txt & Naim_Sotye_5
    End Select
    Число_в_текст = UCase(Left(txt, 1)) & Right(txt, Len(txt) - 1)
End Function
1
0 / 0 / 1
Регистрация: 06.07.2017
Сообщений: 1
06.07.2017, 23:28 4
Лучший ответ Сообщение было отмечено Eugene-LS как решение

Решение

А это полезный код, кот. должен идти всегда в связки с предыдущими, особенно в фин. учреждениях - преобразование даты в текст.
Visual Basic
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
 Sub Перевести_выделенную_дату_в_текст()
    Dim SumBase As String, SumText As String
    On Error Resume Next
    With Selection
        SumText = .Text
        SumText = Replace(SumText, " ", "", 1, , vbTextCompare) ' Удаляем в числе пробелы
        SumText = Replace(SumText, "'", "", 1, , vbTextCompare) ' Удаляем в числе знаки '
        SumText = Replace(SumText, ",", ".", 1, , vbTextCompare) ' Меняем , на .
        SumText = Replace(SumText, Chr(160), "", 1, , vbBinaryCompare) ' Удаляем в числе неразрывные пробелы
        SumBase = SumText
        .Collapse Direction:=wdCollapseEnd
        SumBase1 = DateSerial(Mid(SumBase, 7, 4), Mid(SumBase, 4, 2), Mid(SumBase, 1, 2))
        .TypeText Text:=" " & ДАТАПРОПИСЬЮ(SumBase1)
    End With
End Sub
 
 
 Function ДАТАПРОПИСЬЮ(ByVal ДАТА As Date, Optional ByVal ПАДЕЖ As Integer = 1, Optional ByVal ФОРМАТ As Integer = 1) As String
 
   PROG_NAME = "ДАТАПРОПИСЬЮ"
   PROG_MAX = 100
   
 
           Dim L1000(9) As String
           Dim L100(9, 2) As String   ' Сотни
           Dim L10(9, 2) As String    ' Десятки
           Dim L1(22, 2) As String    ' Единицы
           Dim m(12) As String    ' Месяца
           Dim SYM(3) As String
 
           Dim d As Integer, y As Integer
 
           Dim LETTERS As String, LETTDAY As String, LETTMONTH As String, LETTYEAR As String
           Dim n1000 As Integer, n100 As Integer, n10 As Integer, n1 As Integer
 
 
           ' МЕСЯЦА
   m(1) = "января"
   m(2) = "февраля"
  m(3) = "марта"
   m(4) = "апреля"
   m(5) = "мая"
   m(6) = "июня"
   m(7) = "июля"
   m(8) = "августа"
   m(9) = "сентября"
  m(10) = "октября"
1554   m(11) = "ноября"
1555   m(12) = "декабря"
 
           ' ЕДИНИЦЫ
1556   L1(0, 1) = "": L1(0, 0) = "": L1(0, 2) = ""
1557   L1(1, 1) = "одна": L1(1, 0) = "первое": L1(1, 2) = "первого"
1558   L1(2, 1) = "две": L1(2, 0) = "второе": L1(2, 2) = "второго"
1559   L1(3, 1) = "три": L1(3, 0) = "третье": L1(3, 2) = "третьего"
1560   L1(4, 1) = "четыре": L1(4, 0) = "четвертое": L1(4, 2) = "четвертого"
1561   L1(5, 1) = "пять": L1(5, 0) = "пятое": L1(5, 2) = "пятого"
1562   L1(6, 1) = "шесть": L1(6, 0) = "шестое": L1(6, 2) = "шестого"
1563   L1(7, 1) = "семь": L1(7, 0) = "седьмое": L1(7, 2) = "седьмого"
1564   L1(8, 1) = "восемь": L1(8, 0) = "восьмое": L1(8, 2) = "восьмого"
1565   L1(9, 1) = "девять": L1(9, 0) = "девятое": L1(9, 2) = "девятого"
1566   L1(10, 1) = "десять": L1(10, 0) = "десятое": L1(10, 2) = "десятого"
1567   L1(11, 1) = "одиннадцать": L1(11, 0) = "одиннадцатое": L1(11, 2) = "одиннадцатого"
1568   L1(12, 1) = "двенадцать": L1(12, 0) = "двенадцатое": L1(12, 2) = "двенадцатого"
1569   L1(13, 1) = "тринадцать": L1(13, 0) = "тринадцатое": L1(13, 2) = "тринадцатого"
1570   L1(14, 1) = "четырнадцать": L1(14, 0) = "четырнадцатое": L1(14, 2) = "четырнадцатого"
1571   L1(15, 1) = "пятнадцать": L1(15, 0) = "пятнадцатое": L1(15, 2) = "пятнадцатого"
1572   L1(16, 1) = "шестнадцать": L1(16, 0) = "шестнадцатое": L1(16, 2) = "шестнадцатого"
1573   L1(17, 1) = "семнадцать": L1(17, 0) = "семнадцатое": L1(17, 2) = "семнадцатого"
1574   L1(18, 1) = "восемнадцать": L1(18, 0) = "восемнадцатое": L1(18, 2) = "восемнадцатого"
1575   L1(19, 1) = "девятнадцать": L1(19, 0) = "девятнадцатое": L1(19, 2) = "девятнадцатого"
1576   L1(20, 1) = "двадцать": L1(20, 0) = "двадцатое": L1(20, 2) = "двадцатого"
 
           ' ДЕСЯТКИ
1577   L10(0, 1) = "": L10(0, 2) = "": L10(0, 0) = ""
1578   L10(1, 1) = "десять": L10(1, 2) = "десятого": L10(1, 0) = "десятое"
1579   L10(2, 1) = "двадцать": L10(2, 2) = "двадцатого": L10(2, 0) = "двадцатое"
1580   L10(3, 1) = "тридцать": L10(3, 2) = "тридцатого": L10(3, 0) = "тридцатое"
1581   L10(4, 1) = "сорок": L10(4, 2) = "сорокового"
1582   L10(5, 1) = "пятьдесят": L10(5, 2) = "пятьдесятого"
1583   L10(6, 1) = "шестьдесят": L10(6, 2) = "шестьдесятого"
1584   L10(7, 1) = "семьдесят": L10(7, 2) = "семьдесятого"
1585   L10(8, 1) = "восемьдесят": L10(8, 2) = "восемьдесятого"
1586   L10(9, 1) = "девяносто": L10(9, 2) = "девяностого"
 
           ' СОТНИ
1587   L100(0, 1) = "": L100(0, 2) = ""
1588   L100(1, 1) = "сто": L100(1, 2) = "сотого"
1589   L100(2, 1) = "двести": L100(2, 2) = "двухсотого"
1590   L100(3, 1) = "триста": L100(3, 2) = "трехсотого"
1591   L100(4, 1) = "четыреста": L100(4, 2) = "четырехсотого"
1592   L100(5, 1) = "пятьсот": L100(5, 2) = "пятисотого"
1593   L100(6, 1) = "шестьсот": L100(6, 2) = "шестисотого"
1594   L100(7, 1) = "семьсот": L100(7, 2) = "семисотого"
1595   L100(8, 1) = "восемьсот": L100(8, 2) = "восьмисотого"
1596   L100(9, 1) = "девятьсот": L100(9, 2) = "девятисотого"
 
           ' ТЫСЯЧИ
1597   L1000(1) = "тысячного"
1598   L1000(2) = "двухтысячного"
1599   L1000(3) = "трехтысячного"
1600   L1000(4) = "четырехтысячного"
1601   L1000(5) = "пятитысячного"
1602   L1000(6) = "шеститысячного"
1603   L1000(7) = "семитысячного"
1604   L1000(8) = "восьмитысячного"
1605   L1000(9) = "девятитысячного"
 
1606   SYM(1) = "тысяча"
1607   SYM(2) = "тысячи"
1608   SYM(3) = "тысяч"
 
1609   d = Day(ДАТА)
 
           ' число
1610   If d Mod 10 = 0 Then
1611     LETTDAY = IIf(ПАДЕЖ = 1, L10(d / 10, 0), L10(d / 10, 2))
1612   Else
 
1613     If d <= 20 Then
1614         LETTDAY = IIf(ПАДЕЖ = 1, L1(d, 0), L1(d, 2))
1615     Else
             ' выделение десятков
1616         n10 = d \ 10
             ' выделение единиц
1617         n1 = d Mod 10
 
1618         LETTDAY = L10(n10, 1) & " " & IIf(ПАДЕЖ = 1, L1(n1, 0), L1(n1, 2))
1619     End If
1620   End If
 
           ' Месяц
1621   LETTMONTH = m(Month(ДАТА))
 
           ' Год
1622   y = Year(ДАТА)
1623   n1000 = Fix(y / 1000)
1624   n100 = Fix((y - n1000 * 1000) / 100)
1625   n10 = y - n1000 * 1000 - n100 * 100
1626   n1 = n10 - Fix(n10 / 10) * 10
 
1627   If n1000 > 0 And n100 = 0 And n10 = 0 And n1 = 0 Then
1628     LETTYEAR = Trim(LETTYEAR & " " & L1000(n1000))
1629   ElseIf n1000 > 0 Then
1630     LETTYEAR = Trim(LETTYEAR & " " & L1(n1000, 1))
1631     If n1000 = 1 Then
1632         LETTYEAR = LETTYEAR & " " & SYM(1)
1633     ElseIf n1000 < 5 Then
1634         LETTYEAR = LETTYEAR & " " & SYM(2)
1635     Else
1636         LETTYEAR = LETTYEAR & " " & SYM(3)
1637     End If
1638   End If
 
1639   If n100 > 0 And n10 = 0 And n1 = 0 Then
1640     LETTYEAR = Trim(LETTYEAR & " " & L100(n100, 2))
1641   ElseIf n100 > 0 Then
1642     LETTYEAR = Trim(LETTYEAR & " " & L100(n100, 1))
1643   End If
 
1644   If n10 > 0 And n1 = 0 Then
1645     LETTYEAR = Trim(LETTYEAR & " " & L10(n10 / 10, 2))
1646   ElseIf n10 < 20 Then
1647     LETTYEAR = Trim(LETTYEAR & " " & L1(n10, 2))
1648   Else
1649     LETTYEAR = Trim(LETTYEAR & " " & L10(Fix(n10 / 10), 1) & " " & L1(n1, 2))
1650   End If
 
1651   Select Case ФОРМАТ
           Case 1
1652     LETTERS = LETTDAY & " " & LETTMONTH & " " & LETTYEAR & " года"
1653   Case 2
1654     LETTERS = Format(d, "00") & " " & LETTMONTH & " " & Format(y, "#####") & " года"
1655   Case 3
1656     LETTERS = UCase(Left(LETTDAY, 1)) & Mid(LETTDAY, 2) & " " & LETTMONTH & " " & LETTYEAR & " года"
1657   End Select
 
1658   ДАТАПРОПИСЬЮ = LETTERS
 
 End Function
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
10.07.2017, 03:59 5
Цитата Сообщение от seha1986 Посмотреть сообщение
Visual Basic
1
2
3
4
     L10(5, 1) = "пятьдесят": L10(5, 2) = "пятьдесятого"
1583 L10(6, 1) = "шестьдесят": L10(6, 2) = "шестьдесятого"
1584 L10(7, 1) = "семьдесят": L10(7, 2) = "семьдесятого"
1585 L10(8, 1) = "восемьдесят": L10(8, 2) = "восемьдесятого"
Восемьдесятого?! А может, восьмунадесятого Лучше уж степлер
Цитата Сообщение от seha1986 Посмотреть сообщение
в связки




Цитата Сообщение от seha1986 Посмотреть сообщение
А это полезный код
Что ж, посмотрим на отзывы бухгалтеров и финансистов.
0
185 / 183 / 31
Регистрация: 11.10.2016
Сообщений: 599
10.07.2017, 11:13 6
Sasha_Smirnov, у KoGG'а тоже хороший код (:
Миниатюры
Макрос преобразование цифр в слова  
1
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.07.2017, 23:58 7
Цитата Сообщение от seha1986 Посмотреть сообщение
А это полезный код, кот.
никому так и не пригодился.
0
12.07.2017, 23:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2017, 23:58
Помогаю со студенческими работами здесь

Как вывести слова из цифр в одну строку, а слова из букв в другую?
Условие задачи: Вводят строку слов. Необходимо найти слова, состоящие только из букв и только из...

Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти слова
• Дана строка. Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти слова.

Переставить в строке слова, состоящие только из цифр так, чтобы они были упорядочены по убыванию суммы их цифр
При написании программ использовать нуль–терминированные строки и работать только с типом char *....

Цифры каждого слова перенести в начало слова, изменив порядок следования цифр на обратный
Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru