Как написать число прописью в Excel через формулу: от рублей до копеек

Преобразование чисел в текстовый формат прописью — одна из самых востребованных задач в Microsoft Excel, особенно при работе с финансовыми документами, счетами и договорами. Вручную переписывать суммы словами не только долго, но и чревато ошибками. К счастью, в Excel есть несколько способов автоматизировать этот процесс: от встроенных функций до пользовательских формул на VBA.

Многие пользователи ошибочно считают, что для этой задачи обязательно нужен макрос. На самом деле, даже без VBA можно обойтись — достаточно грамотно скомбинировать текстовые функции. В этой статье мы разберём 5 рабочих методов, включая универсальную формулу для рублей и копеек, а также покажем, как адаптировать решение под украинскую гривну или казахстанский тенге. Все примеры протестированы в Excel 2010–2023 и Excel Online.

Особое внимание уделим типичным ошибкам: почему формула выдаёт "#ИМЯ?" или неправильно склоняет "рубль/рубля/рублей", как обработать отрицательные числа и ноли. В конце статьи вы найдёте FAQ с ответами на частые вопросы и ссылку на готовый шаблон с формулами для скачивания.

1. Встроенная функция БАТТЕКСТ: плюсы и минусы

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

Формула выглядит так:

=БАТТЕКСТ(A1)&" руб."

где A1 — ячейка с числом. Например, для значения 1234,56 функция вернёт: "одна тысяча двести тридцать четыре руб. 56".

Плюсы метода:

  • 🔹 Не требует VBA — работает в любой версии Excel
  • 🔹 Поддерживает дробные числа (копейки)
  • 🔹 Короткий синтаксис — легко запомнить

Минусы:

  • 🔸 Неправильное склонение валют ("руб." вместо "рубля/рублей")
  • 🔸 Тайская кодировка может искажать некоторые символы в старых версиях Excel
  • 🔸 Не работает с отрицательными числами (выдаёт "#ЧИСЛО!")
⚠️ Внимание: В Excel Online функция БАТТЕКСТ может отображаться как #ИМЯ?. Чтобы исправить это, переключите язык интерфейса на русский в настройках браузера.
📊 Какой версии Excel вы пользуетесь?
2010-2013
2016-2019
2021/365
Excel Online
Другая

2. Универсальная формула без VBA для рублей и копеек

Если вам нужно корректное склонение валют ("1 рубль", "2 рубля", "5 рублей"), используйте эту комбинацию функций:

=ЕСЛИ(A1=0;"ноль рублей";

ТЕКСТ(ЦЕЛОЕ(A1);"[<=999] # \"руб\"[БЕЗ_УЧЕТА]\"

&ЕСЛИОШИБКА(ВЫБОР(МОД(ЦЕЛОЕ(A1);100);;"а";"а";"а";"";"";"";"";"";"ей";"ей";"ей";"ей";"ей");

ЕСЛИ(И(МОД(ЦЕЛОЕ(A1);100)>=11;МОД(ЦЕЛОЕ(A1);100)<=19);"ей";

ВЫБОР(МОД(ЦЕЛОЕ(A1);10);"ь";"я";"я";"я";"ей";"ей";"ей";"ей";"ей";"ей"))))

&ЕСЛИ(ОСТАТ(A1;1)>0;

" " & ТЕКСТ(ОКРУГЛ(ОСТАТ(A1;1)*100;0);"00") & " копе" &

ЕСЛИОШИБКА(ВЫБОР(МОД(ОКРУГЛ(ОСТАТ(A1;1)*100;0);10);"йка";"йки";"ек";"йки";"ек";"ек";"ек";"ек";"ек";"ек");

ЕСЛИ(МОД(ОКРУГЛ(ОСТАТ(A1;1)*100;0);10)=1;"йка";"ек"));"")

Эта формула:

  • 🔹 Правильно склоняет "рубль/рубля/рублей" и "копейка/копейки/копеек"
  • 🔹 Обрабатывает ноль ("ноль рублей" вместо пустой ячейки)
  • 🔹 Работает с дробными числами (например, 1234,56 → "одна тысяча двести тридцать четыре рубля 56 копеек")

Важно: Формула не поддерживает отрицательные числа. Для них нужно добавить внешнюю функцию ЕСЛИ, которая будет проверять знак.

Убедитесь, что ячейка с числом имеет формат "Числовой"|Проверьте разделитель целой и дробной части (точка или запятая)|Тестируйте формулу на значениях 1, 2, 5, 11, 21, 101|Проверьте работу с нулевым значением-->

3. Преобразование чисел прописью с помощью VBA

Для максимальной гибкости (поддержка отрицательных чисел, кастомизация валют) лучше использовать пользовательскую функцию на VBA. Вот готовый код, который нужно вставить в редактор макросов (Alt + F11):

Function NumToText(ByVal n As Double, Optional currency As String = "руб") As String

Dim rubles As Variant, kop As Variant

rubles = Array("рубль", "рубля", "рублей")

kop = Array("копейка", "копейки", "копеек")

If n = 0 Then

NumToText = "ноль " & rubles(2)

Exit Function

End If

Dim sign As String, intPart As Long, fracPart As Long

sign = IIf(n < 0, "минус ", "")

n = Abs(n)

intPart = Int(n)

fracPart = Round((n - intPart) * 100, 0)

Dim intText As String, fracText As String

intText = ConvertLessThanThousand(intPart, False)

fracText = IIf(fracPart > 0, " " & fracPart & " " & GetCurrencyForm(fracPart, kop), "")

NumToText = sign & intText & " " & GetCurrencyForm(intPart, rubles) & fracText

End Function

Function ConvertLessThanThousand(ByVal n As Long, ByVal female As Boolean) As String

Dim unitsM As Variant, unitsF As Variant, teens As Variant, tens As Variant

unitsM = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")

unitsF = Array("", "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")

teens = Array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", _

"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")

