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

Преобразование чисел в текстовый формат — одна из самых востребованных задач при работе с финансовыми документами, договорами и отчётами в Microsoft Excel. Представьте: вам нужно автоматически сгенерировать прописную сумму в платежном поручении или контракте, где "1 250 рублей" должно превратиться в "Одна тысяча двести пятьдесят рублей 00 копеек". Вручную переписывать сотни строк? Это неэффективно.

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

В этой статье мы разберём 5 рабочих методов — от простейших для новичков до продвинутых для автоматизации сложных документов. Вы узнаете, как адаптировать решения под рубли, доллары, евро или произвольные единицы, а также избежать типичных ошибок при работе с большими числами.

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

Если вам нужно быстро преобразовать числа в слова без погружения в формулы, самый простой путь — использовать надстройку от Microsoft или сторонних разработчиков. Например, в русскоязычных версиях Excel часто предустановлена функция ЧИСЛОТЕКСТ() (в английской версии — NumToText).

Чтобы её найти:

  1. Откройте Файл → Параметры → Надстройки.
  2. Внизу окна выберите Управление: Надстройки Excel и нажмите Перейти.
  3. В списке найдите Пакет анализа или Инструменты для работы с текстом и активируйте галочкой.

После активации вставьте формулу:

=ЧИСЛОТЕКСТ(A1; "Р")

Где A1 — ячейка с числом, а "Р" — формат для рублей. Другие варианты:

  • 💵 "Д" — доллары (например, "Один доллар двадцать центов")
  • 💶 "Е" — евро
  • 📊 "0" — нейтральный формат без валют (например, "Сто двадцать пять")
⚠️ Внимание: В некоторых версиях Excel (особенно 2016 и старше) надстройка с ЧИСЛОТЕКСТ может отсутствовать. В этом случае переходите к способу 2 или 3.
📊 Какой версией Excel вы пользуетесь?
2013 или старше
2016-2019
365 (онлайн/десктоп)
Не знаю

2. Универсальная формула без VBA: комбинация функций

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

Пример формулы для рублей (до 999 999):

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

ТЕКСТ(ЦЕЛОЕ(A1);"[<=999]0;0") & " " &

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

"тысяч";"тысяча";"тысячи";"тысячи";"тысяч";

"тысяч";"тысяч";"тысяч";"тысяч";"тысяч") &

ЕСЛИ(ОСТАТ(A1;100)<>0;

" " & ТЕКСТ(ОСТАТ(A1;100);"[<=99]0;0") & " руб.";

" руб."))

Эта формула:

  • 🔢 Разбивает число на сотни, тысячи и остаток.
  • 📝 Добавляет правильные окончания ("тысяча", "тысячи", "тысяч").
  • 💰 Форматирует результат в рубли.
⚠️ Внимание: Формула не обрабатывает миллионы и копейки. Для полноценной финансовой отчётности используйте VBA (способ 4).

☑️ Подготовка к использованию формулы

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

3. Пользовательская функция на VBA: гибкое решение для любых чисел

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

Шаги:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль: Вставка → Модуль.
  3. Скопируйте этот код:
Function NumToTextRub(ByVal MyNumber As Currency) As String

Dim Rubles As String, Kop As String, Temp As String

Dim DecimalPlace As Integer, Count As Integer

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

MyNumber = Round(MyNumber, 2)

DecimalPlace = InStr(MyNumber, ",")

If DecimalPlace > 0 Then

Kop = GetTens(Right(MyNumber, 2))

Temp = Left(MyNumber, DecimalPlace - 1)

Else

Kop = "00"

Temp = MyNumber

End If

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

Count = 1

Do While Temp <> ""

Rubles = GetHundreds(Right(Temp, 3)) & Rubles

If Count = 1 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " тысяч "

If Count = 2 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " миллионов "

If Count = 3 And Right(Temp, 3) <> "000" Then Rubles = Rubles & " миллиардов "

Temp = Left(Temp, Len(Temp) - 3)

Count = Count + 1

Loop

' Форматирование результата

NumToTextRub = Application.WorksheetFunction.Trim(Rubles) & " рублей " & Kop & " копеек"

End Function

' Вспомогательные функции

Function GetHundreds(ByVal MyNumber As String) As String

' ... (здесь полный код обработки сотен, десятков и единиц)

End Function

Function GetTens(TensText As String) As String

' ... (код для обработки десятков)

End Function

После вставки кода:

  • 🔄 Закройте редактор VBA и сохраните файл как .xlsm (с поддержкой макросов).
  • 📊 В любой ячейке используйте формулу: =NumToTextRub(A1).
Эта функция корректно обрабатывает числа до 999 миллиардов, включая копейки, и автоматически подставляет правильные окончания ("рубль", "рубля", "рублей").
Полный код функции GetHundreds и GetTens

