Как в Excel вставить функцию «Сумма прописью»: 4 рабочих способа

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

Многие пользователи ошибочно полагают, что для преобразования чисел в текст прописью требуются глубокие знания программирования. На самом деле, даже начинающий может справиться с этой задачей за 5–10 минут, используя готовые решения. Главное — понимать, какой подход подходит для вашего случая: одноразовая конвертация небольшого диапазона или автоматическая обработка тысяч строк в крупных отчётах.

Далее вы найдёте пошаговые инструкции с иллюстрациями, примерами формул и предупреждениями о типичных ошибках. А в конце статьи — FAQ с ответами на самые частые вопросы по теме.

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

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

Если вам нужно быстро преобразовать число в текст на английском, используйте:

=BAHTTEXT(A1)

Где A1 — ячейка с числом. Результат будет выглядеть так: "один рубль и 00 копеек" (для числа 1.00).

Для русского языка придётся пойти на хитрость:

  • 🔹 Установите надстройку "ЧислоПрописью" (бесплатные варианты есть в интернете).
  • 🔹 Используйте формулу с вызовом макроса (если вы знакомы с VBA):
    =RubText(A1)
  • 🔹 Для одноразового использования воспользуйтесь онлайн-конвертерами и вставьте результат в Excel.
⚠️ Внимание: Функция BAHTTEXT работает только с валютами типа "бат" (Таиланд) и не поддерживает рубли или доллары. Для корректного отображения на русском языке потребуется дополнительная настройка.
📊 Как часто вам нужно преобразовывать числа в текст прописью?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не пользовался

2. Способ: Формула для преобразования без макросов (ограниченная функциональность)

Если вы не хотите устанавливать надстройки или работать с VBA, можно создать формулу на основе вложенных ЕСЛИ. Этот метод подходит для чисел до 999 999 и требует ручного расширения для миллионов/миллиардов.

Пример формулы для числа в ячейке A1 (до 999):

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

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

ЕСЛИ(A1<100;ТЕКСТ(ЦЕЛОЕ(A1/10);"# ?0") & "дцать " & ТЕКСТ(ОСТАТ(A1;10);"#");

"сто и более")))

Минусы этого подхода:

  • 🔸 Ограничение на диапазон чисел (требуется доработка для больших значений).
  • 🔸 Не учитывает склонение валют ("рубль"/"рубля"/"рублей").
  • 🔸 Формула становится громоздкой и сложной для редактирования.

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

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

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

Инструкция по установке макроса:

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

    ' Код функции (полная версия — см. ниже)

    ' ...

    End Function

  4. Закройте редактор и вернитесь в Excel.
  5. Теперь в любой ячейке можно использовать =RubText(A1).

Полный код функции для русского языка (с поддержкой копеек):

Полный код VBA-макроса для "Сумма прописью"

Function RubText(ByVal MyNumber As Currency) As String

Dim Rub As String, Kop As String, Temp As String

Dim DecimalPlace As Integer, Cnt As Integer

' Округление до 2 знаков после запятой

MyNumber = Round(MyNumber, 2)

' Разделение на рубли и копейки

Rub = Int(MyNumber)

Kop = Format((MyNumber - Rub) * 100, "00")

' Преобразование рублей

If Rub <> 0 Then

Temp = ConvertDigits(Rub)

' Склонение слова "рубль"

If Rub Mod 100 >= 11 And Rub Mod 100 <= 19 Then

Temp = Temp & " рублей"

Else

Select Case Rub Mod 10

Case 1: Temp = Temp & " рубль"

Case 2, 3, 4: Temp = Temp & " рубля"

Case Else: Temp = Temp & " рублей"

End Select

End If

Else

Temp = "ноль рублей"

End If

' Добавление копеек

If Kop <> "00" Then

Temp = Temp & " " & Kop & " копеек"

End If

RubText = Temp

End Function

Function ConvertDigits(ByVal MyNumber As Variant) As String

Dim Txt As String, i As Integer

Dim Ones(1 To 9) As String, Teens(1 To 9) As String

Dim Tens(1 To 9) As String, Hundreds(1 To 9) As String

' Массивы для чисел

Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "четыре"

Ones(5) = "пять": Ones(6) = "шесть": Ones(7) = "семь"

Ones(8) = "восемь": Ones(9) = "девять"

