Как в Excel преобразовать числа в текст прописью: полное руководство

Почему стандартные функции Excel не справляются с числами прописью

Вы когда-нибудь пытались в Microsoft Excel автоматически преобразовать цифру 1234 в текст "одна тысяча двести тридцать четыре"? Если да, то наверняка столкнулись с тем, что стандартных функций для этой задачи... попросту нет. В отличие от или специализированных бухгалтерских программ, где такая опция встроена по умолчанию, Excel из коробки предлагает только базовые инструменты для работы с текстом и числами.

Причина кроется в архитектуре программы: Excel изначально заточен под вычисления, графики и аналитику, а не на лингвистическую обработку. Однако это не значит, что задача невыполнима! Существует как минимум 5 рабочих способов получить числа прописью — от простых формул до написания собственных макросов. Далее разберём каждый из них, оценим плюсы и минусы, а также покажем, как адаптировать решения под русскоязычные реалии (включая правильные падежи для рублей и копеек).

📊 Как часто вам нужно преобразовывать числа в текст прописью?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не пользовался

Способ 1: Использование функции ЧИСЛОТЕКСТ (для русскоязычной версии Excel)

Если у вас установлена русская версия Excel (2013 и новее), то самый простой способ — воспользоваться встроенной функцией =ЧИСЛОТЕКСТ(). Она автоматически преобразует числа в текстовый формат с учётом правил русского языка, включая склонение валют.

Синтаксис функции:

=ЧИСЛОТЕКСТ(число; [формат])

Где [формат] — необязательный аргумент, определяющий стиль отображения. Например:

  • 📌 =ЧИСЛОТЕКСТ(1234,56; "Р") → "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек"
  • 📌 =ЧИСЛОТЕКСТ(42; "Д") → "сорок два дня"
  • 📌 =ЧИСЛОТЕКСТ(0,75; "Ч") → "ноль целых семьдесят пять сотых"
ФорматПример результатаКогда использовать
"Р"100 рублей 00 копеекФинансовые документы, счета, накладные
"Д"пять днейСроки, временные интервалы
"М"два месяцаКалендарное планирование
"Ч"ноль целых пять десятыхТехнические измерения, доли
⚠️ Внимание: Функция ЧИСЛОТЕКСТ доступна только в русскоязычных версиях Excel. В английской версии (Excel US/EN) её аналога нет — там используется функция =SpellNumber(), но она требует подключения надстройки Analysis ToolPak и работает только с английскими числительными.

Способ 2: Пользовательская функция на VBA для любых версий Excel

Если у вас англоязычная версия Excel или нужно больше гибкости (например, кастомизация падежей), придётся написать собственную функцию на VBA. Этот метод работает во всех версиях, включая Excel 2010-2023 и Office 365.

Следуйте инструкции:

  1. Откройте редактор VBA: нажмите Alt + F11.
  2. В меню выберите Insert → Module.
  3. Вставьте следующий код:
    Function NumToText(ByVal n As Double, Optional currency As String = "руб") As String
    

    ' Функция для преобразования чисел в текст прописью (русский язык)

    Dim Rubles As Variant, Kop As Variant

    Dim nRub As Long, nKop As Long

    Dim sRub As String, sKop As String

    n = Round(n, 2)

    nRub = Int(n)

    nKop = Round((n - nRub) * 100, 0)

    ' Обработка рублей

    sRub = ConvertLessThanThousand(nRub Mod 1000) & " "

    sRub = sRub & Choose((nRub Mod 1000) Mod 10 + 1, "рублей", "рубль", "рубля", "рубля", "рубля", "рублей", "рублей", "рублей", "рублей", "рублей")

    ' Обработка тысяч

    If nRub >= 1000 Then

    sRub = ConvertLessThanThousand(Int(nRub / 1000) Mod 1000) & " " & Choose(Int(nRub / 1000) Mod 100, _

    "тысяч", "тысяча", "тысячи", "тысячи", "тысячи", "тысяч", "тысяч", "тысяч", "тысяч", "тысяч") & " " & sRub

    End If

    ' Обработка миллионов

    If nRub >= 1000000 Then

    sRub = ConvertLessThanThousand(Int(nRub / 1000000) Mod 1000) & " " & Choose(Int(nRub / 1000000) Mod 100, _

    "миллионов", "миллион", "миллиона", "миллиона", "миллиона", "миллионов", "миллионов", "миллионов", "миллионов", "миллионов") & " " & sRub

    End If

    ' Обработка копеек

    If nKop > 0 Then

    sKop = ConvertLessThanThousand(nKop) & " "

    sKop = sKop & Choose(nKop Mod 10 + 1, "копеек", "копейка", "копейки", "копейки", "копейки", "копеек", "копеек", "копеек", "копеек", "копеек")

    NumToText = sRub & " " & sKop

    Else

    NumToText = sRub & " 00 копеек"

    End If

    End Function

    Function ConvertLessThanThousand(ByVal n As Long) As String

    Dim s As String

    Dim Hundreds As Variant, Tens As Variant, Ones As Variant

    Hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")

    Tens = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")

    Ones = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")

    s = Hundreds(Int(n / 100))

    If n Mod 100 >= 20 Then

    s = s & " " & Tens(Int((n Mod 100) / 10)) & " " & Ones(n Mod 10)

    ElseIf n Mod 100 >= 10 Then

    Select Case n Mod 100

    Case 10: s = s & " десять"

    Case 11: s = s & " одиннадцать"

    Case 12: s = s & " двенадцать"

    Case 13: s = s & " тринадцать"

    Case 14: s = s & " четырнадцать"

    Case 15: s = s & " пятнадцать"

    Case 16: s = s & " шестнадцать"

    Case 17: s = s & " семнадцать"

    Case 18: s = s & " восемнадцать"

    Case 19: s = s & " девятнадцать"

    End Select

    Else

    s = s & " " & Tens(Int((n Mod 100) / 10)) & " " & Ones(n Mod 10)

    End If

    ConvertLessThanThousand = Application.WorksheetFunction.Trim(s)

    End Function

  4. Сохраните модуль и закройте редактор.

