Сумма прописью в Excel и Google Таблицах
Для одной суммы используйте калькулятор. Столбец в Excel или Google Таблицах обработает функция, обновляющая пропись вслед за числом.

Для одной суммы используйте калькулятор. Столбец в Excel или Google Таблицах обработает функция, обновляющая пропись вслед за числом.

Представьте счёт на 1 523,07 ₽: рядом с цифрами требуется «Одна тысяча пятьсот двадцать три рубля 07 копеек». На одной строке проще проверить результат глазами и вставить его в документ. Когда таких строк десятки, хочется формулу, которая обновит слова вслед за суммой. Ниже есть оба пути, готовые файлы с кодом и набор чисел, на которых легко поймать неверное окончание или потерянный ноль.
В статье вы узнаете:
Один договор или накладная. Введите итоговую сумму в калькулятор суммы прописью, скопируйте текст и вставьте в нужное поле. Это занимает меньше времени, чем настройка макроса. Но скопированная фраза больше не связана с ячейкой: если число изменится, её придётся получить заново.
Повторяющиеся строки в настольном Excel. Добавьте в книгу пользовательскую функцию VBA, то есть небольшой код, который работает как формула. В B2 введите =RUBWORDS(A2) и протяните формулу вниз. При изменении A2 текст в B2 пересчитается. Книгу нужно сохранить в формате .xlsm, иначе код не останется внутри.
Повторяющиеся строки в Google Таблицах. Добавьте функцию Apps Script в саму таблицу. Для одной строки формула такая же: =RUBWORDS(A2). Для большого столбца можно передать диапазон одной формулой =RUBWORDS(A2:A100), если ячейки под результатом пусты. Скрипт вернёт столбец готовых фраз.
У Excel в браузере есть важная граница: он открывает книгу с VBA, но не создаёт, не редактирует и не выполняет такой макрос. Если работаете только в браузере Microsoft, используйте разовый перевод или откройте книгу в настольном Excel. Надпись «Excel» на вкладке браузера не делает VBA доступным.
Пусть в A2 хранится числовое значение 1523,07, а в B2 его текстовая запись: «Одна тысяча пятьсот двадцать три рубля 07 копеек». Это два разных типа данных. Сумму в A2 можно складывать, умножать и округлять. Текст в B2 удобно вставлять в документ, но складывать такие фразы уже бессмысленно. Не заменяйте исходное число словами: держите их в соседних столбцах, чтобы видеть расхождение.
Формат ячейки решает другую задачу. Он может показать 1523,07 как 1 523,07 ₽ или 1 523,07 руб., но не составит русскую фразу с тысячами, рублями и копейками. Функции TEXT и DOLLAR тоже меняют представление цифр. В Excel есть BAHTTEXT, однако она создаёт запись тайских батов, а не рублей. Переключение языка интерфейса или региональных настроек не превращает её в русскую пропись.
Для нашей задачи зафиксируем один формат результата: рубли словами, копейки двумя цифрами и подходящим словом. Поэтому 1,05 станет «Один рубль 05 копеек», а 1,50 или 1,5 после приведения суммы к копейкам дадут «Один рубль 50 копеек». Если бланк требует копейки словами, валюту без копеек или сумму в косвенном падеже, эти функции не подойдут без переработки.
| Если у вас | Что открыть | Что проверить |
|---|---|---|
| Одна итоговая сумма | Калькулятор eCalc | После правки числа скопировать фразу заново |
| Столбец в настольном Excel | Книгу с VBA-функцией | Формат .xlsm и числовые ячейки |
| Столбец в Google Таблицах | Таблицу с Apps Script | Свободные ячейки под результатом массива |
Создайте небольшую копию своей книги для проверки. Положите в A2 число 1523,07. Если вы видите в строке формул апостроф перед суммой или значение выровнено как текст, сначала превратите его в число: пользовательская функция рассчитана на числовую ячейку. Обычное отображение с пробелом между тысячами не мешает, если под ним хранится число.
Откройте редактор VBA в настольном Excel: в Windows нажмите Alt+F11, на Mac Fn+Option+F11. Если сочетание не сработало, откройте вкладку «Разработчик» и выберите Visual Basic; скрытую вкладку можно включить в настройках ленты. В окне редактора выделите свою книгу слева и выберите Insert → Module («Вставка» → «Модуль»). Откройте код функции RUBWORDS для Excel, скопируйте его целиком и вставьте в появившееся окно модуля. Затем сохраните книгу как «Книга Excel с поддержкой макросов» (.xlsm). При сохранении в .xlsx VBA-код теряется.
Вернитесь на лист и введите в B2 =RUBWORDS(A2). Результат должен быть таким: «Одна тысяча пятьсот двадцать три рубля 07 копеек». Измените A2 на 1000: B2 станет «Одна тысяча рублей 00 копеек». После этой короткой проверки протяните формулу по нужным строкам. В Excel каждая ячейка B обращается к своему соседу A.
Макросы могут выполнять произвольный код, поэтому Excel ограничивает их запуск. Не включайте все макросы глобально ради одной книги и не копируйте случайную надстройку из поиска. Код здесь небольшой и открытый: можно прочитать его перед вставкой. Если организация запрещает VBA политикой безопасности, обойти запрет «магической формулой» не получится; используйте ручной перевод или согласованный корпоративный способ.
Код принимает неотрицательные числовые суммы до 999 999 999 999,99 с точностью до копейки. Пустая ячейка даёт пустой результат. Текст вместо числа, отрицательное значение, сумма вне диапазона или, например, 1,005 без предварительного округления приводят к #ЗНАЧ! (#VALUE! в англоязычном Excel). Незаметный шум хранения чисел компьютер обычно допускает, но половину копейки он не угадывает. Так ошибка остаётся заметной, а не попадает в документ как правдоподобная неверная фраза.
Откройте нужную Google Таблицу и выберите «Расширения» → «Apps Script». В открывшемся редакторе вставьте код RUBWORDS для Google Таблиц и сохраните проект. В таблице положите число 1523,07 в A2, а в B2 введите =RUBWORDS(A2). После расчёта появится та же фраза, что в Excel. Имя функции не зависит от языка интерфейса; название «Apps Script» может оставаться английским.
Для списка сумм можно поставить в B2 =RUBWORDS(A2:A100). Функция обработает диапазон за один вызов и заполнит результаты вниз. Перед этим освободите B3:B100: если там есть значения, таблица не сможет развернуть массив. В отличие от Excel-версии, скрипт специально умеет принимать двумерный диапазон. Для нескольких строк также работает обычное протягивание =RUBWORDS(A2), но десятки отдельных вызовов могут считать медленнее одной формулы с диапазоном.
Связь с исходной ячейкой важна. Передавайте A2 прямо в формулу, и при изменении числа функция получит новое значение. Скрипт считает только переданный аргумент и возвращает текст в ячейку результата; ему не нужен доступ к почте, диску или другим таблицам. Чистая пользовательская функция такого типа не запрашивает разрешения к личным данным. Если сторонняя надстройка просит широкие разрешения, это уже другой способ работы, не требующийся для примера.
Функция привязана к той таблице, куда вы добавили код. Если скопировать только отдельную ячейку с формулой в чужую таблицу, там может появиться ошибка неизвестной функции: вместе с формулой не переехал скрипт. Создайте копию всей таблицы с привязанным проектом или добавьте код в другую таблицу отдельно. У пользовательских функций Google есть ограничения времени и количества вызовов, поэтому для больших списков мы предусмотрели обработку диапазона сразу.
Для целого количества рублей нужны три формы: 1 рубль, 2 рубля, 5 рублей. У 21 и 22 повторяются окончания 1 и 2: 21 рубль, 22 рубля. Но 11, 12, 13 и 14 перебивают правило последней цифры: 11 рублей, 12 рублей, 114 рублей. Функция смотрит сначала на последние две цифры, а потом на последнюю.
Копейки подчиняются такой же схеме: 01 копейка, 02 копейки, 05 копеек, 11 копеек, 21 копейка. Две цифры в начале здесь не просто украшение. В документе 05 нельзя незаметно спутать с 50; слово при этом согласуется с числом пять. Нули в тексте сохраняет сама функция, а не формат исходной ячейки.
Тысячи добавляют ещё одно правило: эта группа женского рода. Поэтому 1000 записывается «одна тысяча», 2000 как «две тысячи», 5000 как «пять тысяч». Миллион и миллиард мужского рода: «один миллион», «два миллиарда». Прописи недостаточно выбрать только правильное слово «рубль»: сначала нужно перевести каждую группу из трёх цифр, назвать её разряд и выбрать форму для разряда.
Возьмём 1 021 004,05. Отделите копейки 05, затем читайте рубли тройками справа налево: 1 | 021 | 004. Первая группа даёт «один миллион». Средняя, несмотря на начальный ноль, означает «двадцать одна тысяча». Последняя даёт «четыре рубля». Соберите фразу: «Один миллион двадцать одна тысяча четыре рубля 05 копеек». Ноль перед 21 не произносится, а 05 в копейках остаётся двумя цифрами. Этот пример одновременно проверяет мужской и женский род, пропущенные сотни и слово после четвёрки.
Подробно про три формы существительного после числа есть отдельная статья «Один год, два года, пять лет». Здесь важно применить правило дважды: к рублям и к копейкам, а ещё отдельно к тысячам, миллионам и миллиардам.
Не начинайте с большой ведомости. Введите контрольные значения в A2:A16, поставьте рядом формулу и сравните результат. В таблице ниже достаточно намеренно неудобных случаев: ноль, окончания 1/2/5, «подростковые» 11–14, женский род у тысяч и ведущий ноль у копеек.
| Сумма в A | Ожидаемый текст в B |
|---|---|
| 0 | Ноль рублей 00 копеек |
| 1 | Один рубль 00 копеек |
| 2 | Два рубля 00 копеек |
| 5 | Пять рублей 00 копеек |
| 11 | Одиннадцать рублей 00 копеек |
| 21 | Двадцать один рубль 00 копеек |
| 22 | Двадцать два рубля 00 копеек |
| 0,01 | Ноль рублей 01 копейка |
| 0,02 | Ноль рублей 02 копейки |
| 0,05 | Ноль рублей 05 копеек |
| 0,11 | Ноль рублей 11 копеек |
| 1000 | Одна тысяча рублей 00 копеек |
| 2000 | Две тысячи рублей 00 копеек |
| 1523,07 | Одна тысяча пятьсот двадцать три рубля 07 копеек |
| 1021004,05 | Один миллион двадцать одна тысяча четыре рубля 05 копеек |
Если 1, 2 и 5 работают, но 11 выходит как «одиннадцать рубль», ошибка в исключении 11–14. Если 1000 даёт «один тысяча», перепутан род группы тысяч. Если 1,05 превращается в 50 копеек, потеряно место нуля после запятой. Ошибку ищут по тому, какой тип контрольного числа сломался, а не по одной длинной фразе.
Ячейка может выглядеть как 1,00 ₽, но хранить 1,0049. Формат с двумя знаками меняет экран, не исправляет исходное число. Наши функции остановятся на сумме вроде 1,005 и не будут угадывать, как округлить половину копейки; совсем малый шум хранения числа они допускают. Сначала получите итоговую сумму по правилам своей задачи и округлите её до сотых в отдельной числовой ячейке, затем передайте эту ячейку в RUBWORDS. Например, если A2 содержит 1,005, в русском Excel B2 может содержать =ОКРУГЛ(A2;2), а C2 =RUBWORDS(B2). В Google Таблицах названия встроенных функций и разделитель аргументов зависят от языковых настроек, поэтому в подсказке к функции найдите ОКРУГЛ или ROUND и укажите два знака. Для бухгалтерских данных правило округления проверьте отдельно от функции прописи.
Другой случай проще и встречается чаще. Введите 1,5 в числовую ячейку: это один рубль пятьдесят копеек, то есть 1,50. Введите 1,05: это один рубль пять копеек. Нельзя «дописать ноль для красоты» справа или слева от дробной части без понимания, какое число было исходным. Если сумму импортировали из CSV, проверьте ещё разделитель десятичной части и то, что ячейка стала числом, а не строкой.
Представьте, что счёт сначала был на 1523,07, вы скопировали текст и вставили его в договор. Потом цену исправили на 1524,07. Формула в таблице пересчиталась, но вставленный абзац в договоре сам не обновится. Перед отправкой документа сравните три места: итоговую числовую ячейку, соседнюю пропись и готовый файл. Лучше делать это после последнего изменения суммы, а не после первой версии счёта.
Если в документе есть НДС, скидка или несколько строк, сначала проверьте сам итоговый расчёт. Пропись честно повторит ошибочное число, если дать ей ошибочную ячейку. Функция не проверяет ставку налога, валюту, реквизиты или формулировку конкретного договора. Иногда бланк просит «00 копеек», иногда отдельное поле только для рублей, иногда текст внутри скобок. Переносите готовую фразу в формат своего документа, не рассчитывая, что любой шаблон принимает одну запись.
Для разового результата здесь снова полезна сумма прописью на eCalc: введите уже сверенный числовой итог, нажмите на готовый текст и вставьте его в документ. Это особенно удобно там, где макросы запрещены или книга нужна только для подсчёта, а не для массовой подготовки бумаг.
Excel пишет #ИМЯ? или #NAME?. Проверьте, что код вставлен в обычный модуль именно этой открытой книги, имя функции написано RUBWORDS, файл сохранён как .xlsm, а его макросы разрешены политикой вашей организации. В Excel для браузера VBA-функция не выполнится: откройте книгу в настольном приложении.
Excel пишет #ЗНАЧ!. Сначала посмотрите на A2: там может быть текст с символом валюты, отрицательная сумма, дробная копейка или число за пределом функции. Уберите обозначение валюты из значения и задайте его форматом ячейки; сумму с долями копейки округлите отдельной формулой.
Google Таблицы не знают RUBWORDS. Проверьте, что скрипт сохранён в проекте именно этой таблицы и имя функции не изменилось. Если формулу перенесли в другой файл, скопируйте туда код или всю таблицу целиком. Если функция с диапазоном жалуется на занятые ячейки, освободите столбец результата под ним.
Слова не меняются после исправления суммы. Убедитесь, что аргумент формулы ссылается на ячейку с новым числом, например =RUBWORDS(A2), а не на число, набранное прямо в формуле. Вставленная в договор строка тоже не пересчитывается: это уже обычный текст.
Для одного документа возьмите итоговое число и получите текст в калькуляторе. Для колонок используйте собственную функцию в настольном Excel или Google Таблицах, предварительно проверив её на 0, 1, 2, 5, 11, тысячах и копейках с нулём. Затем перенесите результат в документ и ещё раз сопоставьте его с цифрами. Машина хорошо повторяет правило; ответственность за исходную сумму и окончательный бланк остаётся у человека.
Напишите своё мнение, комментарий или предложение.