Преобразование чисел в текстовый формат — одна из самых востребованных операций в Microsoft Excel, особенно когда речь идёт о финансовых документах, договорах или отчётах. Представьте: вам нужно вывести сумму 1 245 рублей не цифрами, а прописью — "одна тысяча двести сорок пять рублей". Вручную переписывать сотни строк? Это нерационально. К счастью, в Excel есть несколько способов автоматизировать этот процесс — от встроенных функций до пользовательских макросов.
Но здесь кроется подвох: стандартных инструментов для такой задачи в Excel нет. Придётся комбинировать функции, писать код на VBA или использовать надстройки. В этой статье мы разберём все актуальные методы — от самых простых (для чисел до 999) до универсальных (для любых сумм с копейками). А ещё вы узнаете, как избежать типичных ошибок, например, когда "пятьсот" превращается в "пять сотен" или "один миллион" пишется с ошибкой.
Если вы работаете с Excel 365 или Excel 2021, у вас есть преимущество: некоторые новые функции (например, TEXTAFTER и TEXTBEFORE) упростят задачу. Для старых версий (2010–2019) придётся использовать обходные пути. Но не переживайте — мы подробно разберём варианты для всех версий.
Прежде чем переходить к инструкциям, ответьте на один вопрос:
1. Преобразование чисел до 999: простой способ без макросов
Если вам нужно конвертировать небольшие числа (от 0 до 999) в текстовый формат, можно обойтись без программирования. Достаточно использовать комбинацию функций ИНДЕКС, ПОИСКПОЗ и ЕСЛИОШИБКА. Этот метод подходит для Excel 2010 и новее.
Создайте отдельную таблицу со соответствиями чисел и их текстовых эквивалентов (например, в диапазоне A1:B100), где в столбце A будут цифры (1, 2, ..., 999), а в столбце B — их прописные варианты ("один", "два", ..., "девятьсот девяносто девять"). Затем используйте формулу:
=ЕСЛИОШИБКА(ИНДЕКС($B$1:$B$100; ПОИСКПОЗ(A1; $A$1:$A$100; 0)); "Число вне диапазона")
Где A1 — ячейка с исходным числом. Минус метода: придётся вручную заполнить таблицу соответствий. Зато он работает без макросов и не требует знаний VBA.
- ✅ Плюсы: не нужны макросы, работает во всех версиях Excel.
- ❌ Минусы: ограничение на 999, ручной ввод соответствий.
- 🔄 Альтернатива: для чисел до 99 можно использовать вложенные
ЕСЛИ, но формула получится громоздкой.
2. Функция ЧИСЛО.ПРОПИСЬЮ: почему её нет в Excel и что делать
Многие пользователи удивляются, почему в Excel нет встроенной функции вроде ЧИСЛО.ПРОПИСЬЮ, как в 1С или Word. Причина проста: Microsoft считает, что это задача для надстроек или пользовательского кода. Однако есть обходной путь — использовать Power Query (доступен в Excel 2016 и новее).
Алгоритм такой:
- Выделите диапазон с числами.
- Перейдите на вкладку
Данные→Получить данные→Из таблицы/диапазона. - В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой на языке M:
= if [Column1] = 0 then "ноль"
else if [Column1] < 0 then "минус " & Number.ToText(Abs([Column1]), "ru-RU")
else Number.ToText([Column1], "ru-RU")
Эта формула преобразует числа в текст на русском языке, но не подходит для денежных сумм с копейками — только для целых чисел. После применения нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.
⚠️ Внимание: Функция Number.ToText в Power Query поддерживает не все языки. Для украинского или казахского придётся писать свой код.
3. Макрос на VBA: универсальное решение для любых чисел
Самый надёжный способ — создать пользовательскую функцию на VBA. Она будет работать с любыми числами, включая дробные (например, 1 245,67 рублей). Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и скопируйте этот код:
Function NumToText(ByVal n As Double) As String
Dim Rubles As Variant, Kop As Variant
Dim Temp As String
Rubles = Array("", "", "тысяч", "тысяча", "тысячи", "тысяча", "тысячи", "тысячи", "тысяч", "тысяч")
Kop = Array("копеек", "копейка", "копейки", "копейки", "копейки", "копеек", "копеек", "копеек", "копеек", "копеек")
n = Round(n, 2)
Temp = Format(n, "0.00")
If InStr(Temp, ".") > 0 Then
NumToText = ConvertLessThanOneLeft(Temp, Rubles) & " рублей " & _
ConvertLessThanOneRight(Mid(Temp, InStr(Temp, ".") + 1), Kop)
Else
NumToText = ConvertLessThanOneLeft(Temp, Rubles) & " рублей 00 копеек"
End If
End Function
Function ConvertLessThanOneLeft(ByVal num As String, ByRef Rubles As Variant) As String
' ... (здесь должен быть полный код функции, упрощён для примера)
End Function
Function ConvertLessThanOneRight(ByVal num As String, ByRef Kop As Variant) As String
' ... (код для обработки копеек)
End Function
После вставки кода закройте редактор. Теперь в Excel можно использовать функцию =NumToText(A1), где A1 — ячейка с числом. Функция вернёт сумму прописью, например: "одна тысяча двести сорок пять рублей 67 копеек".
- 🔧 Настройка: Чтобы функция работала с другими валютами (доллары, евро), измените слова "рублей" и "копеек" в коде.
- 📌 Ограничение: Максимальное число —
999 999 999,99. - 🛡️ Безопасность: Макросы могут быть заблокированы. Разрешите их выполнение в
Файл → Параметры → Центр управления безопасностью.
Макросы разрешены в настройках Excel|Файл сохранён как .xlsm (с поддержкой макросов)|Код вставлен в стандартный модуль (не в лист!)|Тестирование проведено на числе с копейками (например, 123,45)-->
4. Надстройки для Excel: готовые решения
Если не хочется возиться с кодом, можно установить надстройку. Самые популярные:
- 📌 NumWord — бесплатная надстройка для русского и английского языков. Скачать можно на ExtenOffice.
- 💰 Рубль — специализирована на финансовых суммах, поддерживает копейки и правильные падежи ("рубль", "рубля", "рублей").
- 🌍 Number to Words — мультиязычная надстройка (включает украинский, казахский, английский).
Установка стандартная:
- Скачайте файл надстройки (
.xlam). - В Excel перейдите в
Файл → Параметры → Надстройки. - Нажмите
Перейти...→Обзори выберите скачанный файл.
После установки в меню появится новая вкладка (например, "NumWord"), где можно выбрать формат вывода.
⚠️ Внимание: Надстройки от сторонних разработчиков могут содержать вредоносный код. Скачивайте только с официальных сайтов или проверенных источников (например, Microsoft AppSource).
Как удалить надстройку, если она не понадобилась?
Перейдите в Файл → Параметры → Надстройки, выберите ненужную надстройку и нажмите Удалить. Если кнопки нет — закройте Excel, удалите файл .xlam вручную из папки %APPDATA%\Microsoft\AddIns, затем перезапустите программу.
5. Ошибки и их исправление
Даже с готовыми решениями пользователи сталкиваются с проблемами. Вот самые частые:
| Ошибка | Причина | Решение |
|---|---|---|
| #ИМЯ? | Функция NumToText не распознаётся |
Проверьте, сохранён ли файл как .xlsm и разрешены ли макросы |
| "Двести пятьдесят шесть рублей 0 копеек" | Некорректная обработка копеек | Измените формат ячейки на Денежный или округлите число до 2 знаков |
| "Минус одна тысяча рублей" | Отрицательные числа обрабатываются неверно | Добавьте в код проверку на знак: If n < 0 Then NumToText = "минус " & Convert(Abs(n)) |
| Надстройка не устанавливается | Блокировка администратором или антивирусом | Запустите Excel от имени администратора или добавьте исключение в антивирус |
Ещё одна распространённая проблема — неправильные падежи (например, "пятьсот рублей" вместо "пятьсот рублей" — здесь ошибки нет, но многие ошибочно пишут "пять сотен рублей"). Чтобы этого избежать, используйте проверенные шаблоны кода или надстройки с поддержкой русского языка.
6. Альтернативные методы: онлайн-сервисы и Google Таблицы
Если Excel недоступен или задача разовая, можно воспользоваться онлайн-сервисами:
- 🌐 NumWord — конвертер чисел в слова на 20+ языках.
- 💵 Калькулятор.ру — поддерживает рубли, доллары, евро.
- 📊 Google Таблицы — используйте функцию
=SPLIT(ARRAYFORMULA(TEXTJOIN(" "; TRUE; SWITCH(...))); " ")(полный код здесь).
Преимущество онлайн-сервисов — не нужно ничего устанавливать. Недостаток: конфиденциальность. Если вы работаете с финансовыми данными, лучше использовать офлайн-методы.
FAQ: Частые вопросы
Можно ли преобразовать числа в слова без макросов и надстроек?
Да, но только для чисел до 999 (см. первый раздел). Для больших чисел или денежных сумм без VBA или Power Query не обойтись.
Почему функция возвращает "ноль рублей", даже если в ячейке пусто?
Это происходит, если ячейка форматирована как число, но пустая. Добавьте проверку в код: If IsEmpty(n) Or n = 0 Then NumToText = "".
Как сделать, чтобы "рубль" склонялся правильно (рубль/рубля/рублей)?
Используйте этот фрагмент кода в макросе:
Select Case n Mod 100
Case 11 To 19: Rub = "рублей"
Case Else
Select Case n Mod 10
Case 1: Rub = "рубль"
Case 2 To 4: Rub = "рубля"
Case Else: Rub = "рублей"
End Select
End Select
Можно ли использовать эту функцию в Google Таблицах?
Нет, Google Apps Script не поддерживает прямую конвертацию чисел в слова на русском. Но можно написать свою функцию или использовать =IMPORTPANGE для подключения данных из Excel.
Как преобразовать числа в слова на украинском или казахском?
Для украинского измените массивы слов в коде VBA на:
Rubles = Array("", "", "тисяч", "тисяча", "тисячі", "тисячі", "тисяч", "тисяч", "тисяч", "тисяч")
Kop = Array("копійок", "копійка", "копійки", "копійки", "копійок", "копійок", "копійок", "копійок", "копійок", "копійок")
Для казахского потребуется полная переработка функции под правила языка.