Зачем нужна сумма прописью в Excel и где это применяется
Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач при работе с финансовой документацией. Без этого не обойтись при оформлении счетов-фактур, договоров, платежных поручений или актов выполненных работ. Ручное прописывание сумм отнимает время и чревато ошибками, особенно когда речь идет о сотнях строк в таблице.
В Microsoft Excel нет встроенной функции для автоматического преобразования чисел в текст прописью — это удивляет многих пользователей, учитывая востребованность задачи. Однако проблему можно решить тремя способами: с помощью надстроек, VBA-макросов или формул с внешними инструментами. Каждый метод имеет свои плюсы и минусы: от простоты внедрения до гибкости настройки под конкретные валюты (рубли, доллары, евро) или языки.
В этой статье мы разберем все актуальные способы, включая универсальный VBA-код для российского рубля с копейками, который можно адаптировать под любую валюту. Также вы узнаете, как избежать типичных ошибок при работе с большими числами (например, миллиардами) и почему стандартная функция ТЕКСТ() здесь бесполезна.
Способ 1: Использование надстройки «Сумма прописью» (самый простой метод)
Если вам нужно быстрое решение без программирования, лучший вариант — установить специализированную надстройку. Например, бесплатная надстройка «Сумма Прописью» от PlanetaExcel или «NumToText» от OfficeMarket. Эти инструменты интегрируются в ленту Excel и позволяют преобразовывать числа в текст одним кликом.
Как это работает:
- 📥 Скачайте надстройку с официального сайта (например, PlanetaExcel). Обращайте внимание на совместимость с вашей версией Excel (2016, 2019, 365 или более ранние).
- 🔧 Установите файл (обычно это
.xlsmили.xlam). Для этого откройтеФайл → Параметры → Надстройки → Перейтии укажите путь к скачанному файлу. - 🖱️ Примените функцию. После установки в Excel появится новая категория функций (например,
=СУММАПРОП()). Введите в ячейку формулу вида=СУММАПРОП(A1; "рубль"; "копейка").
Преимущества метода:
- ✅ Не требует знаний VBA.
- ✅ Поддерживает несколько валют и языков.
- ✅ Автоматически склоняет слова («рубль», «рубля», «рублей»).
⚠️ Внимание: Некоторые надстройки могут конфликтовать с антивирусным ПО. Перед установкой добавьте папку с надстройкой в исключения Windows Defender или Kaspersky.
Способ 2: VBA-макрос для суммы прописью (гибкое решение)
Если надстройки по какой-то причине не подходят (например, из-за корпоративных ограничений), можно воспользоваться VBA-скриптом. Этот метод требует минимальных знаний программирования, но зато дает полный контроль над форматом вывода. Ниже приведен универсальный код для российского рубля с копейками, который работает в Excel 2010–2023.
Инструкция по установке макроса:
- Откройте редактор VBA: нажмите
Alt + F11. - В окне проекта найдите вашу книгу (
VBAProject (Имя_файла.xlsx)) и кликните правой кнопкой поМодули → Вставить → Модуль. - Скопируйте код ниже и вставьте его в окно модуля:
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 при обработке большого диапазона ячеек. Если вам нужно преобразовать тысячи строк, используйте пошаговую обработку:
- Примените формулу к первым 100 строкам.
- Скопируйте результат как значения (
Ctrl + C → Специальная вставка → Значения). - Повторите для следующих 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 с автоматическим заполнением:
- Создайте таблицу с полями: «Номер документа», «Дата», «Сумма (числом)», «Сумма прописью».
- В ячейку с суммой прописью вставьте VBA-функцию
=SumProp([@Сумма])(если таблица оформлена как умная таблица). - Добавьте проверку данных (
Данные → Проверка данных) для поля «Сумма», чтобы исключить ввод текста. - Сохраните файл как шаблон (
.xltm) для повторного использования.
Для еще большей автоматизации свяжите Excel с 1С или Битрикс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).
Перед скачиванием проверьте файлы на вирусы.