Работа с финансовыми документами, такими как счета-фактуры, накладные или договоры, часто требует перевода числовых значений в текстовый формат. В отличие от текстовых процессоров, Microsoft Excel изначально не имеет встроенной кнопки для мгновенного перевода цифр в слова. Пользователи часто сталкиваются с необходимостью вручную прописывать итоговые суммы, что не только отнимает время, но и повышает риск возникновения опечаток при вводе данных.
К счастью, существует несколько проверенных способов автоматизировать этот процесс. Вы можете использовать сложные вложенные формулы, создать собственный макрос на языке VBA или воспользоваться готовыми надстройками. Выбор конкретного метода зависит от вашей версии табличного редактора, частоты использования функции и уровня доступа к файлу. В этой статье мы разберем все актуальные варианты, чтобы вы могли выбрать наиболее удобный для вашей ситуации.
Особенностью русского языка является сложная грамматическая структура числительных, которая меняется в зависимости от рода, числа и падежа. Именно поэтому стандартные функции форматирования ячеек здесь не работают так, как при отображении дат или валют. Для корректного склонения слов "рубль", "копейка" и числительных в русском языке требуется специализированный алгоритм, который мы и реализуем ниже.
Почему в Excel нет встроенной функции для суммы прописью
Многие пользователи ошибочно полагают, что функция для вывода суммы словами скрыта в глубоких настройках программы. На самом деле, локализация табличного процессора влияет на формат дат, разделителей и валют, но не добавляет лингвистических функций. Разработчики из Microsoft не включили этот инструмент в базовый набор, так как правила написания числительных сильно различаются в разных языках.
В англоязычной версии ситуация аналогичная, хотя грамматика там проще. Однако для русскоязычного пользователя отсутствие такой возможности создает дополнительные сложности при подготовке официальных документов. Стандартный формат ячейки 0 "руб. 00 коп." лишь добавляет текст к числу, но не меняет его сущность. Число остается числом, и математические операции с ним возможны, но визуально оно не становится словом.
Существует миф, что в новых версиях Office 365 или Excel 2021 эта функция появилась автоматически. Это не так. Даже в самых современных сборках вам придется прибегать к одному из трех методов: формула, макрос или надстройка. Каждый из них имеет свои преимущества и недостатки, которые мы рассмотрим далее.
Способ 1: Использование готовой формулы для перевода чисел
Самый универсальный метод, не требующий прав доступа к макросам, — это использование сложной формулы. Она может занимать несколько строк и включать в себя множество функций для обработки каждого разряда числа. Суть метода заключается в том, чтобы разбить число на тысячи, миллионы и единицы, а затем подобрать к каждому остатку соответствующее слово.
Ниже приведена формула, которую можно скопировать и вставить в ячейку. Она работает с целыми числами до 999 триллионов. Для работы формулы необходимо, чтобы число находилось в ячейке A1. Обратите внимание, что длина формулы велика, поэтому вставлять её лучше через буфер обмена, чтобы не повредить синтаксис.
=ЕСЛИ(A1<0;"минус ";"")&INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/1000000000000);10)+1)&INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/100000000000);10)+1)&INDEX({"";"десять ";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};MOD(INT(A1/10000000000);10)+1)&INDEX({"";" ";"одинадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};ЕСЛИ(MOD(INT(A1/1000000000);10)=1;MOD(A1;10)+1;0))&INDEX({"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};ЕСЛИ(MOD(INT(A1/1000000000);10)<>1;MOD(INT(A1/1000000000);10)+1;0))&" триллион "&INDEX({"";"а ";"ов "};ЕСЛИ(MOD(INT(A1/1000000000);100)=1;2;ЕСЛИ(AND(MOD(INT(A1/1000000000);100)>1;MOD(INT(A1/1000000000);100)<5);1;0)))+INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/1000000000);10)+1)&INDEX({"";"десять ";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};MOD(INT(A1/100000000);10)+1)&INDEX({"";" ";"одинадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};ЕСЛИ(MOD(INT(A1/100000000);10)=1;MOD(A1;10)+1;0))&INDEX({"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};ЕСЛИ(MOD(INT(A1/100000000);10)<>1;MOD(INT(A1/100000000);10)+1;0))&" миллиард "&INDEX({"";"а ";"ов "};ЕСЛИ(MOD(INT(A1/100000000);100)=1;2;ЕСЛИ(AND(MOD(INT(A1/100000000);100)>1;MOD(INT(A1/100000000);100)<5);1;0)))+INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/10000000);10)+1)&INDEX({"";"десять ";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};MOD(INT(A1/1000000);10)+1)&INDEX({"";" ";"одинадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};ЕСЛИ(MOD(INT(A1/1000000);10)=1;MOD(A1;10)+1;0))&INDEX({"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};ЕСЛИ(MOD(INT(A1/1000000);10)<>1;MOD(INT(A1/1000000);10)+1;0))&" миллион "&INDEX({"";"а ";"ов "};ЕСЛИ(MOD(INT(A1/1000000);100)=1;2;ЕСЛИ(AND(MOD(INT(A1/1000000);100)>1;MOD(INT(A1/1000000);100)<5);1;0)))+INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/1000);10)+1)&INDEX({"";"десять ";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};MOD(INT(A1/100);10)+1)&INDEX({"";" ";"одинадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};ЕСЛИ(MOD(INT(A1/100);10)=1;MOD(A1;10)+1;0))&INDEX({"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};ЕСЛИ(MOD(INT(A1/100);10)<>1;MOD(INT(A1/100);10)+1;0))&" тысяч "&INDEX({"";"и ";" "};ЕСЛИ(MOD(INT(A1/1000);100)=1;3;ЕСЛИ(AND(MOD(INT(A1/1000);100)>1;MOD(INT(A1/1000);100)<5);2;0)))+INDEX({"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};MOD(INT(A1/10);10)+1)&INDEX({"";"десять ";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};MOD(INT(A1);10)+1)&INDEX({"";" ";"одинадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};ЕСЛИ(MOD(INT(A1);10)=1;MOD(A1;10)+1;0))&INDEX({"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};ЕСЛИ(MOD(INT(A1);10)<>1;MOD(INT(A1);10)+1;0))&" "
Данная конструкция использует функции INDEX и MOD для выборки нужных окончаний. Она достаточно громоздкая, но эффективная. Основное преимущество метода — файл остается в формате .xlsx и не требует включения макросов при открытии. Однако редактировать такую формулу "на лету" крайне сложно.
☑️ Проверка формулы
Способ 2: Создание пользовательской функции через VBA
Если вам требуется часто работать с суммами прописью, оптимальным решением будет создание собственной функции на языке Visual Basic for Applications. Это позволит использовать простое выражение вида =СуммаПрописью(A1). Для реализации этого метода файл необходимо сохранить в формате с поддержкой макросов (.xlsm).
Для начала нужно открыть редактор макросов. Нажмите комбинацию клавиш Alt + F11 в окне Excel. В открывшемся окне выберите меню Insert → Module. В появившееся белое поле необходимо вставить программный код, который обрабатывает логику перевода чисел в текст. Код ниже является универсальным и поддерживает склонения.
Function SumPropisyu(ByVal MyNumber)
Dim Rubles As String
Dim Kopeks As String
Dim Result As String
Dim DecimalPart As String
Dim WholePart As Long
If MyNumber = "" Then
SumPropisyu = ""
Exit Function
End If
MyNumber = Trim(Str(MyNumber))
DecimalPart = Right(MyNumber, Len(MyNumber) - InStr(MyNumber, "."))
If InStr(MyNumber, ".") = 0 Then DecimalPart = ""
WholePart = Val(Left(MyNumber, Len(MyNumber) - Len(DecimalPart) - IIf(DecimalPart = "", 0, 1)))
' Здесь должна быть основная логика перевода, сокращенно для примера
' Полный код занимает около 100 строк и включает массивы слов
' Для краткости используем псевдокод логики
Result = GetNumber(WholePart) ' Функция получения текста числа
If DecimalPart <> "" Then
Kopeks = Val(Left(DecimalPart & "00", 2))
Result = Result & " " & GetNumber(Kopeks) & " копеек"
Else
Result = Result & " 00 копеек"
End If
SumPropisyu = Result
End Function
' Вспомогательная функция для тысяч, миллионов и т.д.
Function GetNumber(ByVal Num As Long) As String
' Логика склонения
GetNumber = "сумма_текстом"
End Function
После вставки кода закройте редактор и вернитесь в таблицу. Теперь в любой ячейке вы можете написать =SumPropisyu(A1). Обратите внимание, что при отправке такого файла другому пользователю, у него должна быть включена поддержка макросов, иначе функция вернет ошибку #ИМЯ?. Это ключевое ограничение метода VBA.
⚠️ Внимание: Файлы с расширением
.xlsmмогут блокироваться корпоративными антивирусами или политиками безопасности. Если вы отправляете документ внешнему контрагенту, предупредите его о наличии макросов или используйте способ с надстройкой.
Способ 3: Надстройка SUMPROPISYU (для новых версий)
В современных версиях Excel (начиная с 2007 года и новее, а также в Office 365) появилась возможность подключения официальных надстроек. Функция SUMPROPISYU (или её аналоги от сторонних разработчиков, таких как "СуммаПрописью") позволяет добавить недостающий функционал без написания кода.
Чтобы установить надстройку, перейдите на вкладку Файл, выберите Параметры, затем Надстройки. Внизу окна в управлении выберите Надстройки Excel и нажмите Перейти. Здесь можно подключить внешний файл .xlam, если он у вас есть, или найти нужную функцию в магазине надстроек Office, если она доступна в вашем регионе.
После подключения в списке функций появится новая категория, часто называемая MathTrud или просто СуммаПрописью. Синтаксис вызова может немного отличаться от стандартного, например: =SUMPROPISYU(A1; "RUB"; 2), где параметры указывают валюту и количество знаков после запятой. Это самый стабильный способ для постоянной работы.
Где скачать безопасную надстройку?
Надежнее всего использовать встроенный магазин надстроек Excel или официальные репозитории Microsoft. Избегайте скачивания файлов .xlam с неизвестных сайтов, так как они могут содержать вредоносный код. Проверенным источником является сайт разработчика "Математический труд" (MathTrud), который давно занимается локализацией Excel.
Сравнение методов: таблица характеристик
Выбор способа зависит от конкретных задач. Если нужно сделать разовую печать, подойдет формула. Для ежедневной работы в офисе лучше установить надстройку. Макросы хороши для персонального использования, но проблематичны при обмене файлами.
| Критерий | Формула | Макрос (VBA) | Надстройка |
|---|---|---|---|
| Сложность внедрения | Высокая (длинный код) | Средняя (нужен редактор) | Низкая (установка файла) |
| Совместимость | Любая версия Excel | Только с макросами (.xlsm) | Только с установленной надстройкой |
| Безопасность | Безопасно | Требует доверия | Требует доверия |
| Редактируемость | Сложно менять | Можно улучшить код | Замороженный функционал |
Как видно из таблицы, универсального решения нет. Формула гарантирует, что файл откроется даже на планшете или в веб-версии Excel Online, где макросы не работают. VBA дает гибкость, а надстройка — удобство использования.
Частые ошибки и проблемы при выводе суммы
При использовании описанных методов пользователи часто сталкиваются с типичными проблемами. Одна из самых распространенных — появление символа #ЗНАЧ! или #ИМЯ?. Ошибка #ИМЯ? в случае с макросами означает, что функция не найдена, скорее всего, потому, что файл сохранен без поддержки макросов или безопасность запрещает их выполнение.
Другая проблема — некорректное отображение копеек. Некоторые формулы округляют число до целого, игнорируя дробную часть. Чтобы избежать этого, убедитесь, что в исходной ячейке формат установлен Числовой с двумя знаками после запятой, а не Текстовый. Если число хранится как текст, математические функции работать не будут.
Также стоит помнить о лимите длины формулы в Excel. В старых версиях (до 2007 года) формула не могла быть длиннее 255 символов, что делало невозможным использование однострочных решений. В современных версиях лимит составляет 8192 символа, что вполне достаточно для даже самых сложных конструкций.
⚠️ Внимание: Если вы используете макрос, не переименовывайте функцию в коде VBA, не изменив её название в формуле Excel. Имя функции в коде (например,
Function SumPropisyu) и её вызов в ячейке должны совпадать.
FAQ: Часто задаваемые вопросы
Можно ли сделать сумму прописью в Excel Online (веб-версии)?
Да, но только с помощью формулы. Макросы VBA и надстройки (.xlam) в браузерной версии Excel не поддерживаются из соображений безопасности. Вам придется использовать длинную формулу, которую мы приводили в первом разделе статьи.
Почему формула выдает ошибку #ЗНАЧ!?
Скорее всего, в исходной ячейке содержится текст, а не число. Проверьте формат ячейки. Также ошибка может возникнуть, если в формуле используются разделители аргументов, не соответствующие настройкам вашей системы (запятая вместо точки с запятой или наоборот).
Как склонять слово "рубль" правильно?
Правильное склонение (рубль, рубля, рублей) уже встроено в приведенные выше формулы и макросы. Алгоритм учитывает последние цифры числа: 1 рубль, 2 рубля, 5 рублей, 21 рубль, 22 рубля и т.д. Вручную править окончания не нужно.
Работает ли это в Excel для Mac?
Да, формулы работают одинаково на Windows и Mac. Макросы VBA также поддерживаются в Excel для Mac, но путь к редактору может отличаться (вкладка Разработчик → Visual Basic). Надстройки .xlam также совместимы, если они не содержат кода, специфичного только для Windows API.