Теперь в любой ячейке можно использовать функцию =NumToText(A1), где A1 — ячейка с числом. Например, для числа 1234,56 результат будет: "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".

☑️ Проверка перед использованием VBA-кода

Выполнено: 0 / 4
⚠️ Внимание: Если вы передаёте в функцию NumToText отрицательные числа, добавьте в начало кода строку n = Abs(n), чтобы избежать ошибок. Также учтите, что функция не обрабатывает числа больше 999 999 999 (миллиард).

Способ 3: Формулы без VBA (для небольших чисел)

Если вам нужно преобразовать небольшие числа (до 9999) и вы не хотите связываться с VBA, можно обойтись комбинацией стандартных функций: ЕСЛИ(), ВЫБОР() и ТЕКСТ(). Этот метод громоздкий, но работает без макросов.

Пример формулы для чисел от 0 до 999:

=ЕСЛИ(A1=0;"ноль";

ВЫБОР(ЦЕЛОЕ(A1/100);

""; "сто"; "двести"; "триста"; "четыреста"; "пятьсот"; "шестьсот"; "семьсот"; "восемьсот"; "девятьсот") & " " &

ЕСЛИ(И(ОСТАТ(A1;100)<20;ОСТАТ(A1;100)>=10);

ВЫБОР(ОСТАТ(A1;100)-9;"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");

ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);

"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") & " " &

ВЫБОР(ОСТАТ(A1;10);

"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять")))

Для обработки тысяч придётся дублировать эту конструкцию и добавлять условия. Главный минус метода — формула становится крайне громоздкой и сложной для редактирования. Рекомендуем использовать только для разовых задач с ограниченным диапазоном чисел.

Способ 4: Надстройка NumWord (для продвинутых пользователей)

Если вам регулярно нужно преобразовывать числа в текст прописью, имеет смысл установить специализированную надстройку. Одна из самых популярных — NumWord (разработчик ExcelLab). Она поддерживает:

  • 🌍 Многовалютность (рубли, доллары, евро и др.)
  • 📅 Разные форматы дат ("первое января две тысячи двадцать третьего года")
  • 🔢 Числа до 999 триллионов
  • 📊 Падежное согласование (например, "двум тысячам рублям")

Установка надстройки:

  1. Скачайте файл NumWord.xlam с официального сайта.
  2. В Excel перейдите в Файл → Параметры → Надстройки.
  3. Нажмите Перейти... внизу окна, затем Обзор и выберите скачанный файл.
  4. После установки в списке функций появится категория NumWord с функцией =NUMWORD().

Пример использования:

=NUMWORD(A1; "RUR"; TRUE)

Где:

  • A1 — ячейка с числом;
  • "RUR" — код валюты (рубли);
  • TRUE — включить вывод копеек.
⚠️ Внимание: Надстройки от сторонних разработчиков могут содержать вредоносный код. Перед установкой проверьте файл на VirusTotal и скачивайте только с официальных источников.

Способ 5: Онлайн-конвертеры (для разовых задач)

Если вам нужно преобразовать числа прописью один-два раза и устанавливать надстройки или писать код нет желания, можно воспользоваться онлайн-сервисами. Они работают прямо в браузере и не требуют установки.

СервисСсылкаОсобенности
Числа прописьюchisla-propisyu.ruПоддерживает рубли, доллары, евро, гривны. Есть API для автоматизации.
NumWordnumword.comАнглийская версия, но есть русифицированный вариант. Ограничение: до 1 млн.
Excel-Onlineexcel-online.netЭмулирует функцию ЧИСЛОТЕКСТ для англоязычных версий.

Как пользоваться:

  1. Скопируйте число из Excel.
  2. Вставьте его в поле на сайте.
  3. Выберите нужный формат (валюта, падеж и т. д.).
  4. Скопируйте результат обратно в Excel как текст.

Минусы онлайн-конвертеров:

  • 🔒 Конфиденциальность: если вы работаете с финансовыми данными, передача их на сторонние серверы может быть небезопасна.
  • 🚫 Ограничения: большинство сервисов не обрабатывают числа больше 1 миллиарда.
  • Ручной труд: при большом объёме данных процесс становится утомительным.

