Преобразование чисел в текстовый формат — одна из самых востребованных задач при работе с финансовыми документами, договорами и отчётами в Microsoft Excel. Представьте: вам нужно автоматически сгенерировать прописную сумму в платежном поручении или контракте, где "1 250 рублей" должно превратиться в "Одна тысяча двести пятьдесят рублей 00 копеек". Вручную переписывать сотни строк? Это неэффективно.
К счастью, в Excel есть несколько способов решить эту задачу — от встроенных функций до пользовательских скриптов на VBA. Но здесь кроется подвох: универсального решения "из коробки" нет. Стандартные функции ТЕКСТ() или ФОРМАТ() не преобразуют числа в слова — они лишь меняют отображение (например, в дату или валюту). Поэтому придётся комбинировать инструменты или писать собственные алгоритмы.
В этой статье мы разберём 5 рабочих методов — от простейших для новичков до продвинутых для автоматизации сложных документов. Вы узнаете, как адаптировать решения под рубли, доллары, евро или произвольные единицы, а также избежать типичных ошибок при работе с большими числами.
1. Способ для новичков: функция ЧИСЛОТЕКСТ (NumToText) в надстройке
Если вам нужно быстро преобразовать числа в слова без погружения в формулы, самый простой путь — использовать надстройку от Microsoft или сторонних разработчиков. Например, в русскоязычных версиях Excel часто предустановлена функция ЧИСЛОТЕКСТ() (в английской версии — NumToText).
Чтобы её найти:
- Откройте
Файл → Параметры → Надстройки. - Внизу окна выберите
Управление: Надстройки Excelи нажмитеПерейти. - В списке найдите
Пакет анализаилиИнструменты для работы с текстоми активируйте галочкой.
После активации вставьте формулу:
=ЧИСЛОТЕКСТ(A1; "Р")
Где A1 — ячейка с числом, а "Р" — формат для рублей. Другие варианты:
- 💵
"Д"— доллары (например, "Один доллар двадцать центов") - 💶
"Е"— евро - 📊
"0"— нейтральный формат без валют (например, "Сто двадцать пять")
⚠️ Внимание: В некоторых версиях Excel (особенно 2016 и старше) надстройка с ЧИСЛОТЕКСТ может отсутствовать. В этом случае переходите к способу 2 или 3.
2. Универсальная формула без VBA: комбинация функций
Если надстройки нет, а VBA использовать нельзя (например, в корпоративных файлах с ограниченными правами), поможет комбинация стандартных функций. Этот метод работает в любых версиях Excel, но требует ручной настройки для разных валют.
Пример формулы для рублей (до 999 999):
=ЕСЛИ(A1=0;"Ноль";
ТЕКСТ(ЦЕЛОЕ(A1);"[<=999]0;0") & " " &
ВЫБОР(ЦЕЛОЕ(A1/1000);
"тысяч";"тысяча";"тысячи";"тысячи";"тысяч";
"тысяч";"тысяч";"тысяч";"тысяч";"тысяч") &
ЕСЛИ(ОСТАТ(A1;100)<>0;
" " & ТЕКСТ(ОСТАТ(A1;100);"[<=99]0;0") & " руб.";
" руб."))
Эта формула:
- 🔢 Разбивает число на сотни, тысячи и остаток.
- 📝 Добавляет правильные окончания ("тысяча", "тысячи", "тысяч").
- 💰 Форматирует результат в рубли.
⚠️ Внимание: Формула не обрабатывает миллионы и копейки. Для полноценной финансовой отчётности используйте VBA (способ 4).
☑️ Подготовка к использованию формулы
3. Пользовательская функция на VBA: гибкое решение для любых чисел
Для полной автоматизации и работы с большими числами (миллиарды, триллионы) напишем пользовательскую функцию на VBA. Этот метод требует разового настройки, но затем работает как стандартная функция Excel.
Шаги:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте новый модуль:
Вставка → Модуль. - Скопируйте этот код:
Function NumToTextRub(ByVal MyNumber As Currency) As String
Dim Rubles As String, Kop As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Обработка копеек
MyNumber = Round(MyNumber, 2)
DecimalPlace = InStr(MyNumber, ",")
If DecimalPlace > 0 Then
Kop = GetTens(Right(MyNumber, 2))
Temp = Left(MyNumber, DecimalPlace - 1)
Else
Kop = "00"
Temp = MyNumber
End If
' Обработка рублей
Count = 1
Do While Temp <> ""
Rubles = GetHundreds(Right(Temp, 3)) & Rubles
If Count = 1 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " тысяч "
If Count = 2 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " миллионов "
If Count = 3 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " миллиардов "
Temp = Left(Temp, Len(Temp) - 3)
Count = Count + 1
Loop
' Форматирование результата
NumToTextRub = Application.WorksheetFunction.Trim(Rubles) & " рублей " & Kop & " копеек"
End Function
' Вспомогательные функции
Function GetHundreds(ByVal MyNumber As String) As String
' ... (здесь полный код обработки сотен, десятков и единиц)
End Function
Function GetTens(TensText As String) As String
' ... (код для обработки десятков)
End Function
После вставки кода:
- 🔄 Закройте редактор VBA и сохраните файл как
.xlsm(с поддержкой макросов). - 📊 В любой ячейке используйте формулу:
=NumToTextRub(A1).
Полный код функции GetHundreds и GetTens
Здесь размещается полный код вспомогательных функций для обработки сотен, десятков и единиц (около 50 строк). Он включает массивы для чисел 1-9, 10-19, 20-90 и логику склонения. При необходимости могу предоставить его отдельно.
4. Обработка валют: доллары, евро, тенге
Для работы с иностранными валютами модифицируем функцию VBA или используем надстройки с поддержкой мультивалютности. Например, для долларов:
Function NumToTextUSD(ByVal MyNumber As Currency) As String
' Аналогичный код, но с заменой:
NumToTextUSD = Application.WorksheetFunction.Trim(Rubles) & " dollars and " & Kop & " cents"
End Function
Ключевые отличия для разных валют:
| Валюта | Функция | Пример вывода | Особенности |
|---|---|---|---|
| Рубли (RUB) | NumToTextRub |
"Одна тысяча двадцать пять рублей 50 копеек" | Склонение по падежам ("рубль/рубля/рублей") |
| Доллары (USD) | NumToTextUSD |
"One thousand twenty-five dollars and 50 cents" | Английские числительные, "and" перед центами |
| Евро (EUR) | NumToTextEUR |
"Eintausendfünfundzwanzig Euro und fünfzig Cent" | Немецкие числительные (для стран ЕС) |
| Тенге (KZT) | NumToTextKZT |
"Бір мың жиырма бес теңге" | Казахские числительные, кириллица |
Для мультивалютных документов удобно создать выпадающий список с выбором валюты и использовать ВЫБОР():
=ВЫБОР(B1; NumToTextRub(A1); NumToTextUSD(A1); NumToTextEUR(A1))
Где B1 — ячейка с номером валюты (1 — рубли, 2 — доллары и т.д.).
5. Обработка ошибок: что делать, если числа не преобразовываются
Даже с правильно настроенными функциями вы можете столкнуться с проблемами. Вот топ-5 ошибок и их решения:
- #ИМЯ? — функция не распознаётся.
Причина: не активирована надстройка или не сохранён макрос. Решение: проверьте
Параметры → Надстройкиили сохраните файл как.xlsm. - #ЗНАЧ! — неверный формат данных.
Причина: в ячейке текст вместо числа. Решение: используйте
=ЗНАЧЕН(A1)для преобразования. - Неправильные окончания (например, "1 рублей").
Причина: ошибка в коде склонения. Решение: проверьте логику в функции
GetHundreds. - Округление копеек (например, 99.99 → "100 рублей").
Причина: отсутствует обработка дробной части. Решение: добавьте
Round(MyNumber, 2). - Макросы отключены — функции VBA не работают.
Причина: настройки безопасности. Решение:
Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы.
⚠️ Внимание: Если вы передаёте файл с макросами коллегам, они также должны включить макросы при открытии. Иначе функции вернут ошибку #ИМЯ?.
6. Автоматизация для бухгалтерии: шаблоны документов
Для регулярного использования (например, в платежных поручениях) создайте шаблон с прописными суммами. Пример структуры:
| Ячейка | Содержимое | Формула/Примечание |
|---|---|---|
| A1 | Сумма (число) | 1250.50 |
| B1 | Валюта | Выпадающий список (Рубли/Доллары/Евро) |
| C1 | Прописная сумма | =ЕСЛИ(B1="Рубли"; NumToTextRub(A1); ЕСЛИ(B1="Доллары"; NumToTextUSD(A1); NumToTextEUR(A1))) |
Дополнительные советы для бухгалтерских документов:
- 📑 Используйте
Защитить лист(Рецензирование → Защитить лист), чтобы избежать случайных изменений в формулах. - 🔄 Связывайте шаблон с внешними данными (например, выгрузкой из 1С) через
Power Query. - 🖨 Для печати настройте
Параметры страницы, чтобы прописная сумма не обрезалась.
Пример готового шаблона для платежного поручения:
Пример шаблона платежного поручения
В шаблоне предусмотрены поля:
- Сумма цифрами (с автоматическим округлением до копеек)
- Сумма прописью (с выбором валюты)
- Реквизиты получателя (связанные с базой данных)
- Дата (автоматическая подстановка текущей даты)
Файл шаблона можно скачать по ссылке (условно).
FAQ: Частые вопросы по преобразованию чисел в слова
Можно ли преобразовать числа в слова без VBA и надстроек?
Да, но с ограничениями. Используйте комбинацию функций ТЕКСТ(), ВЫБОР() и ЕСЛИ(), как в способе 2. Однако такой метод не обработает миллионы и копейки.
Почему функция возвращает "Ошибка в формуле"?
Вероятно, в коде VBA пропущена запятая или скобка. Проверьте синтаксис в редакторе (Alt + F11). Также убедитесь, что файл сохранён как .xlsm.
Как адаптировать функцию для украинской гривны?
Измените в коде VBA строку вывода на:
NumToTextRub = Application.WorksheetFunction.Trim(Rubles) & " гривень " & Kop & " копійок"
И добавьте правила склонения для украинского языка в функции GetHundreds.
Можно ли использовать это в Google Sheets?
В Google Таблицах нет встроенной функции для преобразования чисел в слова, но вы можете:
- Использовать
=IMPORTRANGEдля подключения к Excel-файлу с макросами. - Написать собственную функцию на Google Apps Script (аналог VBA).
Как обработать отрицательные числа?
Добавьте в начало функции VBA проверку:
If MyNumber < 0 Then
NumToTextRub = "Минус " & NumToTextRub(Abs(MyNumber))
Exit Function
End If