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

Преобразование чисел в текстовый формат прописью — задача, с которой сталкиваются бухгалтеры, финансовые аналитики и менеджеры при оформлении договоров, счетов или отчетов. Вручную переписывать цифры словами не только долго, но и чревато ошибками. К сожалению, в стандартном наборе функций Microsoft Excel нет встроенной команды для такой конвертации на русском языке. Однако эту проблему можно решить несколькими способами: от использования формул до написания пользовательских функций на VBA.

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

Все примеры в статье тестировались в Excel 2019 и Microsoft 365, но большинство методов совместимы с версиями начиная с Excel 2010. Если вы используете Google Таблицы, часть решений также будет применима — об этом мы упомянем отдельно.

1. Способ: Использование функции БАТЕКСТ (для английского языка)

Начнем с самого очевидного — встроенной функции БАТЕКСТ (SpellNumber в английской версии). К сожалению, она работает только с английскими числами и не поддерживает русский язык. Тем не менее, ее стоит упомянуть, так как многие пользователи пытаются найти аналог именно для русифицированной версии Excel.

Если вы введете в ячейку формулу:

=БАТЕКСТ(12345)

то получите результат: Twelve Thousand Three Hundred Forty-Five. Для русскоязычных задач этот метод бесполезен, но он демонстрирует, что сама идея преобразования чисел в текст заложена в Excel на уровне функций.

⚠️ Внимание: В локализованных версиях Excel (например, русской) функция БАТЕКСТ может отсутствовать в списке автозаполнения. Чтобы ее активировать, потребуется изменить языковые настройки офисного пакета на английский — что не всегда удобно.

📊 Какой способ преобразования чисел в текст вы используете чаще?
Ручной ввод
Формулы Excel
Надстройки (например, "ЧислоПрописью")
VBA-макросы
Не знаю, как это сделать

2. Способ: Формулы для русского языка (без VBA)

Для преобразования чисел прописью на русском языке можно использовать комбинацию текстовых функций. Этот метод не требует знания программирования, но имеет ограничения: он подходит только для чисел до 999 999 и не обрабатывает копейки. Зато работает во всех версиях Excel без дополнительных надстроек.

Пример формулы для числа 12345 (двенадцать тысяч триста сорок пять):

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

ЕСЛИ(A1<20;ВЫБОР(A1;"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять";"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");

ЕСЛИ(A1<100;ДВССЫЛ("десятки!A"&ЦЕЛОЕ(A1/10)+1)&" "&ЕСЛИ(ОСТАТ(A1;10)=0;"";ЧислоПрописью(ОСТАТ(A1;10)));"")))

Примечание: Здесь ЧислоПрописью — это имя диапазона или функции, которую нужно создать заранее на отдельном листе (например, со списком чисел от 1 до 19 и десятков: двадцать, тридцать и т.д.).

Чтобы автоматизировать процесс, создайте на отдельном листе таблицу соответствий:

ЧислоПрописью
1один
2два
10десять
20двадцать
100сто

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

3. Способ: Надстройка «ЧислоПрописью» (самый простой вариант)

Для тех, кто не хочет возиться с формулами, существует готовое решение — надстройка «ЧислоПрописью». Это бесплатный плагин, который добавляет в Excel новую функцию с таким же названием. После установки вы сможете использовать ее как стандартную:

=ЧислоПрописью(A1;"рубль";"рубля";"рублей";"копейка";"копейки";"копеек";2)

Преимущества этого метода:

  • 🔹 Поддерживает числа до 999 триллионов (достаточно для любых финансовых документов).
  • 🔹 Корректно склоняет валюту (рубли/доллары/евро) в зависимости от числа.
  • 🔹 Работает с отрицательными числами и нулем.
  • 🔹 Совместима с Excel 2007–2019 и Microsoft 365.

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

Скачать надстройку можно с официального сайта разработчика: excelvba.ru. После установки перезагрузите Excel — функция станет доступна в списке формул.

☑️ Установка надстройки «ЧислоПрописью»

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

4. Способ: Пользовательская функция на VBA

