Макросы word сумма прописью

На чтение 5 мин Просмотров 1.5к. Опубликовано 10.03.2021

Содержание

  1. Описание работы в Word
  2. Пример использования
  3. Установка

Описание работы в Word

Данный макрос встраивается в Word после чего Вы с легкостью и без ошибок укажите сумму прописью в любом падеже русского языка. Программа пользуется популярностью у бухгалтеров и экономистов.

После установки шаблона Word, у вас появится дополнительная вкладка меню «VBA-Excel» на которой будет располагаться команда запуска функции (см. рисунок ниже).

Пример использования

После нажатия на кнопке «Сумма прописью» появится диалоговое окно.

В диалоговом окне необходимо указать следующие параметры:

Значение — собственно число (не обязательно в числовом формате), которое необходимо написать прописью.

  1. Именительный (по умолчанию если параметр не указан)
  2. Родительный
  3. Дательный
  4. Винительный
  5. Творительный
  6. Предложный

Тип данных — для добавления после суммы прописью в нужном падеже тип данных

  1. Ничего (по умолчанию если параметр не указан)
  2. Рубли
  3. Доллары США
  4. Евро
  5. Календарные дни
  6. Рабочие дни
  7. Дни
  8. Штуки

Формат вывода — формат, в котором вы хотите выводить результат

  1. 123 (Сто двадцать три) (по умолчанию если параметр не указан)
  2. 123,56 (Сто двадцать три) рубля 56 коп.
  3. 123,56 (Сто двадцать три) рубля 56 копеек
  4. (Сто двадцать три)
  5. Сто двадцать три

Если необходим другой формат вывода, укажите это в заявке — добавим.

Установка

Для того, чтобы программа работала, необходимо установить надстройку. Как это делается читайте тут «Установка надстройки»

Наш сегодняшний материал посвящается всем сотрудникам плановых и договорных отделов :)

Когда заключается новый договор, который написан в Word, в которых фигурирует сумма, хочется что бы минимальными действиями (!) у нас сумма из цифр превращалась в сумму прописью.

И было бы замечательно , если бы она автоматически считала НДС и вписывала это значение тоже прописью.

На данный момент самый простой способ, это открыть любой онлайн сервис (типа сумма-прописью или наш ресурс выделение НДС) вписать туда сумму, скопировать оттуда результат и вставить его Word.

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

Мы будем использовать уже написанный скрипт Дата (день, месяц, год) прописью, который модернизирован для вывода денежных единиц, а также использовать материал, который позволял нам обмениваться данными из Active Directory и Excel Карточка сотрудника Active Directory через Excel

Итак что же нам необходимо сделать?

1. Открываем Word. Идем во вкладку Вид- Макросы

Даже если у нас нет ни одного макроса нажимаем кнопку — Изменить

Открывается редактор VBA

Присоединяем библиотеку jsonlib у вас после всех движений в левой верхней части должно быть подобие вот этой картинки

Что означает подчеркнутое слово Normal? Это говорит нам о том что и класс и макрос записаны в стандартном шаблоне Word Normal.dot(m). То есть при открытии любого файла а также содания нового на этом рабочем месте этот класс и макрос будут загружены автоматически.

Теперь нам надо присвоить какое нибудь сочетание клавиш что бы этот макрос запустить.

Для этого в Word. (показано действие для 2010 офиса)

Файл-Параметры-Настройка ленты -(внизу) Сочетания клавиш- Настройка

Выбираем категорию макросы. В правом поле выбираем наш макрос,

Новое сочетание клавиш — F9. Назначить

Почему F9? Вы сами можете переназанчить горячую клавишу по вызову макроса.

Все , у нас готовый шаблон которым мы можем пользоватся

Пишем Сумма договора составляет 23456.94

мы или сразу нажимаем F9 после набора суммы, или просто курсором отмечаем число которое надо преобразовать и нажимаем F9, это не важно.

результат будет такой

Сумма договора составляет 23456.94 руб. (двадцать три тысячи четыреста пятьдесят шесть рублей девяносто четыре копейки ) в том числе НДС(18%) 3578.18 руб. (три тысячи пятьсот семьдесят восемь рублей восемнадцать копеек )

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

