Зачем нужна сумма прописью в Excel и где это применяется
Преобразование числовых значений в текстовый формат «прописью» — стандартная задача при оформлении финансовых документов. В Microsoft Excel эта функция не встроена по умолчанию, но её можно реализовать несколькими способами: от простых формул до автоматизированных макросов. Где это пригодится?
Во-первых, бухгалтерские отчёты: платежные поручения, счета-фактуры и акты выполненных работ требуют дублирования сумм прописью для защиты от подделок. Во-вторых, договоры и соглашения, где суммы указываются как цифрами, так и словами для юридической точности. В-третьих, чеки и квитанции — многие кассовые программы автоматически генерируют текстовое представление суммы, но в ручных таблицах это приходится делать вручную.
Без специальных инструментов пользователи часто вводят суммы прописью manually, что занимает время и чревато ошибками. К счастью, Excel предлагает гибкие решения: от использования встроенных функций до создания пользовательских скриптов на VBA. Далее разберём все методы — от самого простого до продвинутого.
Способ 1: Стандартная функция БАТЕКСТ (только для английского)
Если вы работаете с англоязычной версией Excel, у вас есть встроенная функция BAHTTEXT (в русскоязычных версиях она называется БАТЕКСТ). Она преобразует числа в текстовый формат по правилам тайского языка, но с небольшой адаптацией может использоваться и для других валют.
Формат функции:
=БАТЕКСТ(число; [формат_валюты])
Пример для суммы 1234,56:
=БАТЕКСТ(1234,56)
Результат: «одна тысяча двести тридцать четыре бата и пятьдесят шесть сатангов». К сожалению, для рублей или долларов этот метод не подходит — придётся заменять «бат» и «сатанг» вручную или через функцию ПОДСТАВИТЬ.
⚠️ Внимание: Функция БАТЕКСТ доступна только в Excel 2013 и новее. В более старых версиях её нет, а в онлайн-версии Excel Online она может работать некорректно.
- ✅ Плюсы: не требует макросов, работает «из коробки».
- ❌ Минусы: только тайская валюта, нужны дополнительные замены для рублей/долларов.
- 🔄 Обходной путь: комбинируйте с
ПОДСТАВИТЬ, например:=ПОДСТАВИТЬ(БАТЕКСТ(A1);"бат";"рубль").
Способ 2: Пользовательская функция на VBA для рублей
Самый универсальный метод — создать собственную функцию на VBA, которая будет корректно преобразовывать суммы в рубли с копейками. Этот способ работает во всех версиях Excel (кроме Excel Online) и позволяет настраивать формат под свои нужды.
Чтобы добавить функцию:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Вставьте следующий код:
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. Она поддерживает рубли, доллары, евро и другие валюты, а также позволяет настраивать падежи (именительный, родительный) и формат вывода.
Как установить:
- Скачайте надстройку с официального сайта (например, Plutus).
- В Excel перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Управление: Надстройки Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку.
После установки в меню появится новая вкладка ЧислоПрописью. Выделите ячейку с числом, нажмите кнопку надстройки — и сумма автоматически преобразуется в текст. Преимущество этого метода:
- 🔄 Работает без макросов (подходит для 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] четыре рубля;рублей")
)
Эта формула работает так:
- Делит число на миллионы, тысячи и единицы.
- Для каждого разряда подбирает правильное окончание (например, «миллион» vs «миллиона»).
- Склеивает результаты в единую строку.
Ограничения метода:
- ❌ Не поддерживает копейки.
- ❌ Сложно адаптировать под другие валюты.
- ❌ Формула громоздкая и плохо читаемая.
Как добавить поддержку копеек в формулу без VBA
Чтобы учесть копейки, нужно разбить число на целую и дробную части с помощью функций ЦЕЛОЕ и ОСТАТ, а затем применить аналогичную логику для дробной части. Например:
=ТЕКСТ(ЦЕЛОЕ(A1);"...") & " рублей " & ТЕКСТ(ОКРУГЛ(ОСТАТ(A1;1)*100;0);"[=1] одна копейка;[=2] две копейки;[=3] три копейки;[=4] четыре копейки;копеек")
Но такая формула станет ещё длиннее и сложнее для редактирования.
Способ 5: Онлайн-конвертеры и Power Query
Если вы работаете в Excel Online или не можете использовать макросы, альтернативный вариант — онлайн-конвертеры или Power Query. Например, сервис NumToWord позволяет вводить числа и получать их текстовое представление, которое потом можно скопировать в Excel.
Для автоматизации через Power Query:
- Перейдите на вкладку
Данные → Получить данные → Из других источников → Пустой запрос. - В редакторе Power Query добавьте столбец с формулой (на языке M):
= Number.ToText([Число], "ru-RU")
К сожалению, стандартная функция Number.ToText в Power Query не поддерживает рублёвый формат, но можно доработать запрос с помощью пользовательских функций.
⚠️ Внимание: Онлайн-конвертеры не подходят для конфиденциальных данных (например, сумм по зарплате или коммерческим сделкам), так как числа передаются на сторонние серверы.
Типичные ошибки и как их избежать
При преобразовании сумм прописью пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые:
- Некорректные окончания: Например, «1 рубль» вместо «1 рубля». Это происходит из-за упрощённых формул, которые не учитывают падежи. Решение: используйте VBA-функции с полной морфологией или надстройки.
- Округление копеек: Если в ячейке число
1234,567, а формула отображает «56 копеек» вместо «57», проверьте функцию округления. ДобавьтеОКРУГЛперед преобразованием:
=SumProp(ОКРУГЛ(A1; 2))
- Ошибки при больших числах: Формулы без VBA часто «ломаются» на суммах свыше 999 999. Тестируйте решение на крайних значениях (например,
9 999 999,99). - Проблемы с отрицательными числами: Если сумма отрицательная (например,
-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 под правила языка.