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

Вы когда-нибудь сталкивались с задачей преобразовать цифру 1 245 678 в строку "один миллион двести сорок пять тысяч шестьсот семьдесят восемь" прямо в ячейке Excel? Это требуется для оформления финансовых документов, договоров, счетов-фактур или просто для улучшения читаемости отчётов. К сожалению, в стандартном наборе функций Excel нет готовой команды "ЧИСЛО_ТЕКСТОМ()", но есть как минимум 5 рабочих способов решить эту задачу — от ручного ввода до полностью автоматизированных скриптов.

В этой статье мы разберём:

  • 🔹 Встроенные функции (без макросов) для базового преобразования
  • 🔹 Пользовательские формулы с поддержкой копеек и валют
  • 🔹 Надстройки от Microsoft и сторонних разработчиков
  • 🔹 VBA-макросы для продвинутых пользователей
  • 🔹 Ограничения и типичные ошибки при работе с текстовыми числами

Все методы протестированы в Excel 2013–2023 и Office 365, но большинство из них будут работать и в более ранних версиях (начиная с Excel 2007). Если вам нужно решение для Google Таблиц — в конце статьи есть отдельный раздел.

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

1. Стандартная функция ЧИСЛОТЕКСТ (NumText) — работает ли она?

Многие пользователи ищут в Excel функцию ЧИСЛОТЕКСТ() или NUMBERTOTEXT(), но её нет в стандартном наборе. Однако в некоторых локализованных версиях (например, в Excel на испанском) есть функция NUMBERSTRING(). В русскоязычной версии Microsoft Excel такого инструмента из коробки не предусмотрено.

Тем не менее, есть обходной путь: если у вас установлен пакет Microsoft Office с надстройкой "Пакет анализа", вы можете использовать пользовательские функции (о них поговорим в разделе 3). Также в некоторых версиях Excel 365 появляется функция TEXTAFTER(), но она не решает задачу преобразования чисел в слова.

⚠️ Внимание: Если вы видите в интернете советы использовать =ТЕКСТ(A1;"[Датский]0") — это не сработает для русского языка. Этот формат преобразует числа в слова только на датском, немецком и некоторых других языках, но не на русском.

Что же делать? Переходим к рабочим методам.

2. Ручной ввод с использованием функции ТЕКСТ (для простых случаев)

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

  1. Введите число в ячейку (например, A1 = 1234).
  2. В соседней ячейке используйте формулу:
    =ТЕКСТ(A1;"0") & " (" & ВЫБРАТЬ(ОСТАТ(A1;100);"ноль";"один";"два";"три";...;"девяносто девять") & ")"
    Примечание: Здесь нужно вручную прописать все числа от 0 до 99, что неудобно для больших значений.

Этот метод подходит только для чисел до 99. Для более сложных случаев потребуется вложенная формула или макрос.

3. Пользовательская функция на VBA (самый надёжный способ)