А как считать если у нас НДС не 18% а 10%?

Исправьте только две строки

nds = Val(body) * 18 / 118

замените на nds = Val(body) * 10 / 110

Selection.TypeText Text:=» руб. (» + ff + «) в том числе НДС(18%) » + Format(nds, «###0.00″) + » руб. (» + ff1 + «)»

на Selection.TypeText Text:=» руб. (» + ff + «) в том числе НДС(10%) » + Format(nds, «###0.00″) + » руб. (» + ff1 + «)»

Как можете заметить Selection.TypeText Text — отвечает за вывод текста и что вы уж там напишите, ограничена лишь вашей фантазией.

Если у вас есть какие то вопросы замечания или нужна помощь , то обращатесь.

Раньше при оформлении договоров в word напрягало каждый раз дублировать суммы всех платежей прописью, особенно когда суммы длинные, а платежей много.

Удивился, что это умеет делать автоматом обычная бесплатная программа punto switcher (которая от яндекса) для переключения раскладки клавиатуры. Пользуюсь ей лет 15, но про эту фишку не знал.

Выделяешь цифры, например 12436, жмешь сочетание клавишь и цифры превращается в «двенадцать тысяч четыреста тридцать шесть».

Забавно, но по умолчанию эта функция отключена! Чтобы включить, нужно зайти в настройки, выбрать слева «горячие клавиши» и в перечне напротив строчки «Преобразовать числа в текст» поставить удобное сочетание клавиш.

Зачем было ее так прятать — непонятно.
Тем не менее здорово облегчает жизнь, особенно если суммы часто корректируются и приходится вносить изменения в один и тот же договор много раз.
Если в числе есть запятая, то после целой части добавляется «руб», дробная остается цифрами и после нее добавляется «коп».

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, среднее: 0 из 5)

Поделитесь с друзьями!

Сумма прописью в Word — Как допилить?

Alex_ST

Дата: Понедельник, 28.10.2013, 15:26 |
Сообщение № 1

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Народ, тут понадобилось договора писать, а там сумма прописью…
Можно было бы, конечно, и имеющимися наработками для Excel’я воспользоваться, но я у себя в копилке нашёл, что числа до 999999 можно в текст прямо Вордом перегонять (например, здесь, здесь, здесь, …).
Решил попробовать.
Вот что примерно получилось:[vba]

Код

Sub SumPropWord()
       With Selection
          ‘.Range.Text = Replace(.Range.Text, » «, «»)
          .Fields.Add .Range, Type:=wdFieldEmpty, Text:=»=» & .Range.Text & » *CardText», PreserveFormatting:=False
          .Fields.Update
       End With
End Sub

[/vba]
И всё бы, наверное, и ничего, да вот только триады цифр в документе для читабельности обычно разбиваются пробелом. А с пробелами не пашет.
Попытался тупо заменить пробел на «пустышку» Replace’ом в Selection.Range.Text — не вышло — макрос стал давать ошибку в формуле…
Я объектную модель Ворда практически не знаю. Тыкаю почти наугад по аналогии с Excel’ем :(
Конечно, идеалом было бы допилить макрос так, чтобы он ПОСЛЕ (а не ВМЕСТО) выделенного числа выдавал его же прописью, но это уже не так важно.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STПонедельник, 28.10.2013, 16:33

 

Ответить

Poltava

Дата: Понедельник, 28.10.2013, 18:31 |
Сообщение № 2

Группа: Друзья

Ранг: Форумчанин

Сообщений: 232


Репутация:

50

±

Замечаний:
0% ±


У меня такая конструкция срабатывает нормально
[vba]

Код

Text:=»=» & Replace(.Range.Text, » «, «») & » *CardText»

[/vba]
А вот со вставкой после пока ничего не придумал сам с вердом на Вы

 

Ответить

Alex_ST

Дата: Понедельник, 28.10.2013, 21:04 |
Сообщение № 3

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Poltava, спасибо за совет и попытку помочь.
А со вставкой после подождём, может быть кто-нибудь из более продвинутых в Ворде чем мы откликнется.
А то, глядишь, и сумму прописью от МСН прикрутим чтобы снять ограничения



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STВторник, 29.10.2013, 14:40

 

Ответить

RAN

Дата: Вторник, 29.10.2013, 05:15 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Леш, может я что не так понял?
[vba]

Код

Sub SumPropWord()
    Dim aa#
     With Selection
         aa = CDbl(Replace(Replace(.Range.Text, Chr(160), «»), » «, «»))
         .Range.Text = .Range.Text & » » & MSumProp(aa)
     End With
End Sub
Function MSumProp$(chislo#) ‘Автор MCH (Михаил Ч.), май 2012
Dim rub$, kop$, ed, des, sot, nadc, razr, i&, m$
If chislo >= 1E+15 Or chislo < 0 Then Exit Function

sot = Array(«», «сто «, «двести «, «триста «, «четыреста «, «пятьсот «, «шестьсот «, «семьсот «, «восемьсот «, «девятьсот «)
des = Array(«», «», «двадцать «, «тридцать «, «сорок «, «пятьдесят «, «шестьдесят «, «семьдесят «, «восемьдесят «, «девяносто «)
nadc = Array(«десять «, «одиннадцать «, «двенадцать «, «тринадцать «, «четырнадцать «, «пятнадцать «, «шестнадцать «, «семнадцать «, «восемнадцать «, «девятнадцать «)
ed = Array(«», «один «, «два «, «три «, «четыре «, «пять «, «шесть «, «семь «, «восемь «, «девять «, «», «одна «, «две «)
razr = Array(«триллион «, «триллиона «, «триллионов «, «миллиард «, «миллиарда «, «миллиардов «, «миллион «, «миллиона «, «миллионов «, «тысяча «, «тысячи «, «тысяч «, «рубль «, «рубля «, «рублей «)

rub = Left(Format(chislo, «000000000000000.00»), 15)
kop = Right(Format(chislo, «0.00»), 2)

If CDbl(rub) = 0 Then m = «ноль »
For i = 1 To Len(rub) Step 3
     If Mid(rub, i, 3) <> «000» Or i = Len(rub) — 2 Then
         m = m & sot(CInt(Mid(rub, i, 1))) & IIf(Mid(rub, i + 1, 1) = «1», nadc(CInt(Mid(rub, i + 2, 1))), _
                 des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)) + IIf(i = Len(rub) — 5 And CInt(Mid(rub, i + 2, 1)) < 3, 10, 0))) & _
                 IIf(Mid(rub, i + 1, 1) = «1» Or (Mid(rub, i + 2, 1) + 9) Mod 10 >= 4, razr(i + 1), IIf(Mid(rub, i + 2, 1) = «1», razr(i — 1), razr(i)))
     End If
