Найти в Дзене

Сумма прописью

Как сделать сумму прописью в Excel? Простой способ - с помощью макросов. Сложный - с помощью формул. Попробуем оба.
В обоих случаях нам нужно понимать с каким масштабом цифр мы работаем. До ста, до тысячи, до миллиона, до миллиарда и так далее.
Без макросов
В демонстрационных целях я сделаю формулу, которая преобразует в текст числа меньше миллиона. В принципе, с таким же подходом можно ее
Оглавление

Как сделать сумму прописью в Excel? Простой способ - с помощью макросов. Сложный - с помощью формул. Попробуем оба.

В обоих случаях нам нужно понимать с каким масштабом цифр мы работаем. До ста, до тысячи, до миллиона, до миллиарда и так далее.

Без макросов

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

Приготовьтесь, формула будет большая.

=IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=1;"сто ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=2;"двести ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=3;"триста ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=4;"четыреста ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=5;"пятьсот ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=6;"шестьсот ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=7;"семьсот ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=8;"восемьсот ";IF(QUOTIENT(nm;100000)-QUOTIENT(nm;1000000)*10=9;"девятьсот ";)))))))))&IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=2;"двадцать ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=3;"тридцать ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=4;"сорок ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=5;"пятьдесят ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=6;"шестьдесят ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=7;"семьдесят ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=8;"восемьдесят ";IF(QUOTIENT(nm;10000)-QUOTIENT(nm;100000)*10=9;"девяносто ";))))))))&
IF(AND(QUOTIENT(nm;1000)-QUOTIENT(nm;100000)*100<20;QUOTIENT(nm;1000)-QUOTIENT(nm;100000)*100>9); IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=0;"десять";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=1;"одиннадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=2;"двенадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=3;"тринадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=4;"четырнадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=5;"пятнадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=6;"шестнадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=7;"семнадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=8;"восемнадцать";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=9;"девятнадцать";))))))))));
IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=0;"";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=1;"одна";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=2;"две";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=3;"три";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=4;"четыре";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=5;"пять";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=6;"шесть";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=7;"семь";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=8;"восемь";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=9;"девять";))))))))))
)&IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=0;"";IF(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=1;" тысяча ";IF(OR(QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=2;QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=3;QUOTIENT(nm;1000)-QUOTIENT(nm;10000)*10=4);" тысячи "; " тысяч ")))

&IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=1;"сто ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=2;"двести ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=3;"триста ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=4;"четыреста ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=5;"пятьсот ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=6;"шестьсот ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=7;"семьсот ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=8;"восемьсот ";IF(QUOTIENT(nm;100)-QUOTIENT(nm;1000)*10=9;"девятьсот ";)))))))))&IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=2;"двадцать ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=3;"тридцать ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=4;"сорок ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=5;"пятьдесят ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=6;"шестьдесят ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=7;"семьдесят ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=8;"восемьдесят ";IF(QUOTIENT(nm;10)-QUOTIENT(nm;100)*10=9;"девяносто ";))))))))&
IF(AND(nm-QUOTIENT(nm;100)*100<20;nm-QUOTIENT(nm;100)*100>9); IF(nm-QUOTIENT(nm;10)*10=0;"десять";IF(nm-QUOTIENT(nm;10)*10=1;"одиннадцать";IF(nm-QUOTIENT(nm;10)*10=2;"двенадцать";IF(nm-QUOTIENT(nm;10)*10=3;"тринадцать";IF(nm-QUOTIENT(nm;10)*10=4;"четырнадцать";IF(nm-QUOTIENT(nm;10)*10=5;"пятнадцать";IF(nm-QUOTIENT(nm;10)*10=6;"шестнадцать";IF(nm-QUOTIENT(nm;10)*10=7;"семнадцать";IF(nm-QUOTIENT(nm;10)*10=8;"восемнадцать";IF(nm-QUOTIENT(nm;10)*10=9;"девятнадцать";))))))))));
IF(nm-QUOTIENT(nm;10)*10=0;"";IF(nm-QUOTIENT(nm;10)*10=1;"один";IF(nm-QUOTIENT(nm;10)*10=2;"два";IF(nm-QUOTIENT(nm;10)*10=3;"три";IF(nm-QUOTIENT(nm;10)*10=4;"четыре";IF(nm-QUOTIENT(nm;10)*10=5;"пять";IF(nm-QUOTIENT(nm;10)*10=6;"шесть";IF(nm-QUOTIENT(nm;10)*10=7;"семь";IF(nm-QUOTIENT(nm;10)*10=8;"восемь";IF(nm-QUOTIENT(nm;10)*10=9;"девять";))))))))))
)&IF(nm=0;"ноль";)

Здесь nm - это ссылка на число заданная с помощью менеджера имен:

Но вместо nm вы можете использовать ссылку на другую ячейку. Формула разбита на несколько частей, чтобы легче было читать, и считается по разрядам. Для этого используем функцию QUOTIENT (ЧАСТНОЕ), которая возвращает целочисленный остаток числа при делении. Первая половина формулы считает тысячи, затем добавляет слово "тысяч, тысяча, тысячи", в соответствии с числом. Вторая половина формулы считает сотни, десятки и единицы, отдельно обрабатываются исключения - от 10 до 19.

Чтобы расширить формулу для чисел до миллиарда, нужно скопировать первую часть формулы (подчеркнутую), добавить в каждой формуле QUOTIENT по три нуля, заменить "тысяч, тысяча, тысячи" на миллионы, соответсвенно, и вставить обратно в формулу перед частью про тысячи.

Нужно заметить, что даже в случае с числами до миллиона, Excel уже начинает подтупливать при редактировании формулы.

С макросами

Не будем изобретать велосипед, есть множество фрагментов кода, который преобразует число в сумму прописью (и добавляет еще рубли или гривные, или что еще). Воспользуемся одним из них. Откроем редактор Visual Basic for Applications, нажав Alt+F11 и импортируем модуль с файлом (все файлы будут доступны в конце статьи).

Новый файл добавляется в раздел модули. Проверим, как все работает. Переходим в таблицу и пишем в формуле:

=СуммаПрописью(A1)

или

=СуммаПрописьюГривны(A1)

или такие же формулы для долларов и евро.

Сумма прописью
Сумма прописью

Вот и готово! Не забудьте только сохранить файл как .xlsm, иначе макросы не сохранятся.

Окно сохранения файла
Окно сохранения файла

Вы можете скачать все файлы (книга без макросов, книга с макросами и отдельно файл sumprop.bas) по ссылке: https://yadi.sk/d/dEJeFT2fIY-b8w?w=1