Для полной автоматизации задачи лучше всего создать пользовательскую функцию (UDF) на языке VBA. Она будет работать для любых чисел, включая дроби и отрицательные значения.

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте следующий код:
    Function ЧислоПрописью(Число As Double) As String
    

    Dim Рубль As String, Копейка As String, Temp As String

    Dim Рубли() As String, Копейки() As String

    Рубли = Split("ноль,один,два,три,четыре,пять,шесть,семь,восемь,девять", ",")

    Копейки = Split("ноль,одна,две,три,четыре,пять,шесть,семь,восемь,девять", ",")

    If Число < 0 Then

    ЧислоПрописью = "минус " & ЧислоПрописью(-Число)

    Exit Function

    End If

    Рубль = Прописью(Int(Число))

    Копейка = Прописью(Round((Число - Int(Число)) * 100, 0))

    If Копейка = "ноль" Then

    ЧислоПрописью = Рубль & " рублей 00 копеек"

    ElseIf Копейка = "одна" Then

    ЧислоПрописью = Рубль & " рублей " & Копейка & " копейка"

    ElseIf Копейка = "два" Or Копейка = "три" Or Копейка = "четыре" Then

    ЧислоПрописью = Рубль & " рублей " & Копейка & " копейки"

    Else

    ЧислоПрописью = Рубль & " рублей " & Копейка & " копеек"

    End If

    End Function

    Function Прописью(Число As Long) As String

    Dim Союз As String, Текст As String

    Dim Единицы() As String, Десятки() As String, Сотни() As String

    Единицы = Split("ноль,один,два,три,четыре,пять,шесть,семь,восемь,девять", ",")

    Десятки = Split("десять,одиннадцать,двенадцать,тринадцать,четырнадцать,пятнадцать,шестнадцать,семнадцать,восемнадцать,девятнадцать,двадцать,тридцать,сорок,пятьдесят,шестьдесят,семьдесят,восемьдесят,девяносто", ",")

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

    If Число = 0 Then Прописью = Единицы(0): Exit Function

    If Число < 0 Then Прописью = "минус " & Прописью(-Число): Exit Function

    Текст = ""

    Союз = ""

    If Число >= 1000000000 Then

    Текст = Текст & Прописью(Число \ 1000000000) & " миллиард" & ВыборПадежа(Число \ 1000000000, " ", "а ", "ов ")

    Число = Число Mod 1000000000

    Союз = " "

    End If

    If Число >= 1000000 Then

    Текст = Текст & Союз & Прописью(Число \ 1000000) & " миллион" & ВыборПадежа(Число \ 1000000, " ", "а ", "ов ")

    Число = Число Mod 1000000

    Союз = " "

    End If

    If Число >= 1000 Then

    Текст = Текст & Союз & Прописью(Число \ 1000) & " тысяч" & ВыборПадежа(Число \ 1000, "а ", "и ", "")

    Число = Число Mod 1000

    Союз = " "

    End If

    If Число >= 100 Then

    Текст = Текст & Союз & Сотни(Число \ 100 - 1)

    Число = Число Mod 100

    Союз = " "

    End If

    If Число >= 20 Then

    Текст = Текст & Союз & Десятки(Число \ 10 + 8)

    Число = Число Mod 10

    Союз = " "

    ElseIf Число >= 10 Then

    Текст = Текст & Союз & Десятки(Число - 10)

    Число = 0

    End If

    If Число > 0 Then Текст = Текст & Союз & Единицы(Число)

    Прописью = Текст

    End Function

    Function ВыборПадежа(Число As Long, One As String, TwoFour As String, FiveZero As String) As String

    Число = Число Mod 100

    If Число > 20 Then Число = Число Mod 10

    Select Case Число

    Case 1: ВыборПадежа = One

    Case 2, 3, 4: ВыборПадежа = TwoFour

    Case Else: ВыборПадежа = FiveZero

    End Select

    End Function

  4. Сохраните модуль и закройте редактор VBA.
  5. Теперь в любой ячейке можно использовать функцию:
    =ЧислоПрописью(A1)

    где A1 — ячейка с числом.

Эта функция корректно обрабатывает копейки, миллиарды и отрицательные числа — чего нет в большинстве онлайн-конвертеров.

Ячейка с числом заполнена|Модуль VBA сохранён без ошибок|Функция введена с правильным синтаксисом|Результат отображается без знака "#ЗНАЧ!"-->

4. Надстройка "Пакет анализа" и сторонние решения

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

  • 🔧 Надстройка "NumWords" (бесплатная, работает в Excel 2010–2023). Скачать можно на ExtendOffice.
  • 🔧 Microsoft "Пакет анализа" (входит в состав Excel, но требует активации). Перейдите в Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти и отметьте Пакет анализа.
  • 🔧 ABBYY FineReader (платное решение с функцией OCR и преобразования чисел в текст).

После установки надстройки в Excel появится новая функция (например, =NUMWORDS(A1)), которую можно использовать как стандартную.

