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

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

Многие пользователи ошибочно полагают, что в Excel нет стандартного инструмента для такой операции. На самом деле решение существует, но оно спрятано в глубинах функционала программы или требует небольшой доработки. В этой статье мы разберем 5 рабочих методов — от самых простых до продвинутых, — которые помогут преобразовать 1234,56 в одна тысяча двести тридцать четыре рубля 56 копеек без лишних усилий. Особое внимание уделим нюансам работы с валютами, дробными числами и большими суммами.

Важно понимать, что универсального решения"одной кнопкой" в Excel нет — каждый метод имеет свои ограничения. Например, встроенная функция BAHTTEXT работает только с тайским языком, а русскоязычные надстройки могут конфликтовать с последними обновлениями Office 365. Мы протестировали все способы на актуальных версиях программы (2019-2026) и указываем их совместимость в каждом разделе.

1. Встроенная функция BAHTTEXT: скрытая возможность Excel

Мало кто знает, но в Excel есть скрытая функция BAHTTEXT, которая изначально предназначена для преобразования чисел в текст на тайском языке. Однако с небольшой хитростью её можно адаптировать для русскоязычных задач. Функция доступна во всех версиях программы, начиная с Excel 2007.

Основной недостаток метода — результат выдается на тайском, но его можно быстро конвертировать в кириллицу с помощью функции ПОДСТАВИТЬ. Вот как это работает:

  • 🔹 Введите формулу:
    =ПОДСТАВИТЬ(ПОДСТАВИТЬ(BAHTTEXT(A1);"บาท";"руб.");"สตางค์";"коп.")
  • 🔹 Замените A1 на ячейку с вашим числом
  • 🔹 Для чисел без копеек используйте:
    =ПОДСТАВИТЬ(BAHTTEXT(ЦЕЛОЕ(A1));"บาท";"руб.")&" 00 коп."

Этот метод подходит для быстрого преобразования небольших сумм, но имеет ограничения:

⚠️ Внимание: Функция BAHTTEXT корректно работает только с числами до 999 999. Для миллионов потребуется разбивать сумму на части.

2. Пользовательская функция на VBA: гибкое решение

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

Function NumToRub(ByVal n As Currency, Optional kop As Boolean = True) As String

Dim Rubl As Variant, Kop As Variant

Rubl = Array("","","рубль","рубля","рублей")

Kop = Array("","","копейка","копейки","копеек")

NumToRub = ConvertLessThanOneThousand(Int(n)) &"" & Choose((Int(n) Mod 100 > 4) And (Int(n) Mod 100 < 21) Or (Int(n) Mod 10 > 4) Or (Int(n) Mod 10 = 0) + 1, Rubl)

If kop Then

NumToRub = NumToRub &"" & ConvertLessThanOneThousand(CLng((n - Int(n)) 100)) &"" & Choose((CLng((n - Int(n)) 100) Mod 100 > 4) And (CLng((n - Int(n)) 100) Mod 100 < 21) Or (CLng((n - Int(n)) 100) Mod 10 > 4) Or (CLng((n - Int(n)) * 100) Mod 10 = 0) + 1, Kop)

End If

End Function

Function ConvertLessThanOneThousand(ByVal n As Long) As String

Dim Ones As Variant, Tens As Variant

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

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

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

If n = 0 Then Exit Function

If n >= 100 Then

ConvertLessThanOneThousand = Ones(Int(n / 100)) &" сто"

n = n Mod 100

If n > 0 Then ConvertLessThanOneThousand = ConvertLessThanOneThousand &""

End If

If n >= 20 Then

ConvertLessThanOneThousand = ConvertLessThanOneThousand & Tens(Int(n / 10))

n = n Mod 10

If n > 0 Then ConvertLessThanOneThousand = ConvertLessThanOneThousand &""

ElseIf n >= 10 Then

ConvertLessThanOneThousand = ConvertLessThanOneThousand & Teens(n - 10)

n = 0

End If

If n > 0 Then ConvertLessThanOneThousand = ConvertLessThanOneThousand & Ones(n)

End Function

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

  1. Нажмите Alt+F11 для открытия редактора VBA
  2. Вставьте код в модуль (меню Insert → Module)
  3. В Excel используйте функцию как обычно: =NumToRub(A1)

Этот макрос корректно обрабатывает числа до 999 триллионов и автоматически склоняет"рубль/рубля/рублей" в зависимости от суммы.

Убедитесь, что включена поддержка макросов в настройках Excel|Сохраните файл в формате.xlsm (с поддержкой макросов)|Проверьте, что в ячейке нет текстовых символов перед числом|Отключите защиту листа, если она активна-->

3. Надстройки от сторонних разработчиков

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

  • 📌 NumWord — бесплатная надстройка с поддержкой 15 валют и 3 языков. Скачать можно на GitHub или специализированных форумах
  • 💰 РублиПрописью — плагин с расширенными настройками склонений (поддерживает"доллар","евро","тенге")
  • 📊 Excel Number to Words — универсальное решение с поддержкой 20+ языков, включая русский

Установка надстроек обычно занимает не более 5 минут:

  1. Скачайте файл надстройки (.xlam или .xla)
  2. В Excel перейдите в Файл → Параметры → Надстройки
  3. Нажмите"Перейти" и выберите скачанный файл
⚠️ Внимание: Перед установкой надстроек от неизвестных разработчиков проверьте файл антивирусом. Некоторые"бесплатные" решения содержат вредоносный код.
Надстройка Поддержка валют Макс. число Стоимость
NumWord Рубли, доллары, евро 999 триллионов Бесплатно
РублиПрописью 15 валют Без ограничений От 500₽
Excel Number to Words 20+ валют 10300 $19.99

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

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

Пример реализации для чисел до 999:

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

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