Next i
MSumProp = UCase(Left(m, 1)) & Mid(m, 2) & kop & » копе» & IIf(kop 10 = 1 Or ((kop + 9) Mod 10) >= 4, «ек», IIf(kop Mod 10 = 1, «йка», «йки»))
End Function

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

anvg

Дата: Вторник, 29.10.2013, 05:52 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

Замечаний:
0% ±


2016, 365

Видимо хочется средствами Word осуществить перевод числа в сумму прописью.
[vba]

Код

Public Sub test3()
      Dim pReg As Object
      Dim numField As Field
      Dim numText As String

              If Selection.Characters.Count > 1 Then
          Set pReg = CreateObject(«VBScript.RegExp»)
          pReg.Global = True: pReg.Pattern = «[^d]+»
          numText = pReg.Replace(Selection.Text, «»)
          If Len(numText) > 0 Then
              Selection.MoveRight Count:=1
              Selection.TypeText » »
              Set numField = Selection.Fields.Add(Selection.Range, wdFieldEmpty, «=» & numText & «*CardText», False)
              numField.Update
          End If
      End If
End Sub

[/vba]

Сообщение отредактировал anvgВторник, 29.10.2013, 05:53

 

Ответить

AndreTM

Дата: Вторник, 29.10.2013, 06:25 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Ну, понятное дело, что средствами Word. Можно и чистыми:
[vba]