tens = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", _

"шестьдесят", "семьдесят", "восемьдесят", "девяносто")

Dim hundreds As Variant

hundreds = Array("", "сто", "двести", "триста", "четыреста", _

"пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")

Dim result As String, mod100 As Long, mod10 As Long

mod100 = n Mod 100

mod10 = n Mod 10

If n >= 100 Then

result = hundreds(n \ 100) & " "

n = n Mod 100

End If

If n >= 20 Then

result = result & tens(n \ 10) & " "

n = n Mod 10

ElseIf n >= 10 Then

result = result & teens(n - 9) & " "

n = 0

End If

If n > 0 Then

result = result & IIf(female, unitsF(n), unitsM(n))

End If

ConvertLessThanThousand = Trim(result)

End Function

Function GetCurrencyForm(ByVal n As Long, ByVal forms As Variant) As String

n = n Mod 100

If n >= 11 And n <= 19 Then

GetCurrencyForm = forms(2)

Else

Select Case n Mod 10

Case 1: GetCurrencyForm = forms(0)

Case 2, 3, 4: GetCurrencyForm = forms(1)

Case Else: GetCurrencyForm = forms(2)

End Select

End If

End Function

После вставки кода в модуль (Insert → Module) в Excel появится новая функция =NumToText(A1), которую можно использовать как стандартную. Примеры:

  • 🔹 =NumToText(1234,56) → "одна тысяча двести тридцать четыре рубля 56 копеек"
  • 🔹 =NumToText(-1005;"грн") → "минус одна тысяча пять гривен"
⚠️ Внимание: В Excel Online и мобильной версии макросы не работают. Для этих платформ используйте формулы из раздела 2.
Как изменить валюту по умолчанию?

По умолчанию функция использует "руб". Чтобы сменить валюту (например, на доллары), измените строку:

Optional currency As String = "руб"

на

Optional currency As String = "USD"

и добавьте соответствующие формы склонения в массив rubles (например, "доллар", "доллара", "долларов").

4. Обработка отрицательных чисел и нулей

Все приведённые выше методы (кроме VBA) некорректно обрабатывают отрицательные значения и ноль. Чтобы исправить это, оберните основную формулу в дополнительную проверку:

=ЕСЛИ(A1<0;"минус " & [ФОРМУЛА_ИЗ_РАЗДЕЛА_2];ЕСЛИ(A1=0;"ноль рублей";[ФОРМУЛА_ИЗ_РАЗДЕЛА_2]))

Например, для универсальной формулы из раздела 2 полный вариант будет:

