Как вставить в Excel формулу «Сумма прописью»: 3 рабочих способа с примерами

Зачем нужна сумма прописью в Excel и где это применяется

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

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

В этой статье мы разберем все актуальные способы, включая универсальный VBA-код для российского рубля с копейками, который можно адаптировать под любую валюту. Также вы узнаете, как избежать типичных ошибок при работе с большими числами (например, миллиардами) и почему стандартная функция ТЕКСТ() здесь бесполезна.

Способ 1: Использование надстройки «Сумма прописью» (самый простой метод)

Если вам нужно быстрое решение без программирования, лучший вариант — установить специализированную надстройку. Например, бесплатная надстройка «Сумма Прописью» от PlanetaExcel или «NumToText» от OfficeMarket. Эти инструменты интегрируются в ленту Excel и позволяют преобразовывать числа в текст одним кликом.

Как это работает:

  • 📥 Скачайте надстройку с официального сайта (например, PlanetaExcel). Обращайте внимание на совместимость с вашей версией Excel (2016, 2019, 365 или более ранние).
  • 🔧 Установите файл (обычно это .xlsm или .xlam). Для этого откройте Файл → Параметры → Надстройки → Перейти и укажите путь к скачанному файлу.
  • 🖱️ Примените функцию. После установки в Excel появится новая категория функций (например, =СУММАПРОП()). Введите в ячейку формулу вида =СУММАПРОП(A1; "рубль"; "копейка").

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

  • ✅ Не требует знаний VBA.
  • ✅ Поддерживает несколько валют и языков.
  • ✅ Автоматически склоняет слова («рубль», «рубля», «рублей»).
⚠️ Внимание: Некоторые надстройки могут конфликтовать с антивирусным ПО. Перед установкой добавьте папку с надстройкой в исключения Windows Defender или Kaspersky.
📊 Какой способ преобразования суммы прописью вы используете чаще?
Ручной ввод
Надстройки
VBA-макросы
Формулы с внешними инструментами
Не использую

Способ 2: VBA-макрос для суммы прописью (гибкое решение)

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

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

  1. Откройте редактор VBA: нажмите Alt + F11.
  2. В окне проекта найдите вашу книгу (VBAProject (Имя_файла.xlsx)) и кликните правой кнопкой по Модули → Вставить → Модуль.
  3. Скопируйте код ниже и вставьте его в окно модуля:
Function SumProp(ByVal MyNumber As Currency, Optional ByVal CurrencyName As String = "рубль") As String

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

Dim DecimalPlace As Integer, Cnt As Integer

' Округляем до копеек

MyNumber = Round(MyNumber, 2)

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

Rubles = Int(MyNumber)

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

' Преобразуем рубли

If Rubles <> 0 Then

Temp = ConvertLessThanOneThousand(Rubles)

Cnt = 1

Do While Rubles >= 1000

Rubles = Rubles \ 1000

Temp = ConvertLessThanOneThousand(Rubles) & " " & GetThousand(Cnt) & " " & Temp

Cnt = Cnt + 1

Loop

SumProp = Temp & " " & GetCurrency(Rubles, CurrencyName)

Else

SumProp = ""

End If

' Добавляем копейки

If Kop <> "00" Then

SumProp = SumProp & " " & Kop & " " & GetCurrency(Kop, "копейка")

Else

SumProp = SumProp & " 00 копеек"

End If

End Function

Function ConvertLessThanOneThousand(ByVal MyNumber As Integer) As String

Dim Ones As Variant, Tens As Variant, Hundreds As String

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

"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", _

"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")

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

"восемьдесят", "девяносто")

If MyNumber = 0 Then

ConvertLessThanOneThousand = ""

Else

Hundreds = Choose((MyNumber \ 100) + 1, "", "сто", "двести", "триста", "четыреста", _

"пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")

MyNumber = MyNumber Mod 100

If MyNumber < 20 Then