Teens(1) = "десять": Teens(2) = "одиннадцать": Teens(3) = "двенадцать"

Teens(4) = "тринадцать": Teens(5) = "четырнадцать": Teens(6) = "пятнадцать"

Teens(7) = "шестнадцать": Teens(8) = "семнадцать": Teens(9) = "восемнадцать"

Tens(2) = "двадцать": Tens(3) = "тридцать": Tens(4) = "сорок"

Tens(5) = "пятьдесят": Tens(6) = "шестьдесят": Tens(7) = "семьдесят"

Tens(8) = "восемьдесят": Tens(9) = "девяносто"

Hundreds(1) = "сто": Hundreds(2) = "двести": Hundreds(3) = "триста"

Hundreds(4) = "четыреста": Hundreds(5) = "пятьсот": Hundreds(6) = "шестьсот"

Hundreds(7) = "семьсот": Hundreds(8) = "восемьсот": Hundreds(9) = "девятьсот"

' Логика преобразования

If MyNumber = 0 Then Exit Function

If MyNumber < 10 Then

Txt = Ones(MyNumber)

ElseIf MyNumber < 20 Then

Txt = Teens(MyNumber - 9)

ElseIf MyNumber < 100 Then

Txt = Tens(Int(MyNumber / 10)) & " " & ConvertDigits(MyNumber Mod 10)

ElseIf MyNumber < 1000 Then

Txt = Hundreds(Int(MyNumber / 100)) & " " & ConvertDigits(MyNumber Mod 100)

Else

Txt = ConvertDigits(Int(MyNumber / 1000)) & " тысяч" & ConvertDigits(MyNumber Mod 1000)

End If

ConvertDigits = Application.WorksheetFunction.Trim(Txt)

End Function

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

  • 🔹 Работает с любыми числами (включая миллиарды).
  • 🔹 Корректно склоняет валюту ("рубль"/"рубля"/"рублей").
  • 🔹 Можно модифицировать под другие валюты (доллары, евро).
⚠️ Внимание: Если при вводе формулы =RubText(A1) появляется ошибка #ИМЯ?, проверьте:
  1. Включены ли макросы в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы).
  2. Правильно ли скопирован код (особенно русские символы в массивах).

Макросы включены в настройках Excel|Файл сохранён в формате .xlsm (с поддержкой макросов)|Код скопирован без ошибок|Ячейка с числом имеет формат "Общий" или "Числовой"-->

4. Способ: Надстройки для Excel (самый удобный вариант)

Если вы не хотите возиться с формулами или VBA, установите специальную надстройку. Самые популярные решения:

Надстройка Стоимость Поддержка русского Ссылка
ЧислоПрописью Бесплатно Да Скачать
NumWords Платная (~$20) Да (настраивается) Официальный сайт
Атлант-Информ Бесплатно Да (рубли, доллары, евро) Скачать
Excel Number to Words Условно-бесплатно Нет (только английский) ExtendOffice

Инструкция по установке надстройки ЧислоПрописью:

  1. Скачайте файл .xlam с официального сайта.
  2. Откройте Excel и перейдите в Файл → Параметры → Надстройки.
  3. Внизу окна выберите Перейти... (или Go... в англоязычной версии).
  4. Нажмите Обзор, найдите скачанный файл и добавьте его.
  5. Теперь в Excel появится новая функция =ЧИСЛОПРОПИСЬЮ(A1).

Важно: Надстройки могут конфликтовать с антивирусами. Перед установкой добавьте папку с файлом .xlam в исключения антивируса.

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

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

  • 🔸 Ошибка #ИМЯ? — возникает, если макрос не подключён или название функции написано с ошибкой. Проверьте регистр (например, =RubText, а не =rubtext).
  • 🔸 Неправильное склонение валют — если функция выдаёт "1 рублей" вместо "1 рубль", исправьте код в разделе склонения (см. раздел с VBA).
  • 🔸 Округление копеек — если копейки отображаются как "99 копеек" вместо "99 копеек", проверьте формат ячейки с исходным числом (должен быть "Числовой" с 2 знаками после запятой).
  • 🔸 Медленная работа файла — если в книге много вызовов функции =RubText, отключите автоматический пересчёт (Формулы → Параметры вычислений → Вручную).

