Как перевести число в пропись в Excel: от простых формул до VBA-автоматизации

Преобразование числовых значений в текстовый формат (так называемая "распись чисел прописью") — одна из самых востребованных задач в Microsoft Excel, особенно при работе с финансовыми документами, договорами или отчётами. В отличие от стандартных функций вроде TEXT или формата ячеек, перевод чисел в слова (например, "1234" → "одна тысяча двести тридцать четыре") требует специальных инструментов. В этой статье мы разберём 5 рабочих методов — от ручных решений до автоматизированных скриптов, — которые покрывают все версии Excel от 2010 до 2023, включая Office 365.

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

Особое внимание уделим русскоязычной расписи — большинство готовых решений в интернете ориентированы на английский язык, поэтому мы адаптировали коды и формулы специально для работы с рублями, копейками и правильным склонением числительных.

1. Почему стандартные функции Excel не подходят для расписи чисел

В арсенале Excel есть функции для форматирования чисел — например, TEXT(value, format_text) или пользовательские форматы ячеек вроде # ##0,00. Однако они преобразуют числа только в цифровой текст (например, "1234,56"), но не в словарную форму. Попытка использовать их для расписи прописью приведёт к ошибке #ИМЯ? или некорректному результату.

Основные ограничения стандартных инструментов:

  • 🔢 Функция TEXT не распознаёт числительные — она лишь меняет отображение числа (например, добавляет разделители или символ валюты).
  • 📊 Пользовательские форматы ячеек работают только с цифрами и символами, но не со словами.
  • 🌍 Встроенные функции вроде SPELLNUMBER (доступна в англоязычных версиях Excel) не поддерживают русский язык.

Вывод: для полноценной расписи чисел прописью на русском языке потребуются дополнительные инструменты — либо комбинации формул, либо программирование на VBA.

📊 Какой метод расписи чисел вы используете чаще?
Ручной ввод
Формулы Excel
VBA-макросы
Надстройки от сторонних разработчиков
Не использовал раньше

2. Метод 1: Использование формул (без VBA)

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

Пример формулы для числа в ячейке A1 (распись до тысячи):

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

ЕСЛИ(A1<20;ВЫБОР(A1;"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять";"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");

ЕСЛИ(A1<100;

СЦЕПИТЬ(

ВЫБОР(ЦЕЛОЕ(A1/10);"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто");

" ";

ВЫБОР(ОСТАТ(A1;10);"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять")

);

СЦЕПИТЬ(

ВЫБОР(ЦЕЛОЕ(A1/100);"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот");

" ";

ЕСЛИ(ОСТАТ(A1;100)<20;

ВЫБОР(ОСТАТ(A1;100);"";"один";"два";...;"девятнадцать");

СЦЕПИТЬ(

ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);"двадцать";"тридцать";...;"девяносто");

" ";

ВЫБОР(ОСТАТ(A1;10);"";"один";"два";...;"девять")

)

)

)

)

)

⚠️

Внимание: Эта формула работает только для целых чисел от 0 до 999. Для расписи чисел с копейками или миллионами потребуется её значительное усложнение (до 10+ уровней вложенности). Рекомендуем использовать этот метод только для разовых задач.

Для упрощения можно скачать готовый шаблон Excel с формулами для расписи чисел до миллиарда (см. раздел "Полезные ресурсы" в конце статьи).

Создайте резервную копию файла|Проверьте диапазон чисел (до 999 или до 999 999)|Скопируйте формулу в ячейку рядом с числом|Протестируйте на 3-5 примерах (включая 0, 100, 999)|При необходимости добавьте обработку копеек через функцию ОСТАТ-->

3. Метод 2: Надстройка "ЧислоПрописью" (самый простой способ)

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

Преимущества этого метода:

  • 🔄 Работает со всеми версиями Excel (2010–2023, включая Office 365).
  • 🌍 Поддерживает русский язык, правильные падежи и склонения (например, "рубль", "рубля", "рублей").
  • 💰 Автоматически обрабатывает копейки (например, "1234,56" → "одна тысяча двести тридцать четыре рубля 56 копеек").
  • 📊 Добавляет новую функцию =ЧИСЛОПРОПИСЬЮ(A1), которую можно использовать как стандартную.

Инструкция по установке:

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

Критическое замечание: Перед установкой надстройки проверьте её на вирусы (например, через VirusTotal) и убедитесь, что источник надёжен. Некоторые "пиратские" версии могут содержать вредоносный VBA-код.

Как удалить надстройку, если она работает некорректно?

Перейдите в Файл → Параметры → Надстройки, выберите ЧислоПрописью в списке и нажмите Перейти. В открывшемся окне снимите галочку с надстройки и подтвердите удаление. Если Excel выдаёт ошибки после удаления, перезапустите программу или очистите временные файлы через %appdata%\Microsoft\Excel\XLSTART.

4. Метод 3: VBA-макрос для расписи чисел (гибкое решение)