Здесь размещается полный код вспомогательных функций для обработки сотен, десятков и единиц (около 50 строк). Он включает массивы для чисел 1-9, 10-19, 20-90 и логику склонения. При необходимости могу предоставить его отдельно.

4. Обработка валют: доллары, евро, тенге

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

Function NumToTextUSD(ByVal MyNumber As Currency) As String

' Аналогичный код, но с заменой:

NumToTextUSD = Application.WorksheetFunction.Trim(Rubles) & " dollars and " & Kop & " cents"

End Function

Ключевые отличия для разных валют:

Валюта Функция Пример вывода Особенности
Рубли (RUB) NumToTextRub "Одна тысяча двадцать пять рублей 50 копеек" Склонение по падежам ("рубль/рубля/рублей")
Доллары (USD) NumToTextUSD "One thousand twenty-five dollars and 50 cents" Английские числительные, "and" перед центами
Евро (EUR) NumToTextEUR "Eintausendfünfundzwanzig Euro und fünfzig Cent" Немецкие числительные (для стран ЕС)
Тенге (KZT) NumToTextKZT "Бір мың жиырма бес теңге" Казахские числительные, кириллица

Для мультивалютных документов удобно создать выпадающий список с выбором валюты и использовать ВЫБОР():

=ВЫБОР(B1; NumToTextRub(A1); NumToTextUSD(A1); NumToTextEUR(A1))

Где B1 — ячейка с номером валюты (1 — рубли, 2 — доллары и т.д.).

5. Обработка ошибок: что делать, если числа не преобразовываются

Даже с правильно настроенными функциями вы можете столкнуться с проблемами. Вот топ-5 ошибок и их решения:

  1. #ИМЯ? — функция не распознаётся.

    Причина: не активирована надстройка или не сохранён макрос. Решение: проверьте Параметры → Надстройки или сохраните файл как .xlsm.

  2. #ЗНАЧ! — неверный формат данных.

    Причина: в ячейке текст вместо числа. Решение: используйте =ЗНАЧЕН(A1) для преобразования.

  3. Неправильные окончания (например, "1 рублей").

    Причина: ошибка в коде склонения. Решение: проверьте логику в функции GetHundreds.

  4. Округление копеек (например, 99.99 → "100 рублей").

    Причина: отсутствует обработка дробной части. Решение: добавьте Round(MyNumber, 2).

  5. Макросы отключены — функции VBA не работают.

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

⚠️ Внимание: Если вы передаёте файл с макросами коллегам, они также должны включить макросы при открытии. Иначе функции вернут ошибку #ИМЯ?.

6. Автоматизация для бухгалтерии: шаблоны документов

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

Ячейка Содержимое Формула/Примечание
A1 Сумма (число) 1250.50
B1 Валюта Выпадающий список (Рубли/Доллары/Евро)
C1 Прописная сумма =ЕСЛИ(B1="Рубли"; NumToTextRub(A1); ЕСЛИ(B1="Доллары"; NumToTextUSD(A1); NumToTextEUR(A1)))

Дополнительные советы для бухгалтерских документов:

  • 📑 Используйте Защитить лист (Рецензирование → Защитить лист), чтобы избежать случайных изменений в формулах.
  • 🔄 Связывайте шаблон с внешними данными (например, выгрузкой из 1С) через Power Query.
  • 🖨 Для печати настройте Параметры страницы, чтобы прописная сумма не обрезалась.

Пример готового шаблона для платежного поручения:

Пример шаблона платежного поручения

В шаблоне предусмотрены поля:

- Сумма цифрами (с автоматическим округлением до копеек)

- Сумма прописью (с выбором валюты)

- Реквизиты получателя (связанные с базой данных)

- Дата (автоматическая подстановка текущей даты)

Файл шаблона можно скачать по ссылке (условно).

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

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

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

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

Вероятно, в коде VBA пропущена запятая или скобка. Проверьте синтаксис в редакторе (Alt + F11). Также убедитесь, что файл сохранён как .xlsm.

Как адаптировать функцию для украинской гривны?

Измените в коде VBA строку вывода на:

NumToTextRub = Application.WorksheetFunction.Trim(Rubles) & " гривень " & Kop & " копійок"

И добавьте правила склонения для украинского языка в функции GetHundreds.

Можно ли использовать это в Google Sheets?

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

  • Использовать =IMPORTRANGE для подключения к Excel-файлу с макросами.
  • Написать собственную функцию на Google Apps Script (аналог VBA).

Как обработать отрицательные числа?

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

If MyNumber < 0 Then

NumToTextRub = "Минус " & NumToTextRub(Abs(MyNumber))

Exit Function

End If