Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертация цифр в слова. / 13 сообщений из 13, страница 1 из 1
17.11.2006, 20:53
    #34137943
whoismaikl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
У кого нибудь есть такого рода конвертор в ехеле?
мне надо переводить на латишский но подойдет и Русский
...
Рейтинг: 0 / 0
17.11.2006, 22:29
    #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
19.11.2006, 18:10
    #34139391
whoismaikl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
afiget' ....
Thanks!
...
Рейтинг: 0 / 0
09.03.2007, 15:54
    #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
09.03.2007, 16:12
    #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
Период между сообщениями больше года.
25.01.2013, 12:54
    #38124490
Grecha1983
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Ребят, добрый день. Помогите! У меня вопрос, почему то в итоговой сумме ндс копейка скачет. Это можно устранить. в сумме цифрами допустим 17 а прописью пишет 16, округляет в меньшую сторону
...
Рейтинг: 0 / 0
25.01.2013, 12:59
    #38124502
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Округли с помощью ROUND ДО вывода обе суммы.
...
Рейтинг: 0 / 0
25.01.2013, 14:00
    #38124670
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Сервис-Параметры-Вычисления
Точность, как на экране.
...
Рейтинг: 0 / 0
05.03.2013, 06:02
    #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
05.03.2013, 07:02
    #38174085
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Ozhiесли у меня в документе встречаются суммы разных валют не только рублей,как реализовать. чтобы прописью в нужные ячейки поставлялись нужные валюты.В смысле, по-русски? "Двадцать пять юаней"?
Так добавьте в Пропись() параметр для выбора валюты, а при инициализации массивов рубли()/копейки() - запишите в них нужные словоформы. Я бы вообще сделал опциональный параметр не с указанием валюты, а с указанием набора форм слов, который будет записан в эти два массива...
...
Рейтинг: 0 / 0
05.03.2013, 08:19
    #38174104
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
whoismaiklнадо переводить на латишский
См. здесь
...
Рейтинг: 0 / 0
05.03.2013, 08:20
    #38174105
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Извиняюсь, на дату не посмотрел...
...
Рейтинг: 0 / 0
23.09.2013, 13:12
    #38404589
Батон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация цифр в слова.
Круть!!!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертация цифр в слова. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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