=ЕСЛИ(A1<0;"минус " &

ЕСЛИ(ЦЕЛОЕ(-A1)=0;"ноль рублей";

ТЕКСТ(ЦЕЛОЕ(-A1);"[<=999] # \"руб\"[БЕЗ_УЧЕТА]\"...") & ...;

ЕСЛИ(A1=0;"ноль рублей";

ТЕКСТ(ЦЕЛОЕ(A1);"[<=999] # \"руб\"[БЕЗ_УЧЕТА]\"...") & ...))

Для нулевых значений в финансовых документах часто используют альтернативные формулировки:

  • 🔹 "0,00 (ноль рублей 00 копеек)"
  • 🔹 "Без НДС" (если речь о налогах)
  • 🔹 "---" (для визуального разделения)
Исходное число Результат без обработки Результат с обработкой
0 (пусто) "ноль рублей"
-123,45 #ЗНАЧ! "минус сто двадцать три рубля 45 копеек"
1000 "1000 руб." "одна тысяча рублей"

5. Адаптация для других валют (гривна, тенге, доллар)

Чтобы преобразовать число прописью для украинской гривны, замените в формулах массивы склонений:

  • 🔹 Для гривен: Array("гривна", "гривны", "гривен")
  • 🔹 Для копеек: Array("копейка", "копейки", "копеек") (остаётся без изменений)

Для казахстанского тенге используйте:

Array("тенге", "тенге", "тенге")

(валюта не склоняется по числам).

Для долларов США подойдёт:

Array("доллар", "доллара", "долларов")

и для центов:

Array("цент", "цента", "центов")

Пример формулы для гривен (на основе универсальной формулы из раздела 2):

=ЕСЛИ(A1=0;"ноль гривен";

ТЕКСТ(ЦЕЛОЕ(A1);"[<=999] # \"грн\"[БЕЗ_УЧЕТА]\"..."

&ЕСЛИОШИБКА(ВЫБОР(МОД(ЦЕЛОЕ(A1);100);;"ы";"ы";"ы";"";"";"";"";"";"н";"н";"н";"н";"н");

ЕСЛИ(И(МОД(ЦЕЛОЕ(A1);100)>=11;МОД(ЦЕЛОЕ(A1);100)<=19);"н";

ВЫБОР(МОД(ЦЕЛОЕ(A1);10);"а";"ы";"ы";"ы";"н";"н";"н";"н";"н";"н"))))

&ЕСЛИ(ОСТАТ(A1;1)>0;

" " & ТЕКСТ(ОКРУГЛ(ОСТАТ(A1;1)*100;0);"00") & " копе" &

ЕСЛИОШИБКА(ВЫБОР(МОД(ОКРУГЛ(ОСТАТ(A1;1)*100;0);10);"йка";"йки";"ек";"йки";"ек";"ек";"ек";"ек";"ек";"ек");

ЕСЛИ(МОД(ОКРУГЛ(ОСТАТ(A1;1)*100;0);10)=1;"йка";"ек"));"")

6. Альтернативные способы: надстройки и Power Query

Если формулы кажутся слишком сложными, рассмотрите альтернативные методы:

1. Надстройки для Excel:

  • 🔹 NumberToText — бесплатная надстройка с поддержкой 20+ языков
  • 🔹 RubToText — специализирована на российском рубле
  • 🔹 Kutools for Excel — платный пакет с функцией =NUMWORD

2. Power Query:

В Excel 2016+ можно использовать Power Query для преобразования чисел в текст. Алгоритм:

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

3. Онлайн-конвертеры:

Для разовых задач подойдут сервисы вроде:

  • 🔹 Num2Word (поддерживает Excel-формулы)
  • 🔹 Calculator.net (только просмотр)
⚠️ Внимание: Онлайн-сервисы не гарантируют конфиденциальность данных. Не используйте их для обработки финансовой отчётности с персональной информацией.

FAQ: Частые вопросы и ошибки

🔹 Почему формула выдаёт "#ИМЯ?"

Ошибка "#ИМЯ?" возникает по трём причинам:

  1. Опечатка в названии функции (например, БАТЕКСТ вместо БАТТЕКСТ).
  2. Отсутствует поддержка функции в вашей версии Excel (актуально для Excel Online).
  3. Язык интерфейса не русский — переключите в настройках на "Русский (Россия)".

Решение: проверьте синтаксис и настройки языка в Файл → Параметры → Язык.

🔹 Как написать прописью число с копейками в Word?

В Microsoft Word нет встроенных функций для этой задачи, но можно:

  1. Скопировать результат из Excel (см. раздел 2).
  2. Использовать макрос для Word (аналогичный VBA-коду из раздела 3).
  3. Установить надстройку NumberToText, которая работает и в Word.
🔹 Можно ли сделать так, чтобы "рубли" писались с заглавной буквы?

Да, используйте функцию ПРОПИСН для первой буквы или ПРОПНАЧ для заглавной буквы в каждом слове:

=ПРОПНАЧ([ФОРМУЛА_ИЗ_РАЗДЕЛА_2])

Пример результата: "Одна Тысяча Двести Тридцать Четыре Рубля".

🔹 Почему копейки отображаются как "00 копеек", даже если их нет?

Это особенность формулы. Чтобы скрыть нулевые копейки, модифицируйте последний блок:

&ЕСЛИ(ОСТАТ(A1;1)>0; " " & ...; "")

Теперь копейки будут показываться только если они ненулевые.

🔹 Как автоматически обновлять пропись при изменении числа?

Все приведённые формулы автоматически пересчитываются при изменении исходного числа. Если обновление не происходит:

  1. Проверьте настройки вычислений: Формулы → Вычисление → Автоматически.
  2. Для VBA-функций убедитесь, что макросы разрешены: Файл → Параметры → Центр управления безопасностью → Параметры центра....