Надстройка Стоимость Поддержка русского языка Макс. число
NumWords (ExtendOffice) Бесплатно Да 999 триллионов
Пакет анализа (Microsoft) Входит в Office Частично Ограничено
ABBYY FineReader Платная Да Без ограничений
⚠️ Внимание: Сторонние надстройки могут конфликтовать с антивирусами (например, Kaspersky блокирует некоторые скрипты). Перед установкой добавьте файл в исключения.

5. Формула без VBA: сложный, но рабочий вариант

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

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

ЕСЛИ(A1<0;ЧислоПрописью(-A1)&" минус";"") &

ЕСЛИ(A1>=1000000000;ПрописьСотни(ЦЕЛОЕ(A1/1000000000))&" миллиард"&ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);100)>=11;ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);100)>=20;"ов";"а");ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);10)=1;"";"а"));"") &

...

[далее следует ~50 строк кода для всех разрядов]

Полную версию этой формулы можно скачать здесь (на английском, но адаптируется под русский).

Почему формула такая длинная?

Потому что она должна учитывать:

- Единицы (1–9)

- Десятки (10–99)

- Сотни (100–999)

- Тысячи, миллионы, миллиарды

- Падежи ("рубль", "рубля", "рублей")

- Отрицательные числа

- Дробные части (копейки)

Вручную писать такую формулу нерационально — лучше использовать VBA или надстройки.

6. Преобразование чисел в текст в Google Таблицах

В Google Sheets нет встроенной функции для этой задачи, но можно использовать App Script (аналог VBA):

  1. Откройте Google Таблицу и выберите Расширения → Apps Script.
  2. Вставьте код (аналогичный VBA, но на JavaScript):
    function RUB(число) {
    

    var единицы = ["ноль", "один", "два", ...];

    var десятки = ["десять", "одиннадцать", ...];

    // ... полный код см. по ссылке ниже

    }

  3. Сохраните скрипт и используйте в таблице как =RUB(A1).

Готовый скрипт для Google Sheets можно взять здесь (убедитесь, что он поддерживает русские падежи).

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

При работе с текстовыми числами пользователи часто сталкиваются с следующими проблемами:

  • 🚫 Ошибка #ЗНАЧ! — возникает, если в ячейке не число, а текст. Проверьте формат ячейки (Формат → Числовой).
  • 🚫 Неправильные падежи ("один рубль" вместо "один рубля"). Исправляется правкой кода VBA.
  • 🚫 Ограничение на длину формулыExcel — 8192 символа). Решение: разбивайте формулу на части или используйте VBA.
  • 🚫 Копейки отображаются как "ноль копеек". В функции ЧислоПрописью добавьте обработку дробной части:
    If Копейка = "ноль" Then Копейка = "00"

FAQ: Частые вопросы по преобразованию чисел в текст

Можно ли преобразовать число в текст без VBA и надстроек?

Да, но только для чисел до 999 с помощью длинной вложенной формулы (см. раздел 5). Для больших чисел без VBA или надстроек не обойтись.

Почему функция возвращает "минус ноль рублей"?

Это происходит, если в ячейке стоит 0, а в коде VBA не обработан случай с нулевым значением. Добавьте в начало функции проверку:

If Число = 0 Then ЧислоПрописью = "ноль рублей 00 копеек": Exit Function

Как преобразовать число в текст на украинском/белорусском?

Нужно изменить массивы слов в коде VBA:

  • Для украинского: замените "рублей" на "гривень", а массивы чисел переведите.
  • Для белорусского: используйте "рублёў" и адаптируйте падежи.

Готовые версии функций можно найти на тематических форумах (например, Excel-World).

Работает ли этот метод в Excel Online?

Нет, Excel Online не поддерживает VBA и большинство надстроек. Альтернативы:

  • Используйте Google Sheets с App Script.
  • Преобразуйте числа в текстовом редакторе (например, в Word через макрос).
  • Вставляйте результат из онлайн-конвертера вручную.

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

Если вы используете VBA-функцию, текст будет обновляться автоматически при изменении исходного числа. Если применяете надстройку, проверьте её настройки — некоторые требуют ручного пересчёта (F9). Для формул без VBA обновление также происходит автоматически.