Также обратите внимание на региональные настройки Windows: если в системе установлен английский язык, функция может выдавать результат на английском даже при русском коде. Чтобы исправить это, измените язык системы на русский в Панель управления → Язык и региональные стандарты.

6. Альтернативные решения: Онлайн-сервисы и Power Query

Если вы работаете с облачными документами или не хотите устанавливать надстройки, рассмотрите эти варианты:

1. Онлайн-конвертеры:

  • 🌐 NumWord — поддерживает 20+ языков, включая русский.
  • 🌐 Text.ru — простой интерфейс, подходит для одноразового использования.
  • 🌐 Calculat.org — конвертация чисел до 10100.

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

  1. Скопируйте число из Excel.
  2. Вставьте в поле на сайте и получите текст прописью.
  3. Скопируйте результат обратно в Excel (вставляйте как Текст, чтобы избежать автоматического преобразования в число).

2. Power Query (для Excel 2016 и новее):

Если вам нужно преобразовать большой массив данных, воспользуйтесь Power Query:

  1. Выделите диапазон с числами.
  2. Перейдите в Данные → Получить данные → Из таблицы/диапазона.
  3. В редакторе Power Query добавьте пользовательский столбец с формулой на языке M:
    = Number.ToText([Column1], "ru-RU")
  4. Загрузите данные обратно в Excel.

Минус этого метода — результат будет на английском ("one thousand"), но его можно доработать через замену текста.

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

Метод Сложность Гибкость Подходит для Минусы
Формула ЕСЛИ Низкая Ограничена Одноразовые задачи, числа до 999 Не поддерживает миллионы, сложно редактировать
VBA-макрос Средняя Высокая Регулярное использование, большие объёмы данных Требует навыков VBA, может конфликтовать с антивирусом
Надстройки Низкая Высокая Любые задачи, поддержка нескольких валют Нужно устанавливать, возможны конфликты с макросами
Онлайн-сервисы Низкая Средняя Одноразовые задачи, небольшие объёмы Ручной ввод, риск ошибок при копировании
Power Query Средняя Средняя Обработка больших массивов данных Результат на английском, требует доработки

Рекомендации по выбору:

  • 🔹 Для одноразового использования — онлайн-сервисы или формула ЕСЛИ.
  • 🔹 Для регулярной работыVBA-макрос или надстройка.
  • 🔹 Для корпоративного использования — надстройка с поддержкой нескольких валют.

FAQ: Частые вопросы по теме

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

Да, но с ограничениями. Вы можете:

  • Использовать формулу на основе ЕСЛИ (подходит для чисел до 999).
  • Воспользоваться онлайн-конвертером и вставить результат как текст.
  • Установить надстройку (не требует знаний VBA).

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

❓ Почему функция выдаёт "1 рублей" вместо "1 рубль"?

Это ошибка склонения, которая возникает из-за некорректной логики в коде VBA. Исправьте блок склонения в макросе (см. раздел с кодом), где проверяется остаток от деления на 10 и 100. Пример правильного условия:

If Rub Mod 100 >= 11 And Rub Mod 100 <= 19 Then

Temp = Temp & " рублей"

Else

Select Case Rub Mod 10

Case 1: Temp = Temp & " рубль"

Case 2, 3, 4: Temp = Temp & " рубля"

Case Else: Temp = Temp & " рублей"

End Select

End If

❓ Как преобразовать сумму прописью в Google Таблицах?

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

  1. Использовать надстройку Number to Words (устанавливается из меню Дополнения → Установить дополнения).
  2. Написать собственную функцию на Google Apps Script (аналог VBA):
function RubText(number) {

// Код функции (аналогично VBA)

return result;

}

Пример вызова: =RubText(A1).

❓ Можно ли преобразовать отрицательные числа?

Да, но для этого нужно доработать макрос. Добавьте в начало функции RubText проверку:

If MyNumber < 0 Then

RubText = "минус " & RubText(Abs(MyNumber))

Exit Function

End If

Теперь функция будет корректно обрабатывать отрицательные значения, например: "минус пятьсот рублей".

❓ Где скачать готовый шаблон Excel с функцией "Сумма прописью"?

Готовые шаблоны можно найти на следующих ресурсах:

  • 🔗 Excel-VBA.ru (раздел "Шаблоны").
  • 🔗 PlanetaExcel (поиск по запросу "сумма прописью").
  • 🔗 GitHub (репозитории с открытым кодом для Excel).

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