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

Преобразование числовых значений в текстовый формат (например, "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

Чтобы использовать этот код:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте приведённый код в окно модуля.
  4. Закройте редактор и вернитесь в Excel.
  5. Теперь можно использовать функцию =NumToText(A1) или =NumToText(A1; "доллар") для других валют.
📊 Какой метод преобразования чисел в пропись вы используете чаще?
Встроенные функции Excel
VBA-макросы
Надстройки от сторонних разработчиков
Ручной ввод
Не знаю, как это делать

3. Надстройки для Excel: готовые решения без программирования

Если вы не хотите писать код самостоятельно, можно воспользоваться готовыми надстройками. Наиболее популярные:

  • 🔹 NumberToText — бесплатная надстройка с поддержкой 15 языков, включая русский. Умеет работать с валютами и дробными числами.
  • 🔹 Excel Add-in for Number to Words — платное решение с расширенными настройками формата (например, вывод прописных или строчных букв).
  • 🔹 Kutools for Excel — многофункциональная надстройка, в которой есть инструмент Convert Number to Words.

Установка надстроек обычно занимает несколько минут. Например, для NumberToText:

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

☑️ Подготовка к установке надстройки

Выполнено: 0 / 5

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. Для миллиардов требуется доработка кода.
  • 🚫 Проблемы с дробными числами: если не учитывать копейки, сумма будет округлена. Всегда проверяйте формат ячейки (Числовой или Денежный).

Чтобы минимизировать ошибки, следуйте чек-листу:

☑️ Проверка перед преобразованием

Выполнено: 0 / 5

7. Автоматизация для больших таблиц: обработка тысяч строк

Если вам нужно преобразовать числа в пропись для большого диапазона данных (например, 10 000 строк), ручной ввод или поэлементное применение функции займёт слишком много времени. В этом случае:

  1. Используйте массовое применение 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 ко всем выделенным ячейкам и выведет результат в соседнем столбце.

  2. Оптимизируйте производительность: для ускорения отключите обновление экрана (Application.ScreenUpdating = False) и автоматические вычисления (Application.Calculation = xlCalculationManual).
  3. Используйте 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