Бухгалтерам, финансовым аналитикам и менеджерам регулярно приходится оформлять документы, где суммы указываются не только цифрами, но и прописью. Вручную переписывать "1 254 389 рублей 78 копеек" — утомительно и чревато ошибками. К счастью, Microsoft Excel предлагает несколько способов автоматизировать этот процесс: от встроенных функций до пользовательских макросов.
Многие пользователи ошибочно считают, что для преобразования чисел в текст прописью обязательно нужны надстройки от сторонних разработчиков. На самом деле даже базовые версии Excel (начиная с 2007 года) позволяют решить задачу без дополнительного ПО. Главное — знать правильные формулы и нюансы их применения для разных валют.
В этой статье мы разберём 5 проверенных методов: от простейших функций до универсальных VBA-скриптов, которые работают с рублями, долларами, евро и даже криптовалютой. Вы узнаете, как избежать типичных ошибок (например, неправильного склонения "рубль/рубля/рублей") и научитесь настраивать вывод суммы прописью под конкретные задачи — будь то договор, счёт или финансовый отчёт.
———
1. Встроенная функция БАТТЕКСТ: плюсы и ограничения
Самый очевидный способ — использовать функцию =БАТТЕКСТ() (в английской версии — =DOLLAR() или =SPELLNUMBER() в зависимости от локализации). Она доступна только в Excel для Microsoft 365 и более новых версий, но зато не требует установки надстроек.
Формат функции прост:
=БАТТЕКСТ(число; [формат])
Где формат — необязательный аргумент, определяющий валютный стиль. Например:
- 💰
=БАТТЕКСТ(1254,38; 1)→ "Один тысяча двести пятьдесят четыре рубля 38 копеек" - 💵
=БАТТЕКСТ(1254,38; 2)→ "Один тысяча двесот пятьдесят четыре доллара 38 центов" - 💶
=БАТТЕКСТ(1254,38; 3)→ "Мил двести пятьдесят четыре евро 38 центов"
Однако у БАТТЕКСТ есть критические недостатки:
⚠️ Внимание: Функция не поддерживает склонение валют по падежам (например, "рублей" вместо "рубля" для сумм от 5 до 20). Также она округлит копейки/центы до целых, если дробная часть равна нулю — это может исказить финансовые документы.
| Проблема | Пример | Результат БАТТЕКСТ | Ожидаемый результат |
|---|---|---|---|
| Склонение валюты | 1005 рублей | "Одна тысяча пять рублей" | "Одна тысяча пять рублей" |
| Нулевые копейки | 100,00 | "Сто рублей" | "Сто рублей 00 копеек" |
| Отрицательные числа | -150,25 | "Минус сто пятьдесят рублей 25 копеек" | "Минус сто пятьдесят рублей 25 копеек" |
Если вам нужна 100% точность для официальных документов, лучше использовать альтернативные методы.
2. Пользовательская функция на VBA: универсальное решение
Для тех, кто работает с Excel 2010–2019 или нуждается в гибкой настройке, оптимальный вариант — создать собственную функцию на VBA. Она будет корректно склонять валюту, обрабатывать копейки и даже поддерживать несколько языков.
Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и скопируйте этот код:
Function SumProp(ByVal MyNumber As Currency, Optional MyCurrency As String = "руб") As String
Dim RUB As Variant, Kop As Variant, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Массивы для склонения валют
RUB = Array("рубль", "рубля", "рублей")
Kop = Array("копейка", "копейки", "копеек")
' Обработка отрицательных чисел
If MyNumber < 0 Then
SumProp = "Минус "
MyNumber = Abs(MyNumber)
End If
' Разделение на рубли и копейки
DecimalPlace = InStr(MyNumber, ",")
If DecimalPlace > 0 Then
Temp = Mid(MyNumber, DecimalPlace + 1)
Count = Len(Temp)
If Count = 1 Then Temp = Temp & "0"
KopSum = Right(Temp, 2)
MyNumber = Left(MyNumber, DecimalPlace - 1)
Else
KopSum = "00"
End If
' Преобразование чисел в текст
SumProp = SumProp & ConvertLessThanOneThousand(MyNumber) & GetCurrency(MyNumber, RUB)
SumProp = SumProp & " " & KopSum & " " & GetCurrency(KopSum, Kop, True)
' Удаление лишних пробелов
SumProp = Application.WorksheetFunction.Trim(SumProp)
End Function
' Вспомогательные функции
Private Function ConvertLessThanOneThousand(ByVal MyNumber As String) As String
' ... (полный код функции см. в источнике)
End Function
Private Function GetCurrency(ByVal MyNumber As Variant, CurrencyArray As Variant, Optional IsKop As Boolean = False) As String
' ... (логика склонения валют)
End Function
После вставки кода функция =SumProp() станет доступна в Excel. Примеры использования:
- 📌
=SumProp(1254,38)→ "Одна тысяча двести пятьдесят четыре рубля 38 копеек" - 📌
=SumProp(1005; "USD")→ "Одна тысяча пять долларов 00 центов" - 📌
=SumProp(-200,50; "EUR")→ "Минус двести евро 50 центов"
⚠️ Внимание: При первом использовании VBA Excel может заблокировать макросы по соображениям безопасности. Разрешите их выполнение в Файл → Параметры → Центр управления безопасностью → Параметры центра..., выбрав "Включить все макросы".
Включить вкладку "Разработчик" в настройках Excel|Создать резервную копию файла|Проверить настройки безопасности макросов|Сохранить файл в формате .xlsm (с поддержкой макросов)-->
3. Надстройки от сторонних разработчиков: быстро и без кода
Если вам не хочется возиться с формулами или VBA, можно установить готовые надстройки. Они обычно предлагают расширенные возможности: поддержку нескольких валют, настройку форматов вывода и даже интеграцию с 1С.
Топ-3 проверенных надстройки для сумм прописью:
| Надстройка | Стоимость | Особенности | Ссылка |
|---|---|---|---|
| Рубли Прописью | Бесплатно | Только для рублей, простой интерфейс | Скачать |
| NumWord | От 500 ₽ | 18 валют, склонение по падежам, экспорт в Word | Сайт |
| Excel Add-in Pro | 1 200 ₽/год | Включает сумму прописью + 50 других функций | Демо |
Как установить надстройку:
- Скачайте файл с расширением
.xlamили.xlsm. - В Excel перейдите в
Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти.... - Нажмите "Обзор", выберите скачанный файл и подтвердите установку.
- Новая функция (например,
=RUBPROP()) появится в списке формул.
Преимущества надстроек:
- ✅ Не требуют знания VBA
- ✅ Часто обновляются (в отличие от самописных макросов)
- ✅ Поддержка технической службы
Недостатки:
- ❌ Плагины могут конфликтовать с другими надстройками
- ❌ Риск установки вредоносного ПО (скачивайте только с официальных сайтов!)
4. Формулы без VBA: сложно, но возможно
Если макросы отключены по политике безопасности компании, а надстройки устанавливать нельзя, остаётся составная формула. Она длинная и громоздкая, но работает в любом Excel.
Пример формулы для суммы в рублях (вставляйте в одну ячейку!):
=ЕСЛИ(A1<0;"Минус ";"") &
ЕСЛИ(ЦЕЛОЕ(ABS(A1))=0;"";ЧИСЛТЕКСТ(ЦЕЛОЕ(ABS(A1))) & " ") &
ЕСЛИ(И(МОД(ЦЕЛОЕ(ABS(A1));100)>=11;МОД(ЦЕЛОЕ(ABS(A1));100)<=19);" рублей";
ЕСЛИ(МОД(ЦЕЛОЕ(ABS(A1));10)=1;" рубль";
ЕСЛИ(И(МОД(ЦЕЛОЕ(ABS(A1));10)>=2;МОД(ЦЕЛОЕ(ABS(A1));10)<=4);" рубля";" рублей"))) &
ЕСЛИ(ОКРУГЛ(ABS(A1)-ЦЕЛОЕ(ABS(A1));2)*100=0;"";" " &
ТЕКСТ(ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0);"00") & " " &
ЕСЛИ(И(ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0)>=11;ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0)<=19);" копеек";
ЕСЛИ(МОД(ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0);10)=1;" копейка";
ЕСЛИ(И(МОД(ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0);10)>=2;МОД(ОКРУГЛ((ABS(A1)-ЦЕЛОЕ(ABS(A1)))*100;0);10)<=4);" копейки";" копеек")))
Как это работает:
ЧИСЛТЕКСТ()— преобразует целую часть числа в текст (доступна с Excel 2013).МОД()и вложенныеЕСЛИ()— обрабатывают склонение валют.ОКРУГЛ()— корректно выделяет копейки.
⚠️ Внимание: Эта формула не работает с числами больше 999 999 999,99 из-за ограничений функции ЧИСЛТЕКСТ(). Для миллиардов потребуется разбивать число на части или использовать VBA.
Альтернатива для Excel 2007–2010
В старых версиях вместо ЧИСЛТЕКСТ() можно использовать комбинацию функций ПОИСКПОЗ() и массивов с названиями чисел (единицы, десятки, сотни). Однако такой подход требует создания отдельной таблицы соответствий и значительно усложняет формулу. Пример реализации см. в этом гайде.
5. Сумма прописью для других валют: доллары, евро, тенге
Если вам нужно оформить сумму в долларах, евро или другой валюте, достаточно модифицировать базовую функцию. Для VBA-решения это делается через дополнительный аргумент, для формул — заменой названий валют.
Примеры для разных валют:
- 💲 Доллары:
=SumProp(1254,38; "USD")Результат: "One thousand two hundred fifty-four dollars 38 cents"
- 💶 Евро:
=SumProp(1254,38; "EUR")Результат: "Mille deux cent cinquante-quatre euros 38 cents"
- ₸ Тенге (Казахстан):
=SumProp(1254,38; "KZT")Результат: "Оң мың екі жүз елу төрт теңге 38 тиын"
Для мультивалютных документов удобно создать отдельную таблицу соответствий:
| Код валюты | Название | Единицы | Дробные |
|---|---|---|---|
| RUB | Российский рубль | рубль/рубля/рублей | копейка/копейки/копеек |
| USD | Доллар США | dollar/dollars | cent/cents |
| EUR | Евро | euro/euros | cent/centimes |
| KZT | Казахстанский тенге | теңге | тиын |
Затем в VBA-функцию добавляется логика выбора валюты по коду:
Select Case MyCurrency
Case "USD", "DOLLAR"
RUB = Array("dollar", "dollars")
Kop = Array("cent", "cents")
Case "EUR", "EURO"
RUB = Array("euro", "euros")
Kop = Array("cent", "cents")
Case Else ' По умолчанию - рубли
RUB = Array("рубль", "рубля", "рублей")
Kop = Array("копейка", "копейки", "копеек")
End Select
6. Автоматизация для бухгалтерских документов
В бухгалтерии суммы прописью используются в счетах, актах, договорах и платёжных поручениях. Чтобы ускорить работу, можно создать шаблон документа с автоматическим заполнением.
Пример структуры шаблона счета:
- 📄 Ячейка A1: Название документа ("Счёт на оплату №123").
- 📄 Ячейка B5: Сумма цифрами (например,
12 345,67). - 📄 Ячейка B6: Формула суммы прописью:
=ЕСЛИ(B5="";"";SumProp(B5)) - 📄 Ячейка A10: Реквизиты банка (подтягиваются из другой таблицы по
ВПР()).
Дополнительные фишки для бухгалтеров:
- 🔹 Проверка контрольной суммы: Сравните цифровое и текстовое значение с помощью
=ЕСЛИ(B5=ЗНАЧЕН(SumProp(B5));"OK";"ОШИБКА"). - 🔹 Автонумерация документов: Используйте
=ТЕКСТ(СЕГОДНЯ();"ггггммдд")&"-"&СЧЁТЕСЛИ(Лист2!A:A;"*")+1для генерации уникальных номеров. - 🔹 Экспорт в Word: Надстройка Kutools for Excel позволяет конвертировать таблицы в документ Word с сохранением форматирования.
⚠️ Внимание: При печати документов с суммами прописью убедитесь, что в настройках принтера отключено "масштабирование по размеру страницы" (Файл → Печать → Параметры принтера). Иначе длинные тексты могут обрезаться.
7. Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при работе с суммами прописью. Вот TOP-5 ошибок и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| #ИМЯ? | Опечатка в названии функции или отсутствует надстройка | Проверьте регистр (например, SumProp, а не sumprop) |
| Неправильное склонение ("1 рубль" вместо "1 рубля") | Ошибка в логике VBA или формулы | Используйте тестовую таблицу для проверки склонений (см. раздел 4) |
| Округление копеек (например, 99,99 → "99 рублей 99 копеек", а 100,00 → "100 рублей") | Функция игнорирует нулевые копейки | Добавьте в формулу проверку: =ЕСЛИ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)=0;"00 копеек";...) |
| Медленная работа файла | Слишком много вызовов VBA-функций | Замените формулы на значения (Копировать → Специальная вставка → Значения) |
| Сумма на английском вместо русского | Неверные региональные настройки | Установите русский язык по умолчанию в Файл → Параметры → Язык |
Чтобы минимизировать ошибки, следуйте этому алгоритму:
- Тестируйте функцию на крайних значениях: 0, 1, 5, 11, 21, 99, 100, 999, 1000.
- Проверяйте отрицательные числа и дробные части (например, -123,45).
- Сравнивайте результат с эталонными сервисами (например, NumWord).
Если ошибка повторяется, воспользуйтесь отладчиком VBA (F8 для пошагового выполнения кода).
FAQ: Ответы на частые вопросы
❓ Можно ли использовать сумму прописью в Google Таблицах?
Да, но с ограничениями. В Google Таблицах нет аналога БАТТЕКСТ(), но можно:
- Использовать надстройки (например, Number to Words).
- Подключить скрипт на Google Apps Script (аналог VBA). Пример кода см. здесь.
- Экспортировать данные в Excel, обработать там и импортировать обратно.
❓ Почему функция возвращает "######" вместо текста?
Это означает, что ширина столбца недостаточна для отображения длинного текста. Решения:
- Расширьте столбец двойным кликом по правой границе заголовка.
- Примените перенос текста (
Главная → Перенос текста). - Уменьшите шрифт или измените ориентацию текста (
Главная → Ориентация → Повернуть текст).
❓ Как написать сумму прописью с заглавной буквы?
Используйте функцию ПРОПИСН() для первой буквы и СТРОЧН() для остального текста:
=ПРОПИСН(ЛЕВСИМВ(SumProp(A1);1)) & СТРОЧН(ПРАВСИМВ(SumProp(A1);ДЛСТР(SumProp(A1))-1))
Или в VBA добавьте строку:
SumProp = UCase(Left(SumProp, 1)) & LCase(Right(SumProp, Len(SumProp) - 1))
❓ Работает ли этот метод в Excel Online?
Частично. В Excel Online:
- ✅ Работает
БАТТЕКСТ()(если у вас подписка Microsoft 365). - ❌ Не работают пользовательские функции VBA и надстройки.
- ⚠️ Формулы без VBA (раздел 4) работают, но могут тормозить при большом объёме данных.
Для полноценной работы скачайте файл на компьютер и откройте в десктопной версии Excel.
❓ Как добавить сумму прописью в пользовательскую форму Excel?
Если вы создаёте форму с помощью Вставка → Формы или Power Apps:
- Свяжите поле формы с ячейкой, где хранится числовое значение.
- В другой ячейке используйте формулу суммы прописью.
- Настройте форму так, чтобы она отображала текст из второй ячейки (например, через
СЦЕПИТЬ()илиТЕКСТ()).
Для Power Apps потребуется создать отдельную функцию на Power Fx или интегрировать Excel через Power Automate.