Зачем нужна сумма прописью в Excel и когда она пригодится
Представьте ситуацию: вы формируете счёт для клиента, где итоговая сумма должна быть указана не только цифрами, но и прописью. Или готовите финансовый отчёт, где требуется дублировать числовые значения текстом для юридической значимости. Вручную переписывать каждую сумму — неэффективно и чревато ошибками. Здесь на помощь приходит автоматизация через формулу суммы прописью в Excel.
Встроенной функции для такого преобразования в Excel нет — но это не проблема. Существует несколько способов решить задачу: от использования пользовательских функций VBA до подключения надстроек или даже формул на основе текстового разбора. Выбор метода зависит от ваших навыков, версии Excel и требований к формату вывода. Например, для бухгалтерских документов важно правильное склонение рублей/копеек, а для внутренних отчётов может хватить упрощённого варианта.
В этой статье мы разберём все актуальные методы — от самых простых (без программирования) до продвинутых решений с VBA. Вы узнаете, как:
- 🔹 Настроить сумму прописью через стандартные функции Excel (без макросов)
- 🔹 Создать пользовательскую функцию VBA для гибкого форматирования
- 🔹 Подключить готовые надстройки (включая RubToStr и аналоги)
- 🔹 Обработать особенности: копейки, отрицательные числа, валюты
Метод 1: Сумма прописью без VBA (только формулы Excel)
Если у вас нет доступа к макросам (например, в корпоративной версии Excel с ограниченными правами), можно обойтись стандартными функциями. Этот способ подходит для чисел до 999 999 и требует предварительной настройки таблицы с разборами чисел.
Суть метода: мы создаём вспомогательную таблицу со словами для чисел (единицы, десятки, сотни) и затем с помощью функций ИНДЕКС, ПОИСКПОЗ и ТЕКСТ собираем итоговую строку. Минус — ограниченная гибкость и отсутствие поддержки копеек/валют.
⚠️ Внимание: Этот метод не подходит для чисел с десятичными знаками (например, 123,45). Для копеек потребуется отдельная логика или использование VBA.
Пример реализации:
- Создайте на листе таблицу со столбцами:
- 🔢 Единицы (0: "", 1: "один", 2: "два", ...)
- 🔢 Десятки (10: "десять", 20: "двадцать", ...)
- 🔢 Сотни (100: "сто", 200: "двести", ...)
=ЕСЛИ(A1=0;"ноль";
ТЕКСТ(ЦЕЛОЕ(A1/100);"0") & " " & ИНДЕКС($C$2:$C$10;ЦЕЛОЕ(A1/100)+1) & " " &
ТЕКСТ(ОСТАТ(ЦЕЛОЕ(A1/10);10);"0") & " " & ИНДЕКС($B$2:$B$10;ОСТАТ(ЦЕЛОЕ(A1/10);10)+1) & " " &
ТЕКСТ(ОСТАТ(A1;10);"0") & " " & ИНДЕКС($A$2:$A$10;ОСТАТ(A1;10)+1)
)
Создать справочник единиц/десятков/сотен|Проверить диапазоны в формулах|Учесть регистр выводимого текста (заглавные/строчные)|Протестировать на числах 0, 1, 10, 100, 999-->
Метод 2: Пользовательская функция VBA для суммы прописью
Наиболее универсальный и гибкий способ — создать пользовательскую функцию (UDF) на языке VBA. Она позволит:
- 💰 Обрабатывать копейки (например, "123 рубля 45 копеек")
- 🔄 Правильно склонять валюту ("рубль", "рубля", "рублей")
- 📉 Работать с отрицательными числами ("минус сто двадцать")
- 🌍 Поддерживать несколько валют (доллары, евро и т.д.)
Ниже приведён код функции, который можно вставить в редактор VBA (Alt + F11 → Вставка → Модуль):
Function SumProp(ByVal MyNumber As Currency, Optional MyCurrency As String = "рубль") As String
Dim RUB As Variant, COP As Variant, Temp As String
Dim DecimalPlace As Integer, Cents As Integer
' Массивы для склонения валют
RUB = Array("рубль", "рубля", "рублей")
COP = Array("копейка", "копейки", "копеек")
' Обработка отрицательных чисел
If MyNumber < 0 Then
SumProp = "минус " & SumProp(Abs(MyNumber), MyCurrency)
Exit Function
End If
' Разделение на рубли и копейки
DecimalPlace = InStr(1, CStr(MyNumber), ",")
If DecimalPlace > 0 Then
Cents = Mid(CStr(MyNumber), DecimalPlace + 1, 2)
MyNumber = Int(MyNumber)
Else
Cents = 0
End If
' Преобразование рублей в текст
Temp = ConvertLessThanOneThousand(MyNumber)
' Добавление валютного обозначения
If MyNumber = 1 Then
Temp = Temp & " " & RUB(0)
ElseIf MyNumber > 1 And MyNumber < 5 Then
Temp = Temp & " " & RUB(1)
Else
Temp = Temp & " " & RUB(2)
End If
' Обработка копеек
If Cents > 0 Then
Temp = Temp & " " & ConvertLessThanOneThousand(Cents)
If Cents = 1 Then
Temp = Temp & " " & COP(0)
ElseIf Cents > 1 And Cents < 5 Then
Temp = Temp & " " & COP(1)
Else
Temp = Temp & " " & COP(2)
End If
End If
SumProp = Application.WorksheetFunction.Proper(Temp)
End Function
Function ConvertLessThanOneThousand(ByVal MyNumber As Integer) As String
Dim Ones As Variant, Tens As Variant, Hundreds As Variant
Dim Result As String
Ones = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", _
"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", _
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
Tens = Array("", "", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Hundreds = Array("", "сто", "двести", "триста", "четыреста", _
"пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
If MyNumber = 0 Then Exit Function
' Сотни
If MyNumber >= 100 Then
Result = Hundreds(Int(MyNumber / 100)) & " "
MyNumber = MyNumber - Int(MyNumber / 100) * 100
End If
' Десятки и единицы
If MyNumber >= 20 Then
Result = Result & Tens(Int(MyNumber / 10))
If (MyNumber Mod 10) > 0 Then
Result = Result & " " & Ones(MyNumber Mod 10)
End If
ElseIf MyNumber >= 1 Then
Result = Result & Ones(MyNumber)
End If
ConvertLessThanOneThousand = Trim(Result)
End Function
После вставки кода функция =SumProp(A1) станет доступна в Excel. Пример использования:
| Число в ячейке | Формула | Результат |
|---|---|---|
| 123,45 | =SumProp(A1) | Сто двадцать три рубля сорок пять копеек |
| -500 | =SumProp(A2) | Минус пятьсот рублей |
| 1 000 001 | =SumProp(A3;"доллар") | Один миллион один доллар |
Метод 3: Готовые надстройки для суммы прописью
Если вам не хочется разбираться в VBA или настраивать формулы, можно воспользоваться готовыми надстройками. Они обычно предлагают расширенные возможности: поддержку нескольких валют, настройку регистра, обработку больших чисел.
Популярные решения:
- 📌 RubToStr — бесплатная надстройка для русского языка с поддержкой рублей/долларов/евро. Скачать.
- 📌 NumToText — плагин с открытым кодом, работает в Excel и Google Sheets.
- 📌 Атлас-Про — коммерческий продукт с расширенными настройками (включая украинскую гривну).
Как установить надстройку:
- Скачайте файл с расширением
.xlamили.xlsm. - В Excel перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку.
⚠️ Внимание: Надстройки из ненадёжных источников могут содержать вредоносный код. Перед установкой проверьте репутацию разработчика и отзывы пользователей.
Как удалить надстройку, если она не подходит?
Чтобы удалить надстройку, перейдите в Файл → Параметры → Надстройки, выберите ненужную надстройку в списке "Активные надстройки" и нажмите Перейти. В открывшемся окне снимите галочку рядом с названием и подтвердите удаление. После этого перезапустите Excel.
Обработка особенностей: копейки, валюты, отрицательные числа
При преобразовании чисел в текст прописью часто возникают нюансы, которые нужно учитывать:
1. Копейки и десятичные знаки
Если число содержит дробную часть (например, 123,45), её нужно:
- 🔸 Отделить от целой части (функция
ЦЕЛОЕиОСТАТ). - 🔸 Преобразовать в текст отдельно (например, "сорок пять копеек").
- 🔸 Правильно склонять в зависимости от значения (1 копейка, 2 копейки, 5 копеек).
2. Склонение валют
Для рублей действуют правила:
- 🔸 1 → "рубль"
- 🔸 2-4 → "рубля"
- 🔸 5-20, 21-30,... → "рублей"
Для долларов/евро склонение не требуется ("1 доллар", "2 доллара", "5 долларов").
3. Отрицательные числа
Добавьте в начало строки слово "минус" и обработайте абсолютное значение числа:
=ЕСЛИ(A1<0; "минус " & SumProp(ABS(A1)); SumProp(A1))
| Проблема | Решение | Пример |
|---|---|---|
| Число с копейками | Разделить на целую и дробную часть | 123,45 → "123 рубля 45 копеек" |
| Отрицательное число | Добавить "минус" + абсолютное значение | -500 → "минус пятьсот рублей" |
| Крупные числа (>999 999) | Добавить обработку миллионов/миллиардов | 1 000 000 → "один миллион рублей" |
Ошибки и их решения при настройке суммы прописью
Даже с готовыми решениями пользователи сталкиваются с типичными проблемами. Вот самые распространённые и способы их устранения:
- ❌ Функция не работает после сохранения файла
Причина: Файл сохранён в формате.xlsx(без поддержки макросов).
Решение: Сохраните файл как.xlsm(с поддержкой макросов). - ❌ Неправильное склонение валют
Причина: Ошибка в логике функции (например, не учтён диапазон 11-19).
Решение: Проверьте код функции на обработку исключений. - ❌ Надстройка не отображается в Excel
Причина: Несовместимость версии Excel или отключённые макросы.
Решение: Включите макросы вФайл → Параметры → Центр управления безопасностью.
Если вы используете Excel Online, учтите, что в нём нет поддержки VBA. В этом случае единственный выход — формульный метод (Метод 1) или подключение надстроек через Office JS API (требует навыков программирования).
Продвинутые возможности: настройка под свои нужды
Базовых функций часто недостаточно для специфических задач. Рассмотрим, как адаптировать решение:
1. Поддержка нескольких валют
Модифицируйте функцию SumProp, добавив параметр для валюты:
=SumProp(A1; "доллар") ' Выведет "сто двадцать три доллара"
2. Вывод заглавными буквами
Используйте функцию ПРОПИСН:
=ПРОПИСН(SumProp(A1))
3. Укороченный формат (без копеек)
Если копейки не нужны, округлите число до целого:
=SumProp(ОКРУГЛ(A1;0))
4. Интеграция с другими функциями
Объедините сумму прописью с другими данными:
="Счёт №" & B1 & ". Сумма: " & SumProp(C1) & ". Дата: " & ТЕКСТ(D1;"ДД ММММ ГГГГ")
Для автоматизации создания документов (например, актов или накладных) можно записать макрос, который будет:
- 📝 Подставлять сумму прописью в шаблон.
- 📅 Добавлять текущую дату.
- 📎 Сохранять файл с уникальным именем.
FAQ: Частые вопросы по сумме прописью в Excel
Можно ли сделать сумму прописью без VBA?
Да, но с ограничениями. Метод с вспомогательными таблицами и функциями ИНДЕКС/ПОИСКПОЗ работает только для чисел до 999 999 и не поддерживает копейки/валюты. Для полноценной работы рекомендуется использовать VBA или надстройки.
Почему функция выдаёт ошибку #ИМЯ?
Ошибка #ИМЯ? означает, что Excel не распознаёт имя функции. Убедитесь, что:
- Код VBA вставлен в обычный модуль (не в лист или книгу).
- Файл сохранён с поддержкой макросов (
.xlsm). - В настройках безопасности разрешены макросы.
Как сделать сумму прописью в Google Sheets?
В Google Sheets нет VBA, но можно:
- Использовать Apps Script (аналог VBA). Пример кода:
function RUB_PROP(num) {// Логика преобразования
return "сто двадцать три рубля"; // Заглушка
}
- Подключить надстройки из Google Workspace Marketplace (например, "Number to Words").
Можно ли преобразовать сумму прописью на украинском/казахском?
Да, но потребуется:
- Изменить массивы слов в коде VBA (например, заменить "рубль" на "гривня").
- Скорректировать правила склонения (в украинском языке они отличаются).
- Для казахского языка использовать кириллицу или латиницу в зависимости от требований.
Готовые решения: надстройка UAHtoWords для украинского, KZTtoText для казахского.
Как автоматически обновлять сумму прописью при изменении числа?
Если вы используете формулу (включая VBA-функцию), она обновляется автоматически при изменении исходного значения. Если сумма прописью вставлена как текст (например, через макрос), придумайте триггер:
- 🔄 Создайте кнопку с макросом, который пересчитывает все суммы.
- 🔄 Используйте событие
Worksheet_Changeв VBA для автоматического обновления.