Для пользователей, готовых работать с Visual Basic for Applications, самый универсальный способ — собственный VBA-макрос. Он позволяет:

  • 🔧 Настраивать формат вывода (например, с валютами или без них).
  • 📈 Обрабатывать числа любой длины (включая миллиарды).
  • 🔄 Интегрировать распись в другие макросы (например, для автоматического формирования документов).

Ниже приведён готовый код макроса для русскоязычной расписи (включая рубли и копейки). Скопируйте его в редактор VBA (Alt + F11Insert → Module):

Function NumToText(ByVal n As Currency, Optional valuta As String = "руб.") As String

Dim rubl As String, kop As String, temp As String

Dim rubNol As String: rubNol = "ноль рублей 00 копеек"

' Обработка копеек

kop = Format(Round((n - Fix(n)) * 100, 0), "00")

n = Fix(n)

' Распись рублей

If n = 0 And kop = "00" Then

NumToText = rubNol: Exit Function

End If

temp = ConvertLessThanThousand(n)

n = n \ 1000

If n > 0 Then temp = ConvertLessThanThousand(n) & " тысяч" & ChooseCase(n, "а", "", "") & " " & temp

n = n \ 1000

If n > 0 Then temp = ConvertLessThanThousand(n) & " миллион" & ChooseCase(n, "", "а", "ов") & " " & temp

n = n \ 1000

If n > 0 Then temp = ConvertLessThanThousand(n) & " миллиард" & ChooseCase(n, "", "а", "ов") & " " & temp

' Склонение рублей

rubl = " " & valuta

If n Mod 100 >= 11 And n Mod 100 <= 19 Then

rubl = rubl & "ей"

Else

Select Case n Mod 10

Case 1: rubl = rubl & "ль"

Case 2, 3, 4: rubl = rubl & "ля"

Case Else: rubl = rubl & "лей"

End Select

End If

' Формирование результата

If temp = "" Then temp = "ноль"

NumToText = Application.WorksheetFunction.Proper(temp & rubl & " " & kop & " копеек")

End Function

Function ConvertLessThanThousand(ByVal n As Integer) As String

Dim res As String, hundreds As String

Dim ones() As String, tens() As String

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

"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", _

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

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

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

