• Авторизация


цифры прописью в Excel- макрос 20-05-2007 22:53 к комментариям - к полной версии - понравилось!


Автор функции - П.В. Морозов
2. Требуется Excel 97 и выше, а также установленный и интегрированный в него редактор Visual Basic - обычно у всех установлен.
Путь:
Открыть Excel. Выбрать пункт меню: Сервис-Макрос-Редактор Visual Basic.
В нем пункт меню: вставка-модуль.
Откроется Книга1 модуля.
В этот лист вставить (или набрать) текст, который будет идти ниже - в комментарии. Просто выделите его и вставьте целиком, ничего не исправляя.

3. После того, как текст введен, нажать кнопку сохранить. В нижнем выпадающем списке выбрать тип файла: надстройка Microsoft Excel. Имя файла заменить на (например) СуммаПрописью и сохранить в папке Мои документы.
4. Закрыть редактор и Excel.
5. Опять открыть Excel – сервис- надстройки- обзор – найти в Мои документы СуммаПрописью, дважды щелкнуть, убедиться, что напротив надстройки стоит галочка и нажать ОК.
6. Ввести в ячейку, например, D1, число: 789 456 321,85.
Выделить другую ячейку, где вы ходите видеть это число прописью.
Вставка – функция, выбрать категорию Определенные пользователем – там будет одна функция ПРОПИСЬЮ, выбрать ее и нажать ОК. Появится окно ввода аргумента, в поле SorceDigits ввести адрес ячейки D1, где находится число – можно просто выделить эту ячейку, и ее адрес сам появится в поле, потом нажать ОК. Если текст введен правильно, все получится!
Замечания по самому тексту:
1. Пустые строки в тексте и абзацы значения не имеют. Просто так удобнее для визуального восприятия.
2. После каждого русского слова в кавычках, нужно оставлять пробел, чтобы текст не был слитным. Пример “десять “. В слове коп.пробел делать перед ним.
3. После сохранения, если все будет правильно, ключевые слова будут синего цвета. Если будет ошибка – красного. (У меня на домашнем компе «кривой» ексель, и цветом ничего не выделилось, но функция сама действует).
4. Ограничение для функции - миллионы.
5. КОпейки округляются до сотых.
6. Можно поменять рубль, рубля, рублей и коп. на доллары и цент. соответственно. Чтобы не запутаться в двух ПРОПИСЬЮ, во втором тексте в начале и конце текста в слове ПРОПИСЬЮ убрать букву Ю (например, тогда ПРОПИСЬЮ будет для рублей, а ПРОПИСЬ для баксов).
Сама функция в комментарии.
вверх^ к полной версии понравилось! в evernote
Комментарии (12):
Lyuciena 20-05-2007-22:55 удалить
Function ПРОПИСЬЮ (SourceDigits As Currency) As String
Dim STRNG As String, CHAR, Result As String, Prom As String
Dim I, STRNG_len As Long
Dim SourceDigTail As Currency

SourceDigTail = (SourceDigits – Int (SourceDigits)) * 100
SourceDigits = Int (SourceDigits)

STRNG = SourceDigits
STRNG_len = Len (STRNG)
For i = 1 To 9 - STRNG_len Step 1
STRNG = “0” & STRNG
Next i

For i = 9 To 9 - STRNG_len + 1 Step -1
CHAR = Mid (STRNG, i, 1)
If CHAR = “” Then GoTo end_c

If i = 2 Or i = 5 Or i = 8 Then
IF CHAR = “1” Then
CHAR = Mid (STRNG, i, 2)
Select Case CHAR
Case “10”
Prom = “десять ”
Case “11”
Prom = “одиннадцать ”
Case “12”
Prom = “двенадцать ”
Case “13”
Prom = “тринадцать ”
Case “14”
Prom = “четырнадцать ”
Case “15”
Prom = “пятнадцать ”
Case “16”
Prom = “шестнадцать ”
Case “17”
Prom = “семнадцать ”
Case “18”
Prom = “восемнадцать ”
Case “19”
Prom = “девятнадцать ”
End Select
Else ‘ If char Not = 1
Select Case CHAR
Case “0”
Prom = “ ”
Case “2”
Prom = “двадцать ”
Case “3”
Prom = “тридцать ”
Case “4”
Prom = “сорок ”
Case “5”
Prom = “пятьдесят ”
Case “6”
Prom = “шестьдесят ”
Case “7”
Prom = “семьдесят ”
Case “8”
Prom = “восемьдесят ”
Case “9”
Prom = “девяносто ”
End Select
End If
End If
If i = 1 Or i = 4 Or i = 7 Then
Select Case CHAR
Case “0”
Prom = “”
Case “1”
Prom = “сто ”
Case “2”
Prom = “двести ”
Case “3”
Prom = “триста ”
Case “4”
Prom = “четыреста ”
Case “5”
Prom = “пятьсот ”
Case “6”
Prom = “шестьсот ”
Case “7”
Prom = “семьсот ”
Case “9”
Prom = “девятьсот ”
End Select
End If
If i = 3 Or i = 6 Or i = 9 Then

