Как в Excel написать сумму прописью: от простых формул до VBA-скриптов

Зачем нужна сумма прописью в Excel и где это применяется

Преобразование числовых значений в текстовый формат «прописью» — стандартная задача при оформлении финансовых документов. В Microsoft Excel эта функция не встроена по умолчанию, но её можно реализовать несколькими способами: от простых формул до автоматизированных макросов. Где это пригодится?

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

Без специальных инструментов пользователи часто вводят суммы прописью manually, что занимает время и чревато ошибками. К счастью, Excel предлагает гибкие решения: от использования встроенных функций до создания пользовательских скриптов на VBA. Далее разберём все методы — от самого простого до продвинутого.

📊 Как часто вам нужно преобразовывать суммы прописью в Excel?
Ежедневно
Несколько раз в неделю
Рядом
Никогда

Способ 1: Стандартная функция БАТЕКСТ (только для английского)

Если вы работаете с англоязычной версией Excel, у вас есть встроенная функция BAHTTEXT (в русскоязычных версиях она называется БАТЕКСТ). Она преобразует числа в текстовый формат по правилам тайского языка, но с небольшой адаптацией может использоваться и для других валют.

Формат функции:

=БАТЕКСТ(число; [формат_валюты])

Пример для суммы 1234,56:

=БАТЕКСТ(1234,56)

Результат: «одна тысяча двести тридцать четыре бата и пятьдесят шесть сатангов». К сожалению, для рублей или долларов этот метод не подходит — придётся заменять «бат» и «сатанг» вручную или через функцию ПОДСТАВИТЬ.

⚠️ Внимание: Функция БАТЕКСТ доступна только в Excel 2013 и новее. В более старых версиях её нет, а в онлайн-версии Excel Online она может работать некорректно.
  • ✅ Плюсы: не требует макросов, работает «из коробки».
  • ❌ Минусы: только тайская валюта, нужны дополнительные замены для рублей/долларов.
  • 🔄 Обходной путь: комбинируйте с ПОДСТАВИТЬ, например: =ПОДСТАВИТЬ(БАТЕКСТ(A1);"бат";"рубль").

Способ 2: Пользовательская функция на VBA для рублей

Самый универсальный метод — создать собственную функцию на VBA, которая будет корректно преобразовывать суммы в рубли с копейками. Этот способ работает во всех версиях Excel (кроме Excel Online) и позволяет настраивать формат под свои нужды.

Чтобы добавить функцию:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте следующий код:
Function SumProp(ByVal MyNumber As Currency) As String

Dim Rubles As String, Kop As String, Temp As String

Dim DecimalPlace As Integer, Count As Integer

MyNumber = Round(MyNumber, 2)

DecimalPlace = InStr(MyNumber, ",")

If DecimalPlace > 0 Then

Kop = GetTens(Right(MyNumber, 2))

Temp = Left(MyNumber, DecimalPlace - 1)

Else

Kop = "00"

Temp = MyNumber

End If

Count = 1

Do While Temp <> ""

Rubles = GetHundreds(Right(Temp, 3)) & Rubles

If Right(Temp, 3) <> "" Then

Rubles = GetDigit(Count) & " " & Rubles

End If

Temp = Left(Temp, Len(Temp) - 3)

Count = Count + 1

Loop

Rubles = Application.WorksheetFunction.Trim(Rubles)

SumProp = Rubles & " рублей " & Kop & " копеек"

End Function

Function GetHundreds(ByVal MyNumber)

Dim Result As String

If Val(MyNumber) = 0 Then Exit Function

MyNumber = Right("000" & MyNumber, 3)

If Mid(MyNumber, 1, 1) <> "0" Then

Result = GetDigit(Mid(MyNumber, 1, 1)) & "сот "

End If

If Mid(MyNumber, 2, 1) <> "0" Then

Result = Result & GetTens(Mid(MyNumber, 2))

Else

Result = Result & GetDigit(Mid(MyNumber, 3))

End If

GetHundreds = Result

End Function

Function GetTens(TensText)

Dim Result As String

Result = ""

If Val(Left(TensText, 1)) = 1 Then

Select Case Val(TensText)

Case 10: Result = "десять"

Case 11: Result = "одиннадцать"

Case 12: Result = "двенадцать"

Case 13: Result = "тринадцать"

Case 14: Result = "четырнадцать"

Case 15: Result = "пятнадцать"

Case 16: Result = "шестнадцать"