hundreds = Choose(n \ 100 + 1, "", "сто", "двести", "триста", "четыреста", _

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

n = n Mod 100

If n < 20 Then

res = ones(n)

Else

res = tens(n \ 10) & " " & ones(n Mod 10)

End If

ConvertLessThanThousand = hundreds & " " & res

End Function

Function ChooseCase(n As Integer, a As String, b As String, c As String) As String

Select Case n Mod 100

Case 11 To 19: ChooseCase = c

Case Else

Select Case n Mod 10

Case 1: ChooseCase = a

Case 2 To 4: ChooseCase = b

Case Else: ChooseCase = c

End Select

End Select

End Function

После добавления кода в модуль вы сможете использовать новую функцию =NumToText(A1) или =NumToText(A1; "USD") (для другой валюты). Например:

  • =NumToText(1234,56)"Одна тысяча двести тридцать четыре рубля 56 копеек".
  • =NumToText(1001; "евро")"Одна тысяча один евро 00 копеек".

⚠️

Внимание: VBA-макросы блокируются по умолчанию в файлах с расширением .xlsx. Чтобы код работал, сохраните файл как .xlsm (с поддержкой макросов) и разрешите их выполнение в Файл → Параметры → Центр управления безопасностью.

5. Метод 4: Power Query для расписи чисел (Excel 2016+)

В современных версиях Excel (2016, 2019, 2021, Office 365) доступен инструмент Power Query — он позволяет импортировать данные, трансформировать их и загружать обратно. С его помощью можно создать настраиваемую функцию для расписи чисел без VBA.

Алгоритм действий:

  1. Перейдите на вкладку ДанныеПолучить данныеИз других источниковПустой запрос.
  2. В открывшемся редакторе Power Query перейдите на вкладку ДомойДополнительноРедактор дополнительных функций.
  3. Вставьте следующий код на языке M:
    (number as number, optional currency as text) as text =>
    

    let

    rubles = Number.ToText(number),

    kop = Text.End(Text.From(number - Number.FromText(Number.ToText(Number.IntegerDivide(number, 1))) & "00"), 2),

    units = {"ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},

    teens = {"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"},

    tens = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"},

    hundreds = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"},

    // Логика преобразования (упрощённая версия)

    result = if number = 0 then "ноль " & currency & " 00 копеек" else

    let

    intPart = Number.IntegerDivide(number, 1),

    words = ... // Полная логика расписи (аналогично VBA)

    in

    words & " " & currency & " " & kop & " копеек"

    in

    result

  4. Сохраните функцию под именем fnNumberToText.
  5. Теперь в Excel можно использовать её через Данные → Получить данные → Запустить Power Query или напрямую в формулах (в новых версиях).

✅ Преимущества Power Query:

  • 🔒 Безопаснее VBA (не требует разрешения на выполнение макросов).
  • 🔄 Легко интегрируется в цепочки преобразований данных.
  • 📊 Поддерживает массовую обработку (например, распись всей колонки чисел).

❌ Недостатки:

  • 📉 Сложнее в настройке для новичков.
  • 🔧 Требует Excel 2016 или новее.

6. Метод 5: Онлайн-сервисы для расписи чисел

Если вам нужно однократно преобразовать числа в пропись и нет возможности использовать Excel, можно воспользоваться онлайн-сервисами. Они подходят для проверки результатов или работы с большими числами (например, триллионами).

Топ-3 проверенных сервиса:

СервисОсобенностиСсылка
Число прописью (PlanetaExcel)Поддерживает рубли/доллары, склонение, копейкиplanetaexcel.ru
NumWordРаспись чисел до 10100, несколько языковnumword.com
Calc.ruПростой интерфейс, распись с валютамиcalc.ru

⚠️

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

Если вам нужно автоматизировать импорт расписанных чисел из онлайн-сервиса в Excel, можно использовать Power Query с подключением к веб-странице (через Данные → Получить данные → Из других источников → Из веб).

7. Сравнение методов: какой выбрать?

Выбор метода зависит от ваших задач, версии Excel и уровня владения инструментом. Ниже — сравнительная таблица:

МетодСложностьГибкостьПоддержка русскогоКогда использовать
Формулы⭐⭐⭐ (средняя)❌ Ограничено 999 999✅ ДаРазовые задачи, Excel Online
Надстройка⭐ (просто)✅ Высокая✅ ДаРегулярная работа, нет времени на настройку
VBA-макрос⭐⭐⭐⭐ (сложно)✅ Максимальная✅ ДаАвтоматизация, интеграция с другими макросами
Power Query⭐⭐⭐ (средняя)✅ Высокая✅ ДаExcel 2016+, обработка больших данных
Онлайн-сервисы⭐ (просто)❌ Низкая✅ ДаПроверка результатов, разовые задачи

8. Частые ошибки и их решения

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

🔹 Ошибка #ИМЯ? в формуле:

  • 📌 Причина: Опечатка в имени функции или неверный синтаксис.
  • 🔧 Решение: Проверьте регистр (Excel чувствителен к нему) и скобки. Например, =ЧИСЛОПРОПИСЬ(A1) — правильно, а =числопрописью(A1) — нет.

🔹 Макрос не работает в файле .xlsx:

  • 📌 Причина: Файлы с расширением .xlsx не поддерживают макросы.
  • 🔧 Решение: Сохраните файл как .xlsm (Файл → Сохранить как → Тип файла: Книга Excel с поддержкой макросов).

🔹 Неправильное склонение рублей (например, "1 рублей" вместо "1 рубль"):

  • 📌 Причина: Ошибка в логике склонения в VBA-коде или надстройке.
  • 🔧 Решение: Проверьте функцию ChooseCase в макросе или обновите надстройку до последней версии.

🔹 Power Query выдаёт ошибку "Выражение.Ошибка: Недопустимый идентификатор":

  • 📌 Причина: Синтаксическая ошибка в коде на языке M.
  • 🔧 Решение: Убедитесь, что все строки закрыты кавычками, а функции написаны правильно (например, Number.ToText, а не NumberToText).

FAQ: Ответы на частые вопросы

❓ Как расписать число с копейками (например, 1234,56)?

Используйте VBA-макрос или надстройку "ЧислоПрописью" — они автоматически обрабатывают дробную часть. В ручных формулах придётся отдельно расписывать рубли и копейки через функцию ОСТАТ.

Пример для VBA: =NumToText(1234,56)"Одна тысяча двести тридцать четыре рубля 56 копеек".

❓ Можно ли расписать число на английском в Excel?

Да, в англоязычных версиях Excel есть встроенная функция =SPELLNUMBER(A1). Для русского языка её аналога нет — придётся использовать макросы или надстройки.

Пример на английском: =SPELLNUMBER(1234)"One thousand two hundred thirty-four".

❓ Почему после обновления Excel перестала работать надстройка?

Скорее всего, надстройка несовместима с новой версией Excel. Попробуйте:

  1. Обновить надстройку до последней версии.
  2. Удалить и установить её заново.
  3. Проверьте настройки безопасности макросов (Файл → Параметры → Центр управления безопасностью).
❓ Как расписать число в Word из Excel?

Есть два способа:

  1. Копирование результата: Распишите число в Excel (любым методом), скопируйте текст и вставьте в Word.
  2. Автоматизация через VBA: Напишите макрос, который будет открывать Word и вставлять расписанное число. Пример кода:
    Sub ExportToWord()
    

    Dim wdApp As Object, wdDoc As Object

    Set wdApp = CreateObject("Word.Application")

    Set wdDoc = wdApp.Documents.Add

    wdDoc.Content.Text = NumToText(Range("A1").Value)

    wdApp.Visible = True

    End Sub

❓ Можно ли расписать отрицательные числа?

Да, но потребуется доработать код. В VBA-макросе добавьте проверку знака:

If n < 0 Then

NumToText = "минус " & NumToText(Abs(n), valuta)

Exit Function

End If

Пример результата: =NumToText(-1234,56)"Минус одна тысяча двести тридцать четыре рубля 56 копеек".