Почему Excel не умеет преобразовывать числа в текст прописью «из коробки»?
Microsoft Excel — мощнейший инструмент для работы с числовыми данными, но у него есть странный пробел: нет встроенной функции для преобразования чисел в текст прописью. В то время как бухгалтерские программы вроде 1С или QuickBooks легко выводят «Один миллион двадцать три тысячи пятьсот рублей», Excel требует ручной настройки. Почему так?
Дело в локализации: в англоязычных версиях Excel есть функция BAHTTEXT() для тайского бата, но для русского, украинского или казахского языков аналога нет. Microsoft считает, что это задача для надстроек или пользовательских решений. К счастью, обойти ограничение можно пятью способами — от простых формул до автоматизации через VBA.
В этой статье разберём все методы — от универсальных (работают в Excel 2010–2023 и Office 365) до специализированных (например, для бухгалтерских документов с копейками). Вы узнаете, как:
- 🔹 Преобразовать число в текст прописью без макросов (формулы + надстройки)
- 🔹 Добавить рубли/доллары/евро с правильным склонением
- 🔹 Автоматизировать процесс для тысяч строк через VBA
- 🔹 Избежать ошибок с отрицательными числами и нулями
Способ 1: Готовые надстройки для Excel (самый простой метод)
Если вам нужно быстрое решение без погружения в формулы, используйте бесплатные надстройки. Они добавляют в Excel новую функцию (например, =РУБЛИПРОПИСЬЮ(A1)), которая работает как родная.
Топ-3 проверенных надстройки:
- 📌 NumWord — поддерживает русские рубли, доллары, евро и даже биткоины. Скачать с официального сайта.
- 📌 ЧислоПрописью от PlanetaExcel — легковесная, работает в Excel 2007+.
- 📌 RubToStr — специализирована на бухгалтерских документах (правильно склоняет «рубль/рубля/рублей»).
Как установить надстройку:
- Скачайте файл с расширением
.xlamили.xlsm. - Откройте Excel →
Файл → Параметры → Надстройки. - Нажмите «Перейти» → «Обзор» и выберите скачанный файл.
- Поставьте галочку напротив названия надстройки и нажмите «ОК».
☑️ Проверка работы надстройки
⚠️ Внимание: Надстройки из ненадёжных источников могут содержать вредоносный код. Скачивайте только с официальных сайтов или проверенных репозиториев (например, GitHub). Если после установки Excel начинает «тормозить», отключите надстройку в параметрах.
Способ 2: Формулы без VBA (для Excel 2019 и новее)
Если надстройки не подходят, можно обойтись встроенными функциями Excel. Минус метода — формула получается громоздкой (до 500 символов), но зато не требует макросов.
Пример формулы для числа в ячейке A1 (до 999 999 рублей):
=ЕСЛИ(A1=0;"ноль";ЕСЛИ(A1<0;"минус ";"")&
ВЫБОР(ЦЕЛОЕ(ABS(A1)/1000000)+1;"один миллион ";"два миллиона ";"";"три миллиона ";"четыре миллиона ";"пять миллионов ";"шесть миллионов ";"семь миллионов ";"восемь миллионов ";"девять миллионов ")&
ВЫБОР(ЦЕЛОЕ(ОСТАТ(ABS(A1);1000000)/1000)+1;"одна тысяча ";"две тысячи ";"три тысячи ";"четыре тысячи ";"пять тысяч ";"шесть тысяч ";"семь тысяч ";"восемь тысяч ";"девять тысяч ")&
... [продолжение для сотен, десятков и единиц] &
ЕСЛИ(ОСТАТ(A1;1)=1;" рубль";ЕСЛИ(И(ОСТАТ(A1;100)>10;ОСТАТ(A1;100)<20);" рублей";ЕСЛИ(И(ОСТАТ(A1;10)>1;ОСТАТ(A1;10)<5);" рубля";" рублей")))
Полную версию формулы (на 1 000+ символов) можно скачать здесь. Она покрывает числа до 999 миллиардов и правильно склоняет валюту.
Как работает формула?
Формула разбивает число на части (миллионы, тысячи, сотни и т.д.), затем с помощью функции ВЫБОР() подставляет текстовые эквиваленты. Для склонения валют используется вложенная функция ЕСЛИ(), которая проверяет остаток от деления на 10 и 100.
| Число в ячейке | Результат формулы | Примечание |
|---|---|---|
1234,56 |
одна тысяча двести тридцать четыре рубля 56 копеек | Копейки добавляются отдельной частью формулы |
-500 |
минус пятьсот рублей | Отрицательные числа поддерживаются |
1000001 |
один миллион один рубль | Правильное склонение для «рубль» |
0 |
ноль рублей | Нуль обрабатывается отдельным условием |
⚠️ Внимание: Формула не работает с дробными числами (например, 1234.567). Для копеек/центов нужно отдельно умножать дробную часть на 100 и обрабатывать её как целое число.
Способ 3: VBA-макрос для профессионалов (гибкость + скорость)
Если вам нужно обрабатывать тысячи строк или кастомизировать вывод (например, добавить «включая НДС»), VBA — лучший выбор. Макрос работает в 10–100 раз быстрее формул и поддерживает:
- 💰 Любые валюты (рубли, доллары, евро, тенге и др.)
- 📊 Отрицательные числа и нули
- ⚡ Дробные части (копейки, центы)
- 🔄 Падежи («рублей», «рубля», «рубль»)
Код макроса для вставки в Alt + F11:
Function РублиПрописью(Число As Double, Optional Валюта As String = "руб") As String
Dim Рубль As String, Копейка As String, Текст As String
Select Case Валюта
Case "руб": Рубль = "рубль|рубля|рублей"; Копейка = "копейка|копейки|копеек"
Case "усд", "долл": Рубль = "доллар|доллара|долларов"; Копейка = "цент|цента|центов"
Case "евро": Рубль = "евро|евро|евро"; Копейка = "цент|цента|центов"
End Select
' Основная логика преобразования (упрощено)
Текст = ConvertLessThanOneThousand(Int(Число)) & " " & GetCurrencyForm(Int(Число), Рубль)
If Число - Int(Число) > 0 Then
Текст = Текст & " " & ConvertLessThanOneThousand(Round((Число - Int(Число)) 100, 0)) & " " & GetCurrencyForm(Round((Число - Int(Число)) 100, 0), Копейка)
End If
РублиПрописью = Текст
End Function
' Вспомогательные функции (полный код см. по ссылке)
Function ConvertLessThanOneThousand(ByVal Число As Integer) As String
' ... логика для чисел < 1000
End Function
Function GetCurrencyForm(ByVal Число As Integer, CurrencyForms As String) As String
' ... логика склонения валют
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в модуль (
Insert → Module). - Сохраните файл как
.xlsm(с поддержкой макросов). - В ячейке используйте формулу
=РублиПрописью(A1; "руб").
Способ 4: Power Query для массовой обработки данных
Если у вас Excel 2016+ или Office 365, можно использовать Power Query — инструмент для преобразования данных. Это актуально, если нужно обработать тысячи строк из внешних источников (например, выгрузки из 1С).
Алгоритм:
- Выделите исходные данные →
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте пользовательский столбец с формулой на языке M:
= (Число) =>
let
Единицы = {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
Десятки = {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
// ... остальной код (полная версия ~200 строк)
in
Текст & " " & Валюта
Преимущества метода:
- 🔄 Обработка миллионов строк без «тормозов».
- 🔄 Возможность сохранять шаги преобразования для повторного использования.
- 🔄 Интеграция с другими источниками (SQL, CSV, JSON).
⚠️ Внимание: Power Query не поддерживает склонение валют «из коробки». Для правильного вывода «рубль/рубля/рублей» нужно дописывать логику вручную или комбинировать с VBA.
Способ 5: Онлайн-конвертеры (для разовых задач)
Если вам нужно преобразовать 1–2 числа и устанавливать надстройки нет желания, воспользуйтесь онлайн-сервисами. Они бесплатны и не требуют регистрации.
Топ-5 проверенных сервисов:
- 🌐 Calculat.org — поддерживает рубли, доллары, евро и гривны.
- 🌐 NumWord.com — расширенные настройки (падежи, регистр).
- 🌐 AbakBot — для бухгалтерских документов (с НДС).
- 🌐 PlanetCalc — калькулятор с историей вычислений.
- 🌐 Студия Лебедева — минималистичный дизайн, без рекламы.
Как перенести результат в Excel:
- Скопируйте число из Excel.
- Вставьте в поле на сайте → получите текст прописью.
- Скопируйте результат и вставьте в Excel как значение (чтобы избежать формул).
Типичные ошибки и как их избежать
Даже с готовыми решениями пользователи сталкиваются с проблемами. Вот 5 самых частых ошибок и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
Формула выдаёт #ИМЯ? |
Опечатка в названии функции или отсутствует надстройка | Проверьте регистр (например, =РУБЛИПРОПИСЬЮ, а не =рублипрописью) |
| Неправильное склонение («1 рубль» → «1 рублей») | Ошибка в логике функции ЕСЛИ() |
Добавьте проверку на ОСТАТ(Число;100) для чисел 11–19 |
Макрос не работает в .xlsx |
Файл сохранён без поддержки макросов | Сохраните как .xlsm и разрешите выполнение макросов |
| Отрицательные числа выводятся без «минус» | В формуле нет обработки знака | Добавьте ЕСЛИ(A1<0; "минус "; "") в начало формулы |
| Power Query «завис» на больших данных | Слишком много строк или сложные преобразования | Разбейте данные на части или оптимизируйте код на M |
Если вы используете бухгалтерские шаблоны, проверьте:
- 📋 Соответствие валюты в формуле и документе (например, не выводите «доллары» вместо «рублей»).
- 📋 Правильность округления копеек (в России принято округление до 2 знаков).
- 📋 Наличие пробелов между словами (иногда формулы «склеивают» текст).
FAQ: Ответы на частые вопросы
Можно ли преобразовать сумму прописью в Google Таблицах?
Да, но только через пользовательскую функцию на Google Apps Script. Вот пример кода:
function РублиПрописью(число) {
const единицы = ["", "один", "два", ..., "девять"];
const десятки = ["", "десять", "двадцать", ..., "девяносто"];
// ... остальной код (аналогично VBA)
return текст;
}
Чтобы использовать:
- Откройте Google Таблицу →
Расширения → Apps Script. - Вставьте код и сохраните.
- В ячейке используйте
=РублиПрописью(A1).
Как добавить «включая НДС» или другие постфиксы?
Добавьте текст вручную после функции или модифицируйте макрос. Пример для VBA:
Function РублиПрописьюНДС(Число As Double) As String
РублиПрописьюНДС = РублиПрописью(Число) & " (включая НДС 20%)"
End Function
Почему в формуле не работает дробная часть (копейки)?
Формулы из примера выше обрабатывают только целую часть. Для копеек:
- Умножьте дробную часть на 100:
=ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0). - Обработайте результат отдельной функцией (аналогично целой части).
- Объедините результаты:
=РублиПрописью(ЦЕЛОЕ(A1)) & " " & КопейкиПрописью(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)).
Можно ли автоматически заполнить прописью весь столбец?
Да, двумя способами:
- Протягивание формулы: Введите формулу в первую ячейку, затем протяните маркер автозаполнения вниз.
- VBA для массовой обработки: Используйте цикл
For Each:
Sub ЗаполнитьСтолбецПрописью()
Dim ячейка As Range
For Each ячейка In Range("B1:B100")
ячейка.Value = РублиПрописью(ячейка.Offset(0, -1).Value)
Next ячейка
End Sub
Как сделать, чтобы первая буква была заглавной?
Используйте функцию ПРОПНАЧ() (для русского языка) или PROPER() (для английского):
=ПРОПНАЧ(РублиПрописью(A1))
Для VBA добавьте строку:
РублиПрописью = UCase(Left(Текст, 1)) & Mid(Текст, 2)