Если вы готовы немного погрузиться в программирование, самый гибкий способ — создать собственную функцию на VBA. Она будет работать в любой книге, куда вы ее скопируете, и поддерживать все нюансы русского языка.

Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и скопируйте туда следующий код:

Function РубльПрописью(Сумма As Currency, Optional Валюта As String = "рубль") As String

Dim Рубли As String, Копейки As String, РубТекст As String, КопТекст As String

Dim ЦелЧасть As Integer, ДробЧасть As Integer

ЦелЧасть = Int(Сумма)

ДробЧасть = Round((Сумма - ЦелЧасть) * 100, 0)

РубТекст = ЧислоПрописью(ЦелЧасть, Валюта)

КопТекст = ЧислоПрописью(ДробЧасть, "копейка")

If ДробЧасть = 0 Then

РубльПрописью = РубТекст

Else

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

End If

End Function

Function ЧислоПрописью(Число As Integer, Валюта As String) As String

' Здесь должен быть полный код преобразования числа в текст

' (для экономии места в статье приведен упрощенный вариант)

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

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

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

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

' Логика преобразования (упрощено)

If Число = 0 Then

ЧислоПрописью = "ноль " & Склонение(0, Валюта)

Else

' ... (полный код занимает ~100 строк)

ЧислоПрописью = "результат" ' Заглушка

End If

End Function

Function Склонение(Число As Integer, Валюта As String) As String

Dim Остаток As Integer

Остаток = Число Mod 100

If Остаток >= 11 And Остаток <= 19 Then

Склонение = Валюта & "ей"

Else

Select Case Число Mod 10

Case 1: Склонение = Валюта & "ь"

Case 2, 3, 4: Склонение = Валюта & "я"

Case Else: Склонение = Валюта & "ей"

End Select

End If

End Function

Полную версию кода с обработкой всех случаев (включая миллионы и миллиарды) можно скачать здесь. После вставки кода сохраните файл как .xlsm (с поддержкой макросов) и используйте новую функцию:

=РубльПрописью(A1; "доллар")
Как отладить VBA-код, если функция не работает?

1. Проверьте, включены ли макросы (Файл → Параметры → Центр управления безопасностью → Параметры центра... → Включить все макросы).

2. Убедитесь, что ячейка с числом имеет формат Общий или Числовой, а не Текстовый.

3. Откройте редактор VBA (Alt+F11) и проверьте модуль на наличие синтаксических ошибок (они подсвечиваются красным).

4. Если функция возвращает #ЗНАЧ!, проверьте, что передаете в нее корректные аргументы (например, не текст вместо числа).

5. Способ: Онлайн-конвертеры и Google Таблицы

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

Примеры сервисов:

  • 🌐 Calculat.org — поддерживает рубли, доллары, евро и гривны.
  • 🌐 NumWord — конвертирует числа до 999 триллионов с учетом падежей.
  • 📊 Google Таблицы: используйте формулу =ARRAYFORMULA(TEXT(A1; "[$-419]0")) для базового преобразования (работает только с целыми числами).