ЕСЛИ(A1<100;ВЫБОР(ЦЕЛОЕ(A1/10);;"двадцать";"тридцать";...;"девяносто")&

ЕСЛИ(ОСТАТ(A1;10)=0;"";""&ВЫБОР(ОСТАТ(A1;10);;"один";"два";...;"девять"));

ЕСЛИ(A1<1000;ВЫБОР(ЦЕЛОЕ(A1/100);;"сто";"двести";...;"девятьсот")&

ЕСЛИ(ОСТАТ(A1;100)=0;"";""&[формула для десятков и единиц])

)))

Для полноценной работы потребуется:

  • 📋 Создать отдельный лист со справочником чисел
  • 🔄 Использовать ПОИСКПОЗ для поиска текстовых эквивалентов
  • 🔢 Добавить обработку миллионов и миллиардов через дополнительные вложенные функции
⚠️ Внимание: Такая формула может содержать до 5000 символов и значительно тормозить производительность книги при работе с большими диапазонами.

Встроенные функции Excel|Пользовательские VBA-макросы|Сторонние надстройки|Ручной ввод для важных документов-->

5. Онлайн-конвертеры: быстрый, но неавтоматизированный способ

Если нужно преобразовать числа прописью единоразово, можно воспользоваться онлайн-сервисами. Это актуально для пользователей Excel Online или Google Sheets, где возможности ограничены. Популярные сервисы:

  • 🌐 numword.com — поддерживает 25 языков, включая русский с валютами
  • 💻 calconline.pro — конвертер с возможностью копирования результата в Excel
  • 📱 MobileFish.com — удобный интерфейс для мобильных устройств

Алгоритм работы:

  1. Скопируйте числа из Excel
  2. Вставьте в поле конвертера
  3. Выберите язык и валюту
  4. Скопируйте результат обратно в Excel

Основной недостаток — невозможность автоматизации. При изменении исходных данных придется повторять процесс вручную.

Как автоматизировать работу с онлайн-конвертерами?

Можно написать простой макрос на VBA, который будет отправлять запрос к API сервиса (если он предоставляется) и возвращать результат прямо в ячейку. Например, для numword.com существует неофициальное API, которое принимает GET-запросы вида https://numword.com/api?num=1234&lang=ru и возвращает JSON с текстовой версией числа.

6. Обработка специальных случаев

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

Дробные числа с нулевой целой частью:

Функции часто игнорируют числа вида 0,56. Используйте конструкцию:

=ЕСЛИ(ЦЕЛОЕ(A1)=0;"ноль";"") & [ваша функция прописью]

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

Добавьте проверку знака:

=ЕСЛИ(A1<0;"минус";"") & [функция прописью для ABS(A1)]

Большие числа (миллиарды+):

Для чисел свыше 999 999 999 потребуется модифицировать VBA-код, добавив обработку:

...

ElseIf n >= 1000000000 Then

NumToRub = ConvertLessThanOneThousand(Int(n / 1000000000)) &" миллиард" & Choose(...)

n = n Mod 1000000000

If n > 0 Then NumToRub = NumToRub &""

End If

...

Проблема Пример данных Решение
Нулевая целая часть 0,75 Добавить проверку ЕСЛИ(ЦЕЛОЕ=0;"ноль";"")
Отрицательные значения -1234,56 Обработать знак отдельно: ЕСЛИ(A1<0;"минус";"")
Миллиарды и триллионы 1 234 567 890 Добавить обработку в VBA-коде для чисел >109
Нецелые копейки 1234,5 Округлить до копеек: =ОКРУГЛ(A1;2)

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

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

В Google Таблицах нет встроенной функции для этой задачи, но можно использовать:

  • Собственный скрипт на Google Apps Script (аналог VBA)
  • Надстройку "Number to Words" из магазина расширений
  • Формулу с IMPORTDATA для обращения к онлайн-конвертерам

Пример скрипта: function numToWords(n) { / код аналогичный VBA / }

Почему моя пользовательская функция возвращает ошибку #ИМЯ?

Наиболее вероятные причины:

  • Макросы отключены в настройках Excel (Файл → Параметры → Центр управления безопасностью)
  • Файл сохранен в формате .xlsx вместо .xlsm
  • Опечатка в названии функции при вызове
  • Конфликт имен с другими макросами

Решение: проверьте настройки безопасности и пересохраните файл с поддержкой макросов.

Как преобразовать даты прописью (например,"первое января")?

Для дат потребуется отдельная функция. Пример VBA-кода:

Function DateToWords(d As Date) As String

Dim Days, Months

Days = Array("первое","второе","третье",...,"тридцатое","тридцать первое")

Months = Array("января","февраля",...,"декабря")

DateToWords = Days(Day(d) - 1) &"" & Months(Month(d) - 1) &"" & Year(d) &" года"

End Function

Для полной русификации (склонение чисел) код нужно дополнить логикой обработки.

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

Да, для этого нужно модифицировать:

  • В VBA-коде — заменить массивы чисел на украинские/белорусские эквиваленты
  • В надстройках — выбрать соответствующий язык в настройках
  • Для BAHTTEXT — использовать подстановку на нужный алфавит

Пример для украинского: замените "рубль" на "гривня", а массивы чисел на Array("","одна","дві",...)

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

Все описанные методы (кроме онлайн-конвертеров) поддерживают автоматическое обновление:

  • Для формул — Excel пересчитывает значения при изменении исходных данных
  • Для VBA — функция работает как стандартная формула Excel
  • Для надстроек — обычно есть опция"Автообновление"

Если обновление не происходит:

  1. Проверьте настройки вычислений (Формулы → Параметры вычислений)
  2. Для VBA — убедитесь, что макросы разрешены
  3. Обновите данные клавишей F9