Преобразование числовых значений в текстовый формат (например, "123" → "сто двадцать три") — типичная задача при оформлении финансовых документов, счетов-фактур или договоров. В Microsoft Excel нет встроенной функции для такого преобразования, но существует несколько эффективных способов решить проблему: от использования формул до написания макросов на VBA. Выбор метода зависит от версии программы, объёма данных и требований к формату результата.
В этой статье мы разберём все актуальные способы — от ручного ввода до полностью автоматизированных решений. Особое внимание уделим нюансам работы с крупными числами (миллионы, миллиарды), валютами (рубли, доллары, евро) и специфическим форматами (например, "двадцать пятое января"). Также вы узнаете, как избежать типичных ошибок при конвертации и адаптировать решения под Excel 2010–2026 и Office 365.
1. Встроенные функции Excel: ограничения и обходные пути
На первый взгляд, в Excel нет функции, которая напрямую преобразует числа в текстовый эквивалент. Однако можно использовать комбинацию стандартных инструментов для частичного решения задачи. Например, функция =ТЕКСТ(A1; "0") вернёт число как строку, но без преобразования в пропись. Для полноценной конвертации потребуются дополнительные действия.
Единственный "полуавтоматический" способ без макросов — использование функции =ЧИСЛО.В.ТЕКСТ(), но она доступна только в Excel на русском языке и работает ограниченно. Например, для числа 123 формула вернёт "сто двадцать три", но не справится с дробными значениями или валютами. Также функция не поддерживается в англоязычных версиях программы.
- 📌 Плюсы: не требует знания VBA, работает в большинстве версий Excel.
- ⚠️ Минусы: ограниченная функциональность, нет поддержки дробных чисел и валют.
- 🔄 Альтернатива: для англоязычных версий можно использовать
=SpellNumber()(требует подключения надстройки).
⚠️ Внимание: ФункцияЧИСЛО.В.ТЕКСТ()может выдавать ошибку#ИМЯ?в Excel 2010 и старше. В этом случае обновите программу или используйте альтернативные методы.
2. Преобразование чисел в пропись с помощью VBA: универсальное решение
Самый надёжный способ — создать пользовательскую функцию на VBA. Этот метод работает во всех версиях Excel, поддерживает дробные числа, валюты и позволяет настраивать формат вывода. Ниже приведён код функции, которая преобразует числа до 999 миллиардов с учётом копеек/центов:
Function NumToText(ByVal n As Currency, Optional valuta As String = "рубль") As String
Dim rubles As Variant, kopecks As Variant, temp As String
rubles = Int(n)
kopecks = Round((n - rubles) * 100, 0)
If kopecks = 100 Then kopecks = 0: rubles = rubles + 1
' Преобразование рублей
temp = ConvertLessThanOneThousand(rubles, "рубль", "рубля", "рублей")
If rubles > 0 Then NumToText = temp
' Преобразование копеек
If kopecks > 0 Then
temp = ConvertLessThanOneThousand(kopecks, "копейка", "копейки", "копеек")
NumToText = NumToText & " " & kopecks & " " & temp
End If
End Function
Function ConvertLessThanOneThousand(ByVal n As Integer, s1 As String, s2 As String, s5 As String) As String
Dim units As Variant, tens As Variant, hundreds As Variant
units = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
tens = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _
"шестьсот", "семьсот", "восемьсот", "девятьсот")
Dim result As String, mod100 As Integer, mod10 As Integer
mod100 = n Mod 100: mod10 = n Mod 10
' Сотни
If n >= 100 Then result = hundreds(Int(n / 100)) & " "
' Десятки и единицы
If mod100 >= 20 Or mod100 < 10 Then
If mod10 > 0 Then result = result & units(mod10) & " "
mod100 = Int(mod100 / 10)
If mod100 > 0 Then result = result & tens(mod100) & " "
ElseIf mod100 >= 10 Then
Select Case mod100
Case 10: result = result & "десять "
Case 11: result = result & "одиннадцать "
Case 12: result = result & "двенадцать "
Case 13: result = result & "тринадцать "
Case 14: result = result & "четырнадцать "
Case 15: result = result & "пятнадцать "
Case 16: result = result & "шестнадцать "
Case 17: result = result & "семнадцать "
Case 18: result = result & "восемнадцать "
Case 19: result = result & "девятнадцать "
End Select
End If
' Склонение валют
mod100 = n Mod 100: mod10 = n Mod 10
If mod100 >= 11 And mod100 <= 19 Then
result = result & s5
Else
Select Case mod10
Case 1: result = result & s1
Case 2, 3, 4: result = result & s2
Case Else: result = result & s5
End Select
End If
ConvertLessThanOneThousand = Trim(result)
End Function
Чтобы использовать этот код:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Вставьте приведённый код в окно модуля.
- Закройте редактор и вернитесь в Excel.
- Теперь можно использовать функцию
=NumToText(A1)или=NumToText(A1; "доллар")для других валют.
3. Надстройки для Excel: готовые решения без программирования
Если вы не хотите писать код самостоятельно, можно воспользоваться готовыми надстройками. Наиболее популярные:
- 🔹 NumberToText — бесплатная надстройка с поддержкой 15 языков, включая русский. Умеет работать с валютами и дробными числами.
- 🔹 Excel Add-in for Number to Words — платное решение с расширенными настройками формата (например, вывод прописных или строчных букв).
- 🔹 Kutools for Excel — многофункциональная надстройка, в которой есть инструмент
Convert Number to Words.
Установка надстроек обычно занимает несколько минут. Например, для NumberToText:
- Скачайте файл
.xlamс официального сайта. - В Excel перейдите в
Файл → Параметры → Надстройки. - Нажмите
Перейтивнизу окна, затемОбзори выберите скачанный файл. - После установки в меню появится новая вкладка с функцией преобразования.
⚠️ Внимание: Перед установкой надстроек от сторонних разработчиков проверьте их репутацию на форумах (например, ExcelForum или MrExcel). Некоторые бесплатные решения могут содержать вредоносный код.
☑️ Подготовка к установке надстройки
4. Преобразование чисел с учётом валют и дробных частей
При работе с финансовыми документами часто требуется указывать не только целое число, но и дробную часть (копейки, центы). Например, сумма 123,45 должна преобразовываться в "сто двадцать три рубля сорок пять копеек". Для этого можно модифицировать VBA-функцию из второго раздела или использовать надстройки с поддержкой дробных чисел.
Пример формулы для ручного разделения целой и дробной частей (без VBA):
=ЧИСЛО.В.ТЕКСТ(ЦЕЛОЕ(A1)) & " рубль " & ЧИСЛО.В.ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)) & " копейка"
Однако этот способ не учитывает склонение валют ("рубль"/"рубля"/"рублей"). Для корректного отображения лучше использовать VBA-функцию с проверкой остатка от деления (пример приведён в разделе 2).
| Исходное число | Формула без VBA | Результат с VBA |
|---|---|---|
123,45 |
=ЧИСЛО.В.ТЕКСТ(123)&" рубль "&ЧИСЛО.В.ТЕКСТ(45)&" копейка" |
"сто двадцать три рубля сорок пять копеек" |
1,01 |
=ЧИСЛО.В.ТЕКСТ(1)&" рубль "&ЧИСЛО.В.ТЕКСТ(1)&" копейка" |
"один рубль одна копейка" |
100500,99 |
Ошибка (слишком большое число) | "сто тысяч пятьсот рублей девяносто девять копеек" |
5. Работа с датами: преобразование чисел в текстовый формат
Иногда требуется преобразовать не только суммы, но и даты в текстовый формат (например, "25.01.2026" → "двадцать пятое января две тысячи двадцать четвёртого года"). Для этого можно использовать комбинацию функций =ДЕНЬ(), =МЕСЯЦ() и =ГОД() с последующей конвертацией в пропись.
Пример формулы для вывода даты прописью (требуется VBA-функция ConvertLessThanOneThousand из раздела 2):
=ConvertLessThanOneThousand(ДЕНЬ(A1); "е"; "го"; "е") & " " &
ВЫБРАТЬ(МЕСЯЦ(A1); "января"; "февраля"; "марта"; "апреля"; "мая"; "июня";
"июля"; "августа"; "сентября"; "октября"; "ноября"; "декабря") & " " &
ConvertLessThanOneThousand(ГОД(A1); "год"; "года"; "лет")
Для корректного склонения дней месяца (например, "первое", "второе", "пятое") потребуется дополнительная логика в VBA. Готовое решение можно найти в надстройке DateToText или адаптировать код самостоятельно.
Пример кода для склонения дней месяца
Функция должна проверять последнюю цифру числа:
- 1 → "первое" (исключение: 11 → "одиннадцатое")
- 2 → "второе" (исключение: 12 → "двенадцатое")
- 3 → "третье"
- 4 → "четвёртое"
- 0, 5-9 → "пятое", "шестое" и т.д.
Полный код доступен на GitHub в репозитории Excel-VBA-Utils.
6. Типичные ошибки и как их избежать
При преобразовании чисел в пропись пользователи часто сталкиваются с следующими проблемами:
- 🚫 Ошибка #ИМЯ?: возникает, если функция
ЧИСЛО.В.ТЕКСТ()не поддерживается в вашей версии Excel. Решение — использовать VBA или надстройки. - 🚫 Некорректное склонение валют: например, "1 рубль", но "2 рубля". Исправляется модификацией VBA-кода (см. раздел 2).
- 🚫 Ограничение на размер числа: стандартные функции не работают с числами больше 999 999 999. Для миллиардов требуется доработка кода.
- 🚫 Проблемы с дробными числами: если не учитывать копейки, сумма будет округлена. Всегда проверяйте формат ячейки (
ЧисловойилиДенежный).
Чтобы минимизировать ошибки, следуйте чек-листу:
☑️ Проверка перед преобразованием
7. Автоматизация для больших таблиц: обработка тысяч строк
Если вам нужно преобразовать числа в пропись для большого диапазона данных (например, 10 000 строк), ручной ввод или поэлементное применение функции займёт слишком много времени. В этом случае:
- Используйте массовое применение VBA-функции:
Sub ConvertRangeToText()Dim rng As Range, cell As Range
Set rng = Selection
For Each cell In rng
cell.Offset(0, 1).Value = NumToText(cell.Value)
Next cell
End Sub
Этот макрос применит функцию
NumToTextко всем выделенным ячейкам и выведет результат в соседнем столбце. - Оптимизируйте производительность: для ускорения отключите обновление экрана (
Application.ScreenUpdating = False) и автоматические вычисления (Application.Calculation = xlCalculationManual). - Используйте Power Query: если данные импортируются из внешнего источника, можно добавить столбец с преобразованием на этапе загрузки. Однако для этого потребуется написать пользовательскую функцию на M.
Для обработки более 100 000 строк рекомендуется разбивать данные на части или использовать специализированные надстройки, оптимизированные для больших объёмов (например, Kutools).
FAQ: Частые вопросы по преобразованию чисел в пропись
Можно ли преобразовать числа в пропись без VBA?
Да, но с ограничениями. В русскоязычных версиях Excel есть функция ЧИСЛО.В.ТЕКСТ(), но она не поддерживает дробные числа и валюты. Альтернатива — надстройки от сторонних разработчиков (например, NumberToText).
Почему функция возвращает ошибку #ЗНАЧ! для отрицательных чисел?
Стандартные функции Excel не обрабатывают отрицательные значения. В VBA-коде нужно добавить проверку:
If n < 0 Then NumToText = "минус " & NumToText(Abs(n)): Exit Function
Как преобразовать число в пропись на английском языке?
Используйте функцию =SpellNumber() (требует подключения надстройки EuroTools) или напишите отдельную VBA-функцию с английскими правилами склонения. Пример кода можно найти на сайте Excel VBA Tutorial.
Можно ли преобразовать числа в пропись в Excel Online?
Нет, Excel Online не поддерживает VBA и большинство надстроек. Альтернатива — использовать Power Automate (Microsoft Flow) для автоматизации или экспортировать данные в настольную версию Excel.
Как добавить поддержку миллиардов в VBA-функцию?
Нужно расширить логику функции, добавив обработку для чисел > 999 999 999. Пример модификации:
If n >= 1000000000 Then
NumToText = ConvertLessThanOneThousand(Int(n / 1000000000)) & " миллиард " & NumToText(n Mod 1000000000)
End If