Код

With Selection
     .MoveStartWhile «0123456789 » & Chr(160), wdBackward
     .MoveEndWhile «0123456789 » & Chr(160), wdForward
     nValue1 = Val(Replace(Replace(.Text, » «, «»), Chr(160), «»))

           nShift = .MoveEndWhile(«0123456789.,-=», wdForward)
     nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift — 1)), 0)
     .Start = .End
     .TypeText » (»
     .Fields.Add .Range, wdFieldEmpty, «=» & nValue1 & » * CardText * FirstCap», True
     .TypeText » руб. » & Format(nValue2, «00») & » коп.)»
End With

[/vba] :D


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Fairuza

Дата: Вторник, 29.10.2013, 10:46 |
Сообщение № 7

Группа: Проверенные

Ранг: Участник

Сообщений: 57


Репутация:

13

±

Замечаний:
0% ±


А если пробел заменить на неразрывный пробел, тогда код поля *CardText работает

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 13:26 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Народ, спасибо за отзывы.
К сожалению, уже опять меня настиг завал на работе и разбираться совершенно некогда.
А внутренние средства Ворда я для того применил, т.к. была задумка чтобы сумма прописью вводилась макросом как поле, вычисляемое по сумме цифрами, которую можно было бы потом спокойно изменять в ручную (ну как у нас, нормальных :) в Excel’e формула, использующая UDF).

Хотя всё-таки не удержался и проверил вариант от RAN
Андрей! Спасибо большое. Отлично работает!



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 13:36 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

AndreTM,
на строке [vba]

Код

nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift — 1)), 0)

[/vba]даёт инвалид-аргумент при выделенном 123456 на листе :(
[offtop]А объектную модель-то Ворда, оказывается кто-то всё-таки знает…
Столько абсолютно ничего не говорящих мне свойств, методов и параметров в коде![/offtop]



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STВторник, 29.10.2013, 13:36

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 16:28 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Выдалась минутка поковыряться с вариантом, предложенным RAN
Решил, что число прописью лучше вставлять в буфер обмена, а уж пользователь сам потом будет решать, рубли там или юани и куда их вставлять.
Вот что получилось:



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STВторник, 29.10.2013, 16:29

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 17:04 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Хотя, с буфером обмена — это, пожалуй, лишнее.
Лучше будет в скобочках после выделения выводить так:
[vba]

Код

Sub Прописью()   ‘цифры из выделенного текста перевести в число прописью
     Dim NNN
     With CreateObject(«VBScript.RegExp»): .Global = True: .Pattern = «D»: NNN = .Replace(Selection.Range.Text, «»): End With
     If Len(NNN) Then Selection.MoveRight Unit:=wdWord: Selection.Range.Text = » (» & СУМ_ПРОП(NNN) & «) »
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STВторник, 29.10.2013, 17:19

 

Ответить

RAN

Дата: Вторник, 29.10.2013, 21:36 |
Сообщение № 12

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Економный ты наш!
Я понимаю, что тут все преобразуется
[vba][/vba]
Но что, сразу написать
[vba][/vba]
так сильно влом?

Из опыта — долго искал (в большом макросе), почему не работает. Оказалось — преобразовывает не правильно.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANВторник, 29.10.2013, 21:38

 

Ответить

AndreTM

Дата: Вторник, 29.10.2013, 22:18 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

инвалид-аргумент при выделенном 123456 на листе

А если не выделять ничего? Просто курсор поставить «посреди» числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число (и ещё обычно при ручном выделении дефолтный Expand срабатывает, расширяя область выделения по своему разумению).

По ошибке — это Word VBA, гад, всё равно считает в Left(,-1) в IIF() … можно сделать
[vba]

Код

     nValue2 = 0
      If nShift > 1 Then nValue2 = Val(Right(.Text, nShift — 1))

[/vba]

Что касается «сумма вводилась как поле» — она и так вводится в поле. Поэтому, кстати, исходный вариант и предполагал замену текста полем, чтобы число оставалось единственным. А чтобы можно было «менять сумму», не заходя в поле — надо либо текст преобразовать в поле с меткой (закладкой), на которую потом будет ссылаться сумма прописью, либо отслеживать изменение текста и перезаписывать/пересоздавать поле с прописью.
Ещё хочу заметить — .MoveRight Unit:=wdWord сдвинет точку ввода хоть и на конец цифр — но там может стоять разделитель :) Например, сумма записана (как это любят бухи) «123456=00» — тогда что? Да и число может быть «Ноль» (например, остаток суммы оплаты)…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMВторник, 29.10.2013, 22:24

 