If i = 9 And Mid (STRNG, i - 1, 1) = “1” Then
Result = “рублей ” & Result
GoTo end_c
End If



If i = 3 And Mid (STRNG, i - 1, 1) = “1” Then
Result = “миллионов ” & Result
GoTo end_c
End If



If i = 6 And Mid (STRNG, i - 1, 1) = “1” Then
Result = “тысяч ” & Result
GoTo end_c
End If

Select Case CHAR
Case “0”
Prom = “”
Case “1”
If i = 6 Then
Prom = “одна ”
Else
Prom = “один ”

End If
Case “2”

If i = 6 Then
Prom = “две ”
Else
Prom = “два ”
End If
Case “3”
Prom = “три ”

Case “4”
Prom = “четыре ”
Case “5”
Prom = “пять ”
Case “6”
Prom = “шесть ”
Case “7”
Prom = “семь ”
Case “8”
Prom = “восемь ”
Case “9”
Prom = “девять ”
End Select
End If
Select Case i

Case 3
Select Case CHAR
Case “1”
Result = “миллион ” & Result
Case “2” , “3”, “4”
Result = “миллиона ” & Result
Case “5”, “6”, “7”, “8” , “9”
Result = “миллионов ” & Result
Case “0”
If STRNG_len > 6 Then
Result = “миллионов ” & Result
End If
End Select


Case 6
Select Case CHAR
Case “1”
Result = “тысяча ” & Result
Case “2”, “3”, “4”
Result = “тысячи ” & Result
Case “5”, “6”, “7”, “8” , “9”
Result = “тысяч ” & Result
Case “0”
If STRNG_len > 3 Then
Result = “тысяч ” & Result
End If
End Select

Case 9
Select Case CHAR
Case “1”
Result = “рубль ” & Result
Case “2” , “3”, “4”
Result = “рубля ” & Result
Case “0”, “5”, “6”, “7” , “8” , “9”
Result = “рублей ” & Result
End Select
End Select

Result = Prom & Result

end_c:
Next i

Result = Format(Mid(Result, 1, 1), “>” ) & Mid (Result, 2)

ПРОПИСЬЮ = Result & Format (SourceDigTail, “00”) & “ коп.”

End Function
04-05-2008-22:51 удалить
Работает отлично. Я белорусизировал. Но был пропущен разряд "восемьсот". Не шибко разбираясь в бейсике у себя ошибку исправил .
С уважением
Александр
slabada@tut.by
Lyuciena 05-05-2008-22:22 удалить
А! Точно, пропущен. Спасибо, Александр.
Но принцип же понятен ))
29-05-2009-17:42 удалить
Спасибо за программу отлично работает

Алишер Ташкент.
11-06-2009-14:24 удалить
ПРОПИСЬЮ(1000000) возвращает "Один миллион ТЫСЯЧ рублей 00 коп."

На скорую руку исправил фрагмент:

Case "0"
If STRNG_len > 3 Then
Result = "тысяч " & Result
End If

придав ему вид:


Case "0"
If STRNG_len > 3 And Left(Right(STRNG, 6), 3) <> "000" Then
Result = "тысяч " & Result
End If

Вроде лишнее слово "тысяч" перестало возникать.

Еще хорошо бы в самое начало функции добавить строку:

Application.Volatile

зачем - почитайте в хелпе Excel :)

А вообще - большое спасибо! Пригодилась Ваша разработочка.

С уважением,
Константин, С-Петербург
Lyuciena 18-06-2009-00:55 удалить
Константин, на здоровье )
Только она не моя - автор некий П.В.Морозов. Когда-то я это взяла из какого-то забытого журнала...
25-09-2009-12:45 удалить
Здравствуйте,

когда хочу сохранить модуль, в списке ниже нет формата надстроек....как быть?
19-08-2010-18:42 удалить
При выполнении макроса возникает сообщение: SyntaxError и подсвечивает строку: SourceDigTail = (SourceDigits – Int (SourceDigits)) * 100
Lyuciena 25-08-2010-22:30 удалить
Ребята - я в этом ни фига не понимаю, я не программист. Просто тупо списала как сказано в эксель - и у меня все получилось, поэтому решила поделиться, так как очень удобная штука оказалась.

Спрашивайте у ваших сисадминов - они-то всяко больше в этом разбираются.
25-03-2012-17:39 удалить
Ответ на комментарий Lyuciena # Цифры прописью работает! Исправил все замечания!
Однако скопированный комментарий сразу в Excel не захотел работать! Выдал кучу ошибок по синтаксису!
Сохранил текст в WORDe! Через день снова решил испробовать. Скопировал из WORDa текст и поместил в модуль Excela. Все сразу заработало! При прямом копировании очень много получилось нераспознанных строк и символов, а из WORDa - все нормально!!
Lyuciena 25-03-2012-19:49 удалить
Ну и замечательно, что еще пригождается )
05-05-2013-05:48 удалить
Возникла еще необходимость на украинском языке число прописью, нашел только тут: http://propisu.ru.
У кого нить есть код?


Комментарии (12): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник цифры прописью в Excel- макрос | Lyuciena - Нежная фиалка | Лента друзей Lyuciena / Полная версия Добавить в друзья Страницы: раньше»