Преобразование числовых значений в текстовый формат (так называемая "распись чисел прописью") — одна из самых востребованных задач в 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.
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), которую можно использовать как стандартную.
Инструкция по установке:
- Скачайте файл надстройки
ЧислоПрописью.xlamс официального сайта. - Откройте Excel и перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Управление: Надстройки Excel→ нажмитеПерейти. - В открывшемся окне нажмите
Обзор, выберите скачанный файл и подтвердите установку. - После установки в списке функций появится категория
Определённые пользователемс новой функцией.
Критическое замечание: Перед установкой надстройки проверьте её на вирусы (например, через VirusTotal) и убедитесь, что источник надёжен. Некоторые "пиратские" версии могут содержать вредоносный VBA-код.
Перейдите в Как удалить надстройку, если она работает некорректно?
Файл → Параметры → Надстройки, выберите ЧислоПрописью в списке и нажмите Перейти. В открывшемся окне снимите галочку с надстройки и подтвердите удаление. Если Excel выдаёт ошибки после удаления, перезапустите программу или очистите временные файлы через %appdata%\Microsoft\Excel\XLSTART.
4. Метод 3: VBA-макрос для расписи чисел (гибкое решение)
Для пользователей, готовых работать с Visual Basic for Applications, самый универсальный способ — собственный VBA-макрос. Он позволяет:
- 🔧 Настраивать формат вывода (например, с валютами или без них).
- 📈 Обрабатывать числа любой длины (включая миллиарды).
- 🔄 Интегрировать распись в другие макросы (например, для автоматического формирования документов).
Ниже приведён готовый код макроса для русскоязычной расписи (включая рубли и копейки). Скопируйте его в редактор VBA (Alt + F11 → Insert → 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.
Алгоритм действий:
- Перейдите на вкладку
Данные→Получить данные→Из других источников→Пустой запрос. - В открывшемся редакторе Power Query перейдите на вкладку
Домой→Дополнительно→Редактор дополнительных функций. - Вставьте следующий код на языке 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
- Сохраните функцию под именем
fnNumberToText. - Теперь в 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. Попробуйте:
- Обновить надстройку до последней версии.
- Удалить и установить её заново.
- Проверьте настройки безопасности макросов (
Файл → Параметры → Центр управления безопасностью).
❓ Как расписать число в Word из Excel?
Есть два способа:
- Копирование результата: Распишите число в Excel (любым методом), скопируйте текст и вставьте в Word.
- Автоматизация через 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 копеек".