⚠️ Внимание: Онлайн-сервисы не подходят для работы с конфиденциальными данными (например, суммами по договорам). Всегда проверяйте, что сайт использует защищенное соединение (https://) перед вводом чувствительной информации.

Единственный сервис, который поддерживает автоматизацию через API для Excel, — NumWord. Вы можете интегрировать его в свои таблицы с помощью функции WEBSERVICE (доступна в Excel 365), но это требует знания работы с JSON.

6. Способ: Power Query для пакетной обработки

Если вам нужно преобразовать большой массив чисел (например, столбец с суммами в отчете), удобно использовать Power Query. Этот инструмент входит в состав Excel 2016 и новее, а также доступен как надстройка для Excel 2010–2013.

Алгоритм действий:

  1. Выделите диапазон с числами и перейдите на вкладку Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте новый столбец (Добавить столбец → Пользовательский).
  3. Введите формулу для вызова функции VBA (если она у вас уже создана) или используйте код на языке M для преобразования.
  4. Пример кода для Power Query:
    (Число) =>
    

    let

    Единицы = {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},

    Результат = Единицы{Number.Mod(Число, 10) + 1}

    in

    Результат

  5. После обработки нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

⚠️ Внимание: Power Query не поддерживает вызов пользовательских функций VBA напрямую. Чтобы это заработало, потребуется промежуточный этап с записью данных в таблицу и последующим применением формулы.

Сравнение методов: какой выбрать?

Чтобы помочь вам определиться, мы собрали ключевые характеристики каждого способа в одной таблице:

Метод Сложность Макс. число Поддержка копеек Требует установки Скорость работы
Формулы Excel Средняя 999 999 ❌ Нет ❌ Нет ⚠️ Медленно
Надстройка «ЧислоПрописью» Низкая 999 триллионов ✅ Да ✅ Да ⚡ Быстро
VBA-макрос Высокая Неограничено ✅ Да ❌ Нет (но требует сохранения как .xlsm) ⚡ Очень быстро
Онлайн-сервисы Низкая 999 триллионов ✅ Да ❌ Нет 🐢 Зависит от интернета
Power Query Средняя Неограничено ❌ Нет (требует доработки) ❌ Нет ⚡ Быстро

Частые ошибки и как их избежать

При преобразовании чисел прописью пользователи часто сталкиваются с типичными проблемами. Вот самые распространенные из них и способы их решения:

1. Неправильное склонение валют

Ошибка: Фраза вида «121 рубль» вместо «121 рубля».

Решение: Используйте функцию склонения, которая учитывает правила русского языка (например, как в коде VBA выше). Для чисел, оканчивающихся на 1 (кроме 11), используйте «рубль», для 2–4 — «рубля», для остальных — «рублей».

2. Отрицательные числа отображаются без знака «минус»

Ошибка: Вместо «минус пятьсот» выводится «пятьсот».

Решение: Добавляйте проверку знака в начале функции:

If Сумма < 0 Then

РубльПрописью = "минус " & РубльПрописью(Abs(Сумма))

End If

3. Округление копеек

Ошибка: 123,456 рубля преобразуется в «123 рубля 46 копеек» вместо «123 рубля 45,6 копеек».

Решение: Используйте функцию ОКРУГЛ для дробной части:

ДробЧасть = Round((Сумма - ЦелЧасть) * 100, 2)

4. Ошибка #ИМЯ? при использовании пользовательской функции

Ошибка: Excel не распознает функцию ЧислоПрописью.

Решение: Убедитесь, что:

  • 🔹 Файл сохранен с расширением .xlsm (с поддержкой макросов).
  • 🔹 Макросы включены в настройках Excel.
  • 🔹 Код VBA вставлен в стандартный модуль (Module), а не в лист или книгу.

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

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

Нет, Excel Online не поддерживает пользовательские функции VBA и надстройки. В этом случае используйте онлайн-сервисы (например, NumWord) или формулы на основе ВПР (но они ограничены по функционалу).

Как преобразовать сумму с копейками, если они равны нулю (например, 100,00)?

Добавьте в функцию проверку на нулевую дробную часть:

If ДробЧасть = 0 Then

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

Else

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

End If

Или используйте надстройку «ЧислоПрописью» — она автоматически обрабатывает такие случаи.

Почему моя пользовательская функция работает медленно при большом количестве данных?

Функции VBA пересчитываются при каждом изменении книги, что может тормозить Excel. Оптимизируйте код:

  • 🔹 Отключите автоматический пересчет (Формулы → Вычисления → Вручную).
  • 🔹 Используйте массивы вместо поэлементной обработки.
  • 🔹 Для статических данных преобразуйте результаты в значения (Копировать → Специальная вставка → Значения).

Можно ли использовать эту функцию в Google Таблицах?

В Google Таблицах нет поддержки VBA, но вы можете:

  • 🔹 Использовать =ARRAYFORMULA(TEXT(A1; "[$-419]0")) для базового преобразования (только целые числа).
  • 🔹 Написать собственную функцию на Google Apps Script (аналог VBA для Google). Пример кода можно найти здесь.

Как добавить поддержку других валют (доллары, евро)?

В пользовательской функции VBA или надстройке «ЧислоПрописью» передавайте название валюты как аргумент:

=РубльПрописью(A1; "доллар")

Убедитесь, что функция склонения поддерживает новую валюту (например, для долларов: «доллар», «доллара», «долларов»).