Case 17: Result = "семнадцать"

Case 18: Result = "восемнадцать"

Case 19: Result = "девятнадцать"

End Select

Else

Select Case Val(Left(TensText, 1))

Case 2: Result = "двадцать "

Case 3: Result = "тридцать "

Case 4: Result = "сорок "

Case 5: Result = "пятьдесят "

Case 6: Result = "шестьдесят "

Case 7: Result = "семьдесят "

Case 8: Result = "восемьдесят "

Case 9: Result = "девяносто "

End Select

Result = Result & GetDigit(Right(TensText, 1))

End If

GetTens = Result

End Function

Function GetDigit(Digit)

Select Case Val(Digit)

Case 1: GetDigit = "один "

Case 2: GetDigit = "два "

Case 3: GetDigit = "три "

Case 4: GetDigit = "четыре "

Case 5: GetDigit = "пять "

Case 6: GetDigit = "шесть "

Case 7: GetDigit = "семь "

Case 8: GetDigit = "восемь "

Case 9: GetDigit = "девять "

Case Else: GetDigit = ""

End Select

End Function

Теперь в любой ячейке можно использовать функцию =SumProp(A1), где A1 — ячейка с числом. Например, для суммы 1234,56 результат будет: «одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек».

Включена ли поддержка макросов в Excel?|Файл сохранён в формате .xlsm (не .xlsx)?|Правильно ли указаны ссылки на ячейки в формуле?|Тестировалась ли функция на больших числах (например, 999 999,99)?-->

⚠️ Внимание: Если при открытии файла Excel выдаёт предупреждение о макросах, разрешите их выполнение в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.

Способ 3: Надстройка «ЧислоПрописью» для автоматизации

Если вам не хочется возиться с VBA, можно установить готовую надстройку. Одна из самых популярных — «ЧислоПрописью» от Plutus. Она поддерживает рубли, доллары, евро и другие валюты, а также позволяет настраивать падежи (именительный, родительный) и формат вывода.

Как установить:

  1. Скачайте надстройку с официального сайта (например, Plutus).
  2. В Excel перейдите в Файл → Параметры → Надстройки.
  3. Внизу окна выберите Управление: Надстройки Excel → Перейти.
  4. Нажмите Обзор, выберите скачанный файл и подтвердите установку.

После установки в меню появится новая вкладка ЧислоПрописью. Выделите ячейку с числом, нажмите кнопку надстройки — и сумма автоматически преобразуется в текст. Преимущество этого метода:

  • 🔄 Работает без макросов (подходит для Excel Online).
  • 📌 Поддерживает несколько валют и языков.
  • ⚡ Быстрая обработка больших таблиц (до 10 000 строк).
Надстройка Поддержка валют Работа в Excel Online Стоимость
ЧислоПрописью (Plutus) Рубли, доллары, евро, тенге Да Бесплатно (базовая версия)
NumToText Рубли, гривны, доллары Нет Платная (~500 руб.)
Русский Excel Только рубли Частично Бесплатно

Способ 4: Формулы без VBA (для простых чисел)

Если вам нужно преобразовать только целые числа (без копеек) и не хочется использовать макросы, можно обойтись комбинацией стандартных функций: ЕСЛИ, ВПР и ТЕКСТ. Этот метод подходит для сумм до 999 999 рублей.

Пример для числа в ячейке A1:

=ЕСЛИ(A1=0;"ноль";

ТЕКСТ(ЦЕЛОЕ(A1/1000000);"[=-1] миллион[ов];[=1] миллион;миллиона") & " " &

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;1000000)/1000);"[=-1] тысяча[];[=1] одна тысяча;[=2] две тысячи;[=3] три тысячи;[=4] четыре тысячи") & " " &

ТЕКСТ(ОСТАТ(A1;1000);"[=-1] рубль[ей];[=1] один рубль;[=2] два рубля;[=3] три рубля;[=4] четыре рубля;рублей")

)

Эта формула работает так:

  1. Делит число на миллионы, тысячи и единицы.
  2. Для каждого разряда подбирает правильное окончание (например, «миллион» vs «миллиона»).
  3. Склеивает результаты в единую строку.

Ограничения метода:

  • ❌ Не поддерживает копейки.
  • ❌ Сложно адаптировать под другие валюты.
  • ❌ Формула громоздкая и плохо читаемая.
Как добавить поддержку копеек в формулу без VBA