Типичные ошибки и как их избежать

Даже опытные пользователи Excel иногда сталкиваются с проблемами при преобразовании чисел в текст прописью. Вот самые распространённые ошибки и способы их решения:

  • 💰 Неправильное склонение валют: функция выводит "1 рубль", но "2 рубля", а вам нужно "2 рублей". Решение: отредактируйте код VBA (см. способ 2) или используйте надстройку с настройкой падежей.
  • 📉 Округление копеек: при преобразовании 1234.567 копейки округляются до 57 вместо 56. Решение: используйте функцию =ОКРУГЛ() перед преобразованием: =NumToText(ОКРУГЛ(A1;2)).
  • 🚫 Ошибка #ИМЯ?: появляется, если функция ЧИСЛОТЕКСТ не распознаётся. Решение: проверьте язык интерфейса Excel (должен быть русский) или используйте VBA.
  • 🔢 Ограничение на размер числа: функции не работают с числами больше 999 999 999. Решение: разбейте число на части (миллиарды, миллионы) и обработайте каждую отдельно.

Ещё одна частая проблема — лишние пробелы в результате. Чтобы их убрать, оберните функцию в СЖПРОБЕЛЫ():

=СЖПРОБЕЛЫ(ЧИСЛОТЕКСТ(A1; "Р"))
Почему Excel не умеет преобразовывать числа в текст "из коробки"?

Microsoft Excel изначально разрабатывался как инструмент для математических вычислений и анализа данных, а не для лингвистической обработки. Встроенные функции для работы с текстом (например, ЛЕВСИМВ(), ПОИСК()) ориентированы на манипуляции с символами, а не на генерацию человекочитаемого текста. Для сравнения: в или SAP такие функции есть по умолчанию, потому что эти системы изначально создавались для бухгалтерии, где числа прописью используются ежедневно (например, в платежных поручениях).

FAQ: Ответы на частые вопросы

Можно ли преобразовать числа прописью в Excel Online?

В Excel Online (браузерная версия) функция ЧИСЛОТЕКСТ не работает, так как она относится к надстройкам, недоступным в онлайн-режиме. Альтернативы:

  • Используйте Power Automate (бывший Microsoft Flow) для автоматизации преобразования.
  • Скопируйте данные в настольную версию Excel, выполните преобразование, затем вставьте обратно.
  • Воспользуйтесь онлайн-конвертером (см. способ 5).
Как сделать, чтобы "1 рубль" отображался как "один рубль" (с маленькой буквы)?

По умолчанию функция ЧИСЛОТЕКСТ и большинство VBA-скриптов возвращают текст с заглавной буквы. Чтобы сделать первую букву строчной, используйте комбинацию функций:

=СТРОЧН(ЛЕВСИМВ(ЧИСЛОТЕКСТ(A1))) & ПРАВСИМВ(ЧИСЛОТЕКСТ(A1);ДЛСТР(ЧИСЛОТЕКСТ(A1))-1)

Или в VBA добавьте строку:

NumToText = LCase(Left(NumToText, 1)) & Mid(NumToText, 2)
Поддерживаются ли дроби (например, 1/2 → "половина")?

Стандартные функции Excel (включая ЧИСЛОТЕКСТ) не умеют преобразовывать дроби в текст. Для этой задачи потребуется:

  1. Написать отдельную VBA-функцию с логикой для дробей (например, 1/2 → "половина", 1/4 → "четверть").
  2. Использовать надстройку вроде NumWord, где есть поддержка дробей.

Пример кода для простых дробей:

Function FractionToText(numerator As Integer, denominator As Integer) As String

Select Case denominator

Case 2: FractionToText = "половина"

Case 3: FractionToText = "треть"

Case 4: FractionToText = "четверть"

' ... добавьте другие дроби

Case Else: FractionToText = numerator & "/" & denominator

End Select

End Function

Как автоматически обновлять числа прописью при изменении исходных данных?

Если вы используете:

  • Формулы (ЧИСЛОТЕКСТ или комбинацию ЕСЛИ/ВЫБОР): обновление происходит автоматически при изменении исходной ячейки.
  • VBA-функцию: также обновляется автоматически, если в настройках Excel включен режим Автоматический пересчёт (Формулы → Параметры вычислений → Автоматически).
  • Надстройку: проверьте настройки надстройки — некоторые требуют ручного обновления (кнопка Refresh).

Если данные не обновляются, нажмите F9 для принудительного пересчёта.

Можно ли преобразовать числа прописью на украинском/белорусском языке?

Да, но потребуется адаптировать код VBA под правила другого языка. Основные отличия:

  • Для украинского: замените массивы числительных в функции ConvertLessThanThousand на украинские эквиваленты (например, "один" → "один", "два" → "два/дві" в зависимости от рода).
  • Для белорусского: добавьте поддержку склонений по падежам (в белорусском языке их 6).

Готовые решения:

  • Надстройка NumWord поддерживает украинский и белорусский языки (нужно выбрать соответствующий параметр при установке).
  • На сайте GitHub есть открытые VBA-скрипты для разных языков (ищите по запросу "number to text [язык]").