ConvertLessThanOneThousand = Hundreds & " " & Ones(MyNumber)

Else

ConvertLessThanOneThousand = Hundreds & " " & Tens(MyNumber \ 10) & " " & Ones(MyNumber Mod 10)

End If

End If

ConvertLessThanOneThousand = Application.WorksheetFunction.Trim(ConvertLessThanOneThousand)

End Function

Function GetThousand(ByVal Cnt As Integer) As String

Select Case Cnt

Case 1: GetThousand = "тысяча"

Case 2: GetThousand = "миллион"

Case 3: GetThousand = "миллиард"

End Select

End Function

Function GetCurrency(ByVal MyNumber As Variant, ByVal CurrencyName As String) As String

Dim LastDigit As Integer

LastDigit = Right(MyNumber, 1)

Select Case CurrencyName

Case "рубль"

Select Case LastDigit

Case 1: GetCurrency = "рубль"

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

Case Else: GetCurrency = "рублей"

End Select

Case "копейка"

Select Case LastDigit

Case 1: GetCurrency = "копейка"

Case 2, 3, 4: GetCurrency = "копейки"

Case Else: GetCurrency = "копеек"

End Select

End Select

End Function

После вставки кода закройте редактор VBA. Теперь в любой ячейке можно использовать функцию =SumProp(A1), где A1 — ячейка с числом. По умолчанию валюта указывается как «рубль», но вы можете изменить ее на «доллар» или «евро», добавив второй параметр: =SumProp(A1; "доллар").

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). Если сохранить файл как .xlsx, код перестанет выполняться.

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

Файл сохранен с расширением .xlsm|

Число в исходной ячейке имеет формат "Денежный" или "Числовой"|

В коде указаны правильные названия валют (рубль/доллар/евро)-->

Способ 3: Формулы с внешними инструментами (для пользователей без VBA)

Если у вас нет возможности использовать макросы или надстройки (например, в Excel Online или на рабочем компьютере с ограничениями), можно обойтись внешними сервисами или Power Query. Рассмотрим оба варианта.

Вариант А: Подключение к API сервиса преобразования

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

Пример формулы:

=WEBSERVICE("https://num2word.ru/api/?num=" & A1 & "¤cy=RUB")

Минус метода — зависимость от интернета и возможные ограничения по количеству запросов.

Вариант Б: Power Query (для Excel 2016 и новее)

Power Query позволяет подгружать данные из внешних источников, включая текстовые преобразования. Создайте запрос, который будет брать число из таблицы, отправлять его на обработку (например, через локальный скрипт на Python) и возвращать текст прописью. Этот метод сложнее в настройке, но подходит для автоматизации крупных проектов.

Метод Сложность Требует интернета Поддерживает валюты Работает в Excel Online
Надстройки Низкая Нет Да Нет
VBA-макрос Средняя Нет Да (настраивается) Нет
API + WEBSERVICE Высокая Да Да Да
Power Query Очень высокая Зависит от скрипта Да Нет

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

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

  • 🔢 Неверный формат ячейки. Если в исходной ячейке стоит текст вместо числа (например, "1234" вместо 1234), макрос или надстройка не сработает. Решение: используйте функцию =ЗНАЧЕН() для преобразования текста в число.
  • 💰 Отсутствие копеек. Если число целое (например, 1000), некоторые скрипты не добавляют «00 копеек». Решение: проверьте код на обработку случаев с нулевыми копейками.
  • 🌍 Неправильное склонение валют. Например, «1 рубль» вместо «1 рубля». Решение: в VBA-коде используйте функцию GetCurrency (приведена выше).
  • 📉 Ошибка при больших числах. Макросы могут некорректно обрабатывать числа свыше 2 млрд из-за ограничений типа Currency. Решение: замените Currency на Double в объявлении переменных.

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

  1. Примените формулу к первым 100 строкам.
  2. Скопируйте результат как значения (Ctrl + C → Специальная вставка → Значения).
  3. Повторите для следующих 100 строк.