Чтобы учесть копейки, нужно разбить число на целую и дробную части с помощью функций ЦЕЛОЕ и ОСТАТ, а затем применить аналогичную логику для дробной части. Например:

=ТЕКСТ(ЦЕЛОЕ(A1);"...") & " рублей " & ТЕКСТ(ОКРУГЛ(ОСТАТ(A1;1)*100;0);"[=1] одна копейка;[=2] две копейки;[=3] три копейки;[=4] четыре копейки;копеек")

Но такая формула станет ещё длиннее и сложнее для редактирования.

Способ 5: Онлайн-конвертеры и Power Query

Если вы работаете в Excel Online или не можете использовать макросы, альтернативный вариант — онлайн-конвертеры или Power Query. Например, сервис NumToWord позволяет вводить числа и получать их текстовое представление, которое потом можно скопировать в Excel.

Для автоматизации через Power Query:

  1. Перейдите на вкладку Данные → Получить данные → Из других источников → Пустой запрос.
  2. В редакторе Power Query добавьте столбец с формулой (на языке M):
= Number.ToText([Число], "ru-RU")

К сожалению, стандартная функция Number.ToText в Power Query не поддерживает рублёвый формат, но можно доработать запрос с помощью пользовательских функций.

⚠️ Внимание: Онлайн-конвертеры не подходят для конфиденциальных данных (например, сумм по зарплате или коммерческим сделкам), так как числа передаются на сторонние серверы.

Типичные ошибки и как их избежать

При преобразовании сумм прописью пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые:

  1. Некорректные окончания: Например, «1 рубль» вместо «1 рубля». Это происходит из-за упрощённых формул, которые не учитывают падежи. Решение: используйте VBA-функции с полной морфологией или надстройки.
  2. Округление копеек: Если в ячейке число 1234,567, а формула отображает «56 копеек» вместо «57», проверьте функцию округления. Добавьте ОКРУГЛ перед преобразованием:
=SumProp(ОКРУГЛ(A1; 2))
  1. Ошибки при больших числах: Формулы без VBA часто «ломаются» на суммах свыше 999 999. Тестируйте решение на крайних значениях (например, 9 999 999,99).
  2. Проблемы с отрицательными числами: Если сумма отрицательная (например, -1000), добавьте проверку:
=ЕСЛИ(A1<0;"минус " & SumProp(ABS(A1)); SumProp(A1))

Ещё одна частая ошибка — несоответствие форматов ячеек. Если число хранится как текст (например, '1234,56), формулы не сработают. Проверьте формат ячейки: он должен быть Числовой или Денежный.

FAQ: Частые вопросы по суммам прописью в Excel

Можно ли сделать сумму прописью без VBA и надстроек?

Да, но с ограничениями. Для чисел до 999 999 можно использовать длинные формулы с ЕСЛИ и ТЕКСТ (см. Способ 4). Однако такой подход не поддерживает копейки и требует ручной настройки для каждой валюты.

Почему функция БАТЕКСТ выдаёт ошибку #ИМЯ?

Это означает, что функция не поддерживается в вашей версии Excel. Проверьте:

  • Версия Excel старше 2013 года (обновите программу).
  • Язык интерфейса не русский (в англоязычной версии функция называется BAHTTEXT).
  • Файл открыт в Excel Online (там часть функций отключена).
Как сделать, чтобы сумма прописью автоматически обновлялась при изменении числа?

Если вы используете VBA-функцию или надстройку, обновление происходит автоматически. Для формул без макросов нажмите F9, чтобы пересчитать значения. В Power Query обновите запрос через Данные → Обновить все.

Можно ли использовать этот метод в Google Sheets?

В Google Таблицах нет функции БАТЕКСТ, но есть альтернативы:

  • Готовые скрипты на Google Apps Script (аналог VBA).
  • Надстройки из Расширения → Надстройки (например, «Number to Words»).
  • Формулы с IF и CHOOS (аналог ВПР в Excel).

Пример скрипта для рублей: ссылка на GitHub.

Как добавить поддержку украинской гривны или казахстанского тенге?

В VBA-функции (Способ 2) замените строку:

SumProp = Rubles & " рублей " & Kop & " копеек"

на:

SumProp = Rubles & " гривен " & Kop & " копійок"  ' для гривны

SumProp = Rubles & " тенге " & Kop & " тиын" ' для тенге

Также потребуется скорректировать окончания в функциях GetDigit и GetTens под правила языка.