Ответить

RAN

Дата: Вторник, 29.10.2013, 22:33 |
Сообщение № 14

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Интересная тема, жаль не вовремя (для меня) начатая. :(
Не забыть-бы, когда понадобиться.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 23:04 |
Сообщение № 15

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Андрей,
я специально сделал NNN безразмерным чтобы потом ему же можно было присваивать и текстовые значения:[vba]

Код

NNN = IIf(Err, Err.Description, СУМ_ПРОП(NNN)

[/vba]
Да и вообще я потом по-другому сделал без обработчика ошибок.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Вторник, 29.10.2013, 23:08 |
Сообщение № 16

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Не забыть-бы, когда понадобиться

А ты на ус намотай (или на хвост) :)



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

RAN

Дата: Среда, 30.10.2013, 01:00 |
Сообщение № 17

Группа: Друзья

Ранг: Экселист

Сообщений: 5645


Быть или не быть, вот в чем загвоздка!

 

Ответить

Alex_ST

Дата: Среда, 30.10.2013, 09:27 |
Сообщение № 18

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

А если не выделять ничего? Просто курсор поставить «посреди» числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число

Андрей, как раз этот вариант скорее всего не прокатит, т.к. бухгалтеры чаще всего цифры разделяют пробелами на триады.
Тогда в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333, в пропись будет преобразовано только 222.
Так что как раз пользователь и должен напрячь чуть-чуть извилины и выделить именно всё то, что он хочет преобразовать.
В моём крайнем примере регулярка как раз это и делает — из выделенного фрагмента удаляет все символы кроме цифр.

Ну а по поводу

Например, сумма записана (как это любят бухи) «123456=00» — тогда что?

так такое же на практике не может понадобиться никогда (ну не придёт же в голову никому переводить в пропись формулы).



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

AndreTM

Дата: Среда, 30.10.2013, 15:48 |
Сообщение № 19

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333

Пробовал? Что получилось? (Вернее, что не получилось? И что при этом за число оказалось в коде поля?) yes

не придёт же в голову никому переводить в пропись формулы

hands То есть? Вот передо мною лежит договор аренды:

Цитата

… всего в сумме 12489=00 (Двенадцать тысяч четыреста восемьдесят девять рублей 00 копеек) ежемесячно, включая НДС…

Это формула? Этого не существует, ибо такой текст невозможен?


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMСреда, 30.10.2013, 15:58

 

Ответить

Alex_ST

Дата: Среда, 30.10.2013, 19:22 |
Сообщение № 20

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Пробовал? Что получилось?

Не пробовал, т.к. выяснилось, что 999 999 всё равно мало.
А должно было получиться? Ну ты бы хоть полный текст процедуры выложил тогда, а не фрагмент чтобы его можно было просто не заморачиваясь началом и концом процедуры проверить. ??? Это что, у вас в бюстгалтерии так принято: вместо запятой в качестве разделителя рублей и копеек = использовать?
Уж сколько разных договоров из разных мест видел, а такого — нет!



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STСреда, 30.10.2013, 19:23

 

Ответить

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function MSumProp$(chislo#) 'Автор MCH (Михаил Ч.), май 2012
Dim rub$, kop$, ed, des, sot, nadc, razr, i&, m$
If chislo >= 1E+15 Or chislo < 0 Then Exit Function
 
sot = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
des = Array("", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
nadc = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
ed = Array("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ", "", "одна ", "две ")
razr = Array("триллион ", "триллиона ", "триллионов ", "миллиард ", "миллиарда ", "миллиардов ", "миллион ", "миллиона ", "миллионов ", "тысяча ", "тысячи ", "тысяч ", "рубль ", "рубля ", "рублей ")
 
rub = Left(Format(chislo, "000000000000000.00"), 15)
kop = Right(Format(chislo, "0.00"), 2)
 
If CDbl(rub) = 0 Then m = "ноль "
For i = 1 To Len(rub) Step 3
    If Mid(rub, i, 3) <> "000" Or i = Len(rub) - 2 Then
        m = m & sot(CInt(Mid(rub, i, 1))) & IIf(Mid(rub, i + 1, 1) = "1", nadc(CInt(Mid(rub, i + 2, 1))), _
                des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)) + IIf(i = Len(rub) - 5 And CInt(Mid(rub, i + 2, 1)) < 3, 10, 0))) & _
                IIf(Mid(rub, i + 1, 1) = "1" Or (Mid(rub, i + 2, 1) + 9) Mod 10 >= 4, razr(i + 1), IIf(Mid(rub, i + 2, 1) = "1", razr(i - 1), razr(i)))
    End If
