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

Почему Excel не умеет писать числа прописью «из коробки»?

Microsoft Excel отлично справляется с математическими вычислениями, но преобразование чисел в текстовый формат (например, «123» → «сто двадцать три») не входит в его базовые функции. Это удивляет многих пользователей: почему программа, которая умеет строить сложные графики и решать уравнения, не может выполнить столь простую на первый взгляд задачу?

Причина кроется в архитектуре Excel. Программа изначально заточена под числовые операции и анализ данных, а не на лингвистическую обработку. Функции вроде ТЕКСТ() или ФОРМАТ() преобразуют числа в строки по шаблонам (например, добавляют знаки валют или разделители), но не анализируют морфологию языка. Для полноценного преобразования требуется либо внешний плагин, либо ручное программирование через VBA или Power Query.

К счастью, есть обходные пути — от простых формул для рублей и копеек до универсальных макросов, работающих с любыми числами. Далее разберём их все, начиная с самых доступных.

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

Способ 1: Формула для рублей и копеек (без VBA)

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

Алгоритм работает так:

  1. Разбиваем число на сотни, десятки и единицы.
  2. Для каждого разряда подставляем текстовое значение из справочника.
  3. Склеиваем результаты с учётом падежей («рубль», «рубля», «рублей»).

Пример формулы для ячейки A1 с числом 1234,56:

=ЕСЛИ(A1=0;"";ТЕКСТ(ЦЕЛОЕ(A1);"[<=999] # \"руб.\";[>999] # \" \"руб.\"") & " " & ЕСЛИ(ОСТАТ(A1;1)=0;"";ОКРУГЛТ((A1-ЦЕЛОЕ(A1))*100;0) & " коп."))
⚠️ Внимание: Эта формула упрощённая и не учитывает все правила русского языка (например, «один рубль» vs «два рубля»). Для точного результата потребуется доработка или использование VBA.

Создайте справочную таблицу с числами от 0 до 999|Разбейте исходное число на разряды (единицы, тысячи, миллионы)|Используйте функцию ВПР для подстановки текстовых значений|Проверьте результат на числах с нулями (например, 1001, 20005)

-->

Способ 2: Готовые надстройки для Excel

Если не хочется возиться с формулами, можно установить специальные надстройки. Они добавляют в Excel новые функции, например =NUMTOSTR() или =РУБЛИПРОПИСЬЮ().

Популярные решения:

  • 📌 «ЧислоПрописью» от Add-in Express — поддерживает русский, английский и украинский языки, работает с валютами.
  • 📌 «RubToStr» — бесплатная надстройка для рублей и копеек, интегрируется в ленту Excel.
  • 📌 «Атлант-Информ» — плагин для бухгалтеров с расширенными настройками падежей.

Как установить надстройку:

  1. Скачайте файл с расширением .xlam или .xlsm.
  2. В Excel перейдите в Файл → Параметры → Надстройки → Перейти.
  3. Нажмите «Обзор», выберите скачанный файл и подтвердите установку.
Надстройка Стоимость Поддержка языков Особенности
ЧислоПрописью От 1 200 ₽ Русский, английский Интеграция с 1С
RubToStr Бесплатно Только русский Простой интерфейс
Атлант-Информ От 2 500 ₽ Русский, украинский Для бухгалтерских документов
⚠️ Внимание: Бесплатные надстройки могут содержать ограничения (например, не работать с числами больше 999 999). Перед установкой проверьте отзывы и совместимость с вашей версией Excel.

Способ 3: VBA-макрос для универсального преобразования

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

Пример кода для модуля Module1:

Function NumToStr(ByVal n As Double) As String

Dim Rub As String, Kop As String

Rub = ConvertLessThanOneThousand(Int(n))

Kop = ConvertLessThanOneThousand(Round((n - Int(n)) * 100, 0))

NumToStr = Rub & " руб. " & Kop & " коп."

End Function

Function ConvertLessThanOneThousand(ByVal n As Integer) As String

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

' (для краткости опущен, полную версию см. в документации)

End Function

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. В ячейке используйте формулу =NumToStr(A1).
Полный код функции ConvertLessThanOneThousand

' Массивы для единиц, десятков и сотен

Dim Units As Variant, Teens As Variant, Tens As Variant

Units = Array("", "один", "два", "три", ..., "девять")

Teens = Array("десять", "одиннадцать", ..., "девятнадцать")

Tens = Array("", "десять", "двадцать", ..., "девяносто")

' Логика преобразования чисел 1-999 с учётом падежей

