powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертация цифр в слова.
13 сообщений из 13, страница 1 из 1
Конвертация цифр в слова.
    #34137943
whoismaikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У кого нибудь есть такого рода конвертор в ехеле?
мне надо переводить на латишский но подойдет и Русский
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #34138024
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не мое...
Код: 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.
Attribute VB_Name = "Module1"
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 (Бабиков Валерий Анатольевич)
' если параметр Показывать_ноль_копеек = ЛОЖЬ, _
  то текст "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 ' проверка условий
    Пропись = "Cумма выходит за границы допустимого диапазона (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

Private 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
    
Private 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


...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #34139391
whoismaikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afiget' ....
Thanks!
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #34380884
Lenus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа! ктонить знает как это можно использовать?

TaranagaНе мое...
Код: 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.
Attribute VB_Name = "Module1"
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 (Бабиков Валерий Анатольевич)
' если параметр Показывать_ноль_копеек = ЛОЖЬ, _
  то текст "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 ' проверка условий
    Пропись = "Cумма выходит за границы допустимого диапазона (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

Private 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
    
Private 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


...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #34380942
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lenus

1. Создаем новую книгу Excel
2. "Запускаем" редактор VBA (Сервис > Макрос > Редактор Visual Basic) или (Alt+F11)
3. Добавляем обычный модуль (не модуль класса) к проекту (Insert > Module)
4. Копируем в него код из поста Taranaga
5. Удаляем первую строку: Attribute VB_Name = "Module1"
6. Возвращаемся на рабочий лист и в ячейку, например, A1 вводим число (пусть 165,14)
7. В ячейку B1 вводим формулу =Пропись(A1) (либо вручную, либо с помощью мастера функций. Нужная функция будет находиться в категории "Определенные пользователем"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Конвертация цифр в слова.
    #38124490
Grecha1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, добрый день. Помогите! У меня вопрос, почему то в итоговой сумме ндс копейка скачет. Это можно устранить. в сумме цифрами допустим 17 а прописью пишет 16, округляет в меньшую сторону
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38124502
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Округли с помощью ROUND ДО вывода обе суммы.
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38124670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервис-Параметры-Вычисления
Точность, как на экране.
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38174073
Ozhi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaranagaНе мое...
Код: vbnet
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.
Attribute VB_Name = "Module1"
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 (Бабиков Валерий Анатольевич)
' если параметр Показывать_ноль_копеек = ЛОЖЬ, _
  то текст "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 ' проверка условий
    Пропись = "Cумма выходит за границы допустимого диапазона (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

Private 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
    
Private 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





спасибо работает, но есть нюанс. подскажите. если у меня в документе встречаются суммы разных валют не только рублей,как реализовать. чтобы прописью в нужные ячейки поставлялись нужные валюты. рубли. юани доллары итд. для начала хотя бы 2 валюты рубли и что то....заранее спасибо
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38174085
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozhiесли у меня в документе встречаются суммы разных валют не только рублей,как реализовать. чтобы прописью в нужные ячейки поставлялись нужные валюты.В смысле, по-русски? "Двадцать пять юаней"?
Так добавьте в Пропись() параметр для выбора валюты, а при инициализации массивов рубли()/копейки() - запишите в них нужные словоформы. Я бы вообще сделал опциональный параметр не с указанием валюты, а с указанием набора форм слов, который будет записан в эти два массива...
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38174104
Фотография Serge 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whoismaiklнадо переводить на латишский
См. здесь
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38174105
Фотография Serge 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, на дату не посмотрел...
...
Рейтинг: 0 / 0
Конвертация цифр в слова.
    #38404589
Батон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Круть!!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертация цифр в слова.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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