Next i
MSumProp = UCase(Left(m, 1)) & Mid(m, 2) & kop & " копе" & IIf(kop  10 = 1 Or ((kop + 9) Mod 10) >= 4, "ек", IIf(kop Mod 10 = 1, "йка", "йки"))
End Function

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

Основная масса документов, которую приходится заполнять сотрудникам предприятий — это так называемая «Первичка», или первичные учетные документы (приходные кассовые ордера, квитанции, товарные накладные, счета на оплату и так далее). Правила работы с документами первичной отчетности регламентируются Федеральным законом «О бухгалтерском учете». Многие документы, формы которых утверждены постановлениями Госкомстата РФ содержат не только строки с указанием сумм, но и строки для расшифровки этих сумм прописью, при этом расшифровка является обязательной.

Наряду с бухгалтерскими существуют и другие документы, где присутствует расшифровка суммы, например договор, доверенность или письмо. Порядок расшифровки суммы, указанной в договоре или доверенности Гражданским Кодексом РФ не регламентируется, но правила написания сумм прописью являются общими для всех документов.

Правила написания расшифровки сумм прописью

1. Сначала указывается сумма цифрами, затем эта сумма повторяется прописью;

2. сумма прописью указывается в именительном падеже, при этом прописью указывается только та часть суммы, которая выражена в рублях, копейки обозначаются цифрами;

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

Надстройка для преобразования числа в текст прописью в Word

Написание расшифровок сумм прописью в бухгалтерских документах, как правило уже автоматизировано в системах учета финансово-хозяйственной деятельности таких как 1-С, SAP ERP и др. Если же какие-то документы формируются в текстовом редакторе Microsoft Word, при этом в документах предусмотрены поля для расшифровки сумм прописью, то автоматизировать их написание можно при помощи надстройки для Word (аналогичная надстройка для Excelаналогичная надстройка для Excel).

Надстройка позволяет быстро преобразовать число в текст прописью, для этого нужно выделить число, запустить макрос, при необходимости выбрать нужную валюту (по умолчанию установлены рубли) и нажать ОК. Сумма прописью формируется в соответствии с вышеперечисленными правилами и вставляется сразу после выделенного числового значения.

CompleteSolutionскачать надстройку для преобразования числа в текст прописью

kak preobrazovat chislo v tekst propisyu

На выбор пользователя доступны несколько валют: рубли, доллары, евро, гривны и предусмотрен режим «без валюты», когда вместо названия валют прописываются слова «целые» и «сотые» (например, Сорок четыре тысячи шестьсот двадцать целых, 00 сотых). При выборе опции «Все прописью» та часть числа, которая находится после запятой, также прописывается прописью.

Кроме того в некоторых случаях при формировании документов в Word можно автоматизировать их заполнение.

Другие материалы по теме:

Понравилась статья? Поделить с друзьями:
  • Макросы word как использовать
  • Макросы word для формул
  • Макросы word для таблица
  • Макросы word для таблиц
  • Макросы word для обхода антиплагиата