If n = 0 Then Exit Function

If n >= 100 Then ConvertLessThanOneThousand = Units(n \ 100) & " сто " & ConvertLessThanOneThousand(n Mod 100)

If n >= 20 Then ConvertLessThanOneThousand = Tens(n \ 10) & " " & ConvertLessThanOneThousand(n Mod 10)

If n >= 10 Then ConvertLessThanOneThousand = Teens(n - 9)

If n < 10 Then ConvertLessThanOneThousand = Units(n)

Критическая деталь: макрос должен учитывать род существительного («рубль» — мужской, «копейка» — женский), иначе будут ошибки вроде «одна рубль» или «два копейки».

Способ 4: Power Query для массовой обработки

Если нужно преобразовать тысячи строк (например, в отчёте), удобнее использовать Power Query. Этот инструмент позволяет создавать пользовательские функции и применять их ко всему столбцу.

Алгоритм:

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

let

rub = Number.ToText(number, "ru-RU"),

// Здесь добавляется логика преобразования

result = if number = 1 then "один рубль" else "рубли"

in

result

Преимущества Power Query:

  • 🔄 Обрабатывает большие объёмы данных без тормозов.
  • 🔧 Позволяет сохранять шаги преобразования для повторного использования.
  • 📊 Интегрируется с Power BI для визуализации.
⚠️ Внимание: Power Query требует Excel 2016 или новее. В старых версиях (2010–2013) этот инструмент назывался Power Query Add-in и устанавливался отдельно.

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

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

Популярные сервисы:

  • 🌐 Num-Word.ru — поддерживает русский, английский, немецкий.
  • 🌐 Text.ru — простой интерфейс, экспорт в Word/Excel.
  • 🌐 Calc.ru — с учётом валют и падежей.

Как перенести результат в Excel:

  1. Скопируйте преобразованный текст из онлайн-сервиса.
  2. В Excel выберите Главная → Вставить → Специальная вставка → Текст.
  3. При необходимости разбейте текст на столбцы (Данные → Текст по столбцам).

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

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

Ошибка Причина Решение
Неправильные падежи («два рубля» → «два рубль») Формула не учитывает правила русского языка Добавьте в VBA проверку остатка от деления на 10
Округление копеек (1,99 → 1 рубль 99 копеек) Формула использует ОКРУГЛ() вместо ОКРУГЛТ() Замените функцию на ОКРУГЛТ((A1-ЦЕЛОЕ(A1))*100;0)
Ошибка #ИМЯ? при использовании макроса Макрос не сохранён или файл не в формате .xlsm Сохраните файл как «Книга Excel с поддержкой макросов»

Ещё одна частая проблема — медленная работа при обработке больших диапазонов. Если формула или макрос «подвисает», попробуйте:

  • 🔹 Разбить данные на части и обрабатывать по 1000 строк.
  • 🔹 Отключить автоматический пересчёт (Формулы → Параметры вычислений → Вручную).
  • 🔹 Оптимизировать код VBA (например, заменить циклы на массивы).

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

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

Да, но только с помощью пользовательской функции на Google Apps Script. Пример кода:

function numToWords(num) {

// Логика преобразования (аналогично VBA)

return "сто двадцать три";

}

Чтобы использовать её, откройте Расширения → Apps Script, вставьте код и сохраните. Затем в ячейке вызовите =numToWords(A1).

Почему моя формула работает только для чисел до 999?

Скорее всего, вы не учли разбиение числа на разряды (тысячи, миллионы, миллиарды). Доработайте формулу, добавив проверки:

=ЕСЛИ(A1>=1000000; ConvertMillions(A1); ЕСЛИ(A1>=1000; ConvertThousands(A1); ConvertLessThanOneThousand(A1)))

Где ConvertMillions и ConvertThousands — вспомогательные функции.

Как добавить поддержку украинского или казахского языка?

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

Units = Array("", "один", "два", "три", ..., "дев'ять")

Tens = Array("", "десять", "двадцять", ..., "дев'яносто")

Также потребуется скорректировать правила склонения валют («гривня», «тенге»).

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

Да, если использовать формулы или Power Query. Макросы VBA обновляются только при открытии файла или по команде (F9). Чтобы принудительно пересчитать:

  • Для формул: Формулы → Пересчитать лист.
  • Для Power Query: Данные → Обновить все.
Где скачать готовый файл Excel с формулами для чисел прописью?

Готовые шаблоны можно найти на сайтах:

Перед использованием проверьте файлы на вирусы и совместимость с вашей версией Excel.