Почему функция ТЕКСТ() не подходит для суммы прописью?

Функция ТЕКСТ() в Excel преобразует числа в текстовый формат с заданными символами (например, =ТЕКСТ(1234; "0.00") вернет "1234.00"), но она не умеет прописывать числа словами. Ее задача — форматирование (добавление разделителей, знаков валют и т.д.), а не текстовое развертывание чисел.

Адаптация под другие валюты и языки

Базовый VBA-код, приведенный выше, настроен на российский рубль. Однако его легко модифицировать для других валют или языков. Например, для долларов США замените строки в функции GetCurrency:

Case "доллар"

Select Case LastDigit

Case 1: GetCurrency = "dollar"

Case Else: GetCurrency = "dollars"

End Select

Для евро логика еще проще, так как слово не склоняется:

Case "евро"

GetCurrency = "евро"

Если нужна поддержка украинской гривны или казахстанского тенге, добавьте новые случаи в GetCurrency и обновите массивы чисел в ConvertLessThanOneThousand (например, «один» → «один», «два» → «два» для украинского языка).

Для полноценной многоязычной поддержки рекомендуется использовать надстройки с локализацией, например, «NumToText Pro», которая включает словари для 10+ языков.

Автоматизация для бухгалтерских документов

В бухгалтерии сумма прописью требуется не только в счетах, но и в платежных поручениях, актах сверки и накладных. Чтобы ускорить работу, можно создать шаблон Excel с автоматическим заполнением:

  1. Создайте таблицу с полями: «Номер документа», «Дата», «Сумма (числом)», «Сумма прописью».
  2. В ячейку с суммой прописью вставьте VBA-функцию =SumProp([@Сумма]) (если таблица оформлена как умная таблица).
  3. Добавьте проверку данных (Данные → Проверка данных) для поля «Сумма», чтобы исключить ввод текста.
  4. Сохраните файл как шаблон (.xltm) для повторного использования.

Для еще большей автоматизации свяжите Excel с или Битрикс24 через Power Automate (ранее Microsoft Flow). Это позволит:

  • 📤 Экспортировать суммы из 1С в Excel.
  • 🔄 Автоматически преобразовывать их в текст прописью.
  • 📥 Загружать обратно в документ (например, в PDF).
⚠️ Внимание: При интеграции с 1С убедитесь, что формат чисел в обеих системах совпадает. Например, в 1С разделителем дробной части может быть запятая (1 234,56), а в Excel — точка (1234.56). Используйте функцию =ПОДСТАВИТЬ() для замены разделителей.

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

Можно ли использовать сумму прописью в Excel Online?

В Excel Online нет поддержки VBA-макросов, поэтому единственный рабочий способ — подключение к внешнему API через функцию WEBSERVICE (доступна в Excel 365). Альтернатива — ручной ввод или использование Google Таблиц с надстройкой RUBTOTEXT.

Почему макрос выдает ошибку «Тип не совпадает»?

Ошибка возникает, если в ячейке текст вместо числа. Проверьте формат ячейки (Числовой или Денежный) и используйте =ЗНАЧЕН() для преобразования. Также убедитесь, что в коде VBA переменная объявлена как Currency или Double.

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

Если вы используете VBA-функцию, она обновляется автоматически при изменении исходных данных. Для надстроек проверьте настройки: некоторые требуют ручного обновления (F9). В Power Query настройте параметр Обновить при открытии файла.

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

Да, для этого модифицируйте массивы Ones и Tens в VBA-коде на английские эквиваленты (например, "one", "two", ..., "nineteen"). Также добавьте поддержку долларов или фунтов в функцию GetCurrency.

Где скачать готовый файл Excel с формулой суммы прописью?

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

  • PlanetaExcel (раздел «Надстройки»).
  • ExcelVBA (вкладка «Макросы»).
  • GitHub (поиск по запросу Excel sum in words).

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