Почему сумма прописью в Excel — это не роскошь, а необходимость
Вы когда-нибудь сталкивались с ситуацией, когда нужно было вручную прописывать суммы в договорах, актах или финансовых отчётах? Ошибки в написании чисел прописью могут стоить дорого — от возврата документов бухгалтерией до юридических последствий. В Microsoft Excel эта задача решается автоматически, но далеко не все знают, как правильно настроить преобразование.
Стандартные функции Excel не включают инструмент для конвертации чисел в текстовый формат прописью — это одна из тех редких задач, где приходится либо писать формулы вручную, либо использовать дополнительные инструменты. В этой статье мы разберём 5 рабочих способов, включая готовые формулы для рублей, долларов и евро, VBA-макросы для автоматизации и внешние надстройки. Особое внимание уделим нюансам: склонению валют, обработке копеек/центов и работе с отрицательными числами.
Прежде чем переходить к инструкциям, ответьте на один вопрос: какой способ вам ближе?
Способ 1: Готовая формула для рублей (без VBA)
Если вам нужно быстро преобразовать сумму в рубли прописью без использования макросов, этот метод подойдёт идеально. Мы будем использовать комбинацию функций ТЕКСТ, ВЫБОР и вложенных ЕСЛИ. Формула работает для чисел до 999 999 999,99 и корректно склоняет "рубль", "рубля", "рублей".
Вставьте этот код в ячейку, где должна отображаться сумма прописью (например, =РублиПрописью(A1)):
=ЕСЛИ(A1=0;"ноль рублей";
ЕСЛИ(A1<0;РублиПрописью(-A1)&" минус ";
ЕСЛИ(ЦЕЛОЕ(A1)=0;"";РублиПрописью(ЦЕЛОЕ(A1)));
)&ЕСЛИ(ОСТАТ(A1;1)=0;"";" и "&РублиПрописью((A1-ЦЕЛОЕ(A1))*100)&" копеек"))
Затем создайте именованную функцию РублиПрописью через Формулы → Диспетчер имён → Создать. В поле "Формула" вставьте:
=ЕСЛИ(ИЛИ(A1=0;A1="");"";
ЕСЛИ(A1<10;ВЫБОР(A1;"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять");
ЕСЛИ(A1<20;ВЫБОР(A1-9;"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");
ЕСЛИ(A1<100;ДОЛЯ_ДЕСЯТКОВ(ЦЕЛОЕ(A1/10))&ЕСЛИ(ОСТАТ(A1;10)=0;"";" "&РублиПрописью(ОСТАТ(A1;10)));РублиПрописью(ЦЕЛОЕ(A1/100))&" "&ДОЛЯ_СОТЕН(ОСТАТ(ЦЕЛОЕ(A1);100))&ЕСЛИ(ОСТАТ(A1;100)=0;"";" "&РублиПрописью(ОСТАТ(A1;100)))))))
Дополнительно создайте ещё две именованные функции:
- 📌
ДОЛЯ_ДЕСЯТКОВ:=ВЫБОР(A1;"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") - 📌
ДОЛЯ_СОТЕН:=ВЫБОР(A1;"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот")
Скопируйте основную формулу в нужную ячейку
Создайте 3 именованные функции через Диспетчер имён
Проверьте работу на тестовых данных (0, 1, 15, 100, 123,45)
Настройте формат ячейки как "Общий" или "Текстовый"-->
Способ 2: VBA-макрос для универсального преобразования
Если вам нужно преобразовывать суммы в любой валюте (рубли, доллары, евро) или работать с большими числами (более миллиарда), VBA-макрос станет самым надёжным решением. Этот метод требует разовой настройки, но затем работает мгновенно.
Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и скопируйте туда этот код:
Function SumProp(ByVal MyNumber As Currency, Optional MyCurrency As String = "руб") As String
Dim Rubl As String, Kop As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Обработка отрицательных чисел
If MyNumber < 0 Then
SumProp = "минус " & SumProp(-MyNumber, MyCurrency)
Exit Function
End If
' Разделение на рубли и копейки
DecimalPlace = InStr(MyNumber, ",")
If DecimalPlace > 0 Then
Temp = Mid(MyNumber, DecimalPlace + 1)
Kop = WorksheetFunction.Round(Temp / 100, 2) * 100
MyNumber = Left(MyNumber, DecimalPlace - 1)
Else
Kop = "00"
End If
' Преобразование рублей
Rubl = ConvertLessThanOneThousand(MyNumber, MyCurrency, "рубль", "рубля", "рублей")
' Преобразование копеек
If Kop <> "00" Then
Kop = ConvertLessThanOneThousand(Kop, MyCurrency, "копейка", "копейки", "копеек")
SumProp = Rubl & " и " & Kop
Else
SumProp = Rubl
End If
End Function
Function ConvertLessThanOneThousand(ByVal MyNumber As Variant, MyCurrency As String, _
Unit1 As String, Unit2 As String, Unit5 As String) As String
Dim Txt As String, i As Integer
Dim Ones() As String, Tens() As String, Hundreds() As String
' Массивы для слов
Ones = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", _
"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", _
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
Tens = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _
"шестьсот", "семьсот", "восемьсот", "девятьсот")
' Обработка чисел < 1000
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
' Сотни
If Mid(MyNumber, 1, 1) <> "0" Then
Txt = Hundreds(Mid(MyNumber, 1, 1))
End If
' Десятки и единицы
If Mid(MyNumber, 2, 1) = "1" Then
Txt = Txt & " " & Ones(Val(Mid(MyNumber, 2, 2)) + 1)
Else
Txt = Txt & " " & Tens(Val(Mid(MyNumber, 2, 1)))
If Mid(MyNumber, 3, 1) <> "0" Then
Txt = Txt & " " & Ones(Val(Mid(MyNumber, 3, 1)))
End If
End If
' Склонение валют
i = Val(Mid(MyNumber, 3, 1))
If i = 1 Then Txt = Txt & " " & Unit1
If i > 1 And i < 5 Then Txt = Txt & " " & Unit2
If i = 0 Or i >= 5 Then Txt = Txt & " " & Unit5
ConvertLessThanOneThousand = Application.WorksheetFunction.Trim(Txt)
End Function
Теперь в любой ячейке можно использовать функцию =SumProp(A1; "руб") для рублей или =SumProp(A1; "USD") для долларов (склонение будет автоматически подстроено под валюту).
Способ 3: Надстройка "ЧислоПрописью" — готовое решение
Если вам не хочется возиться с формулами или VBA, можно установить бесплатную надстройку ЧислоПрописью от Excel-Addins.ru. Она поддерживает:
- 💰 Все основные валюты (рубли, доллары, евро, гривны и др.)
- 📊 Числа до 999 триллионов
- 🔄 Автоматическое склонение валют
- 📑 Отрицательные числа и ноль
Установка занимает 2 минуты:
- Скачайте файл
ЧислоПрописью.xlamс официального сайта. - Перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. - Нажмите "Обзор", выберите скачанный файл и подтвердите установку.
После установки в Excel появится новая функция =ЧислоПрописью(A1; "RUR"). Аргументы:
A1— ячейка с числом"RUR"— код валюты (USD,EUR,UAHи др.)1(необязательно) — режим с копейками/центами
| Код валюты | Пример вывода | Склонение |
|---|---|---|
RUR |
сто двадцать три рубля пятьдесят копеек | рубль/рубля/рублей |
USD |
one hundred twenty-three dollars fifty cents | dollar/dollars |
EUR |
cent vingt-trois euros cinquante centimes | euro/euros |
UAH |
сто двадцять три гривні п'ятдесят копійок | гривня/гривні/гривень |
Как удалить надстройку, если она не понадобилась?
Перейдите в Файл → Параметры → Надстройки, выберите ЧислоПрописью в списке и нажмите "Перейти". В открывшемся окне снимите галочку и подтвердите удаление. Файл .xlam останется на вашем компьютере, но перестанет влиять на Excel.
Способ 4: Power Query для массовой обработки
Если вам нужно преобразовать тысячи строк с суммами (например, в выписке банка или отчёте), Power Query справится с этой задачей эффективнее, чем формулы. Этот метод подходит для Excel 2016+ и Office 365.
Инструкция:
- Выделите исходные данные и перейдите на вкладку
Данные → Из таблицы/диапазона(илиПолучить данные → Из таблицы/диапазонав новых версиях). - В открывшемся редакторе Power Query выберите столбец с суммами, кликните правой кнопкой и выберите
Дублировать столбец. - Кликните по дубликату правой кнопкой и выберите
Преобразовать → В текст. - Создайте новый пользовательский столбец с формулой:
= Number.ToText([Сумма], "ru-RU", "RUB")Для долларов используйте
"en-US"и"USD". - Замените полученный текстовый формат на нужный вам шаблон с помощью функции
Text.Replace(например, замените "RUB" на "рублей"). - Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.
Важно: Power Query не поддерживает полноценное склонение валют на русском языке — для этого потребуется доработка через VBA или использование внешних скриптов.
Способ 5: Онлайн-конвертеры для разовых задач
Если вам нужно преобразовать сумму прописью один-два раза, проще воспользоваться онлайн-сервисами. Мы протестировали 5 популярных инструментов и выбрали лучшие:
| Сервис | Ссылка | Плюсы | Минусы |
|---|---|---|---|
| Числа прописью | num-word.ru | ✅ Поддержка 10 валют ✅ Склонение по падежам |
❌ Реклама ❌ Ограничение 1 000 000 |
| CalcSoft | calcsoft.ru | ✅ Экспорт в Word/Excel ✅ История расчётов |
❌ Требует регистрации |
| TextFromNumber | textfromnumber.com | ✅ 20+ языков ✅ API для разработчиков |
❌ Англоязычный интерфейс |
Как пользоваться:
- Перейдите на выбранный сервис.
- Введите сумму в числовом формате.
- Выберите валюту (рубли, доллары и т. д.).
- Скопируйте результат и вставьте в Excel.
Типичные ошибки и как их избежать
Даже с автоматизированными инструментами пользователи часто сталкиваются с проблемами. Вот TOP-5 ошибок и способы их решения:
⚠️ Внимание: Если сумма прописью отображается как########, проверьте ширину столбца — текст может не помещаться в ячейку. Растяните столбец или включите перенос текста (Главная → Перенос текста).
- 🔢 Некорректное склонение валют (например, "1 рубль" вместо "1 рубля"):
Проблема возникает, если в формуле или макросе не учтено склонение для чисел 1, 2-4 и 5+. Проверьте логику функции
ConvertLessThanOneThousandв VBA или используйте надстройку с поддержкой склонения. - 💱 Отрицательные числа выводятся без слова "минус":
Добавьте в начало формулы проверку на отрицательность:
=ЕСЛИ(A1<0; "минус " & ВашаФормула(-A1); ВашаФормула(A1)) - 📉 Копейки/центы отображаются как 00:
Убедитесь, что исходное число имеет дробную часть (например,
123,45, а не123). Если данных нет, добавьте искусственно:=ВашаФормула(A1 & ",00")
⚠️ Внимание: При использовании VBA-макросов в Excel Online или мобильной версии они работать не будут — эти платформы не поддерживают выполнение макросов. Используйте формулы или надстройки.
FAQ: Частые вопросы по сумме прописью в Excel
Можно ли сделать сумму прописью на английском языке?
Да, для этого:
- В VBA-макросе замените массивы
Ones,TensиHundredsна английские эквиваленты (one, two, twenty и т. д.). - В надстройке "ЧислоПрописью" используйте код валюты
USDилиEUR— текст будет на английском. - В Power Query замените локаль с
"ru-RU"на"en-US".
Пример английской версии VBA:
Ones = Array("", "one", "two", "three", ..., "nineteen")
Tens = Array("", "ten", "twenty", "thirty", ...)
Как сделать сумму прописью с заглавной буквы?
Используйте функцию =ПРОПНАЧ(ВашаФормула) для первой буквы или =ПРОПИСН(ЛЕВСИМВ(ВашаФормула)) & ПРАВСИМВ(ВашаФормула;ДЛСТР(ВашаФормула)-1) для полного контроля:
=ПРОПИСН(ЛЕВСИМВ(РублиПрописью(A1))) & ПРАВСИМВ(РублиПрописью(A1);ДЛСТР(РублиПрописью(A1))-1)
Для VBA добавьте в конец функции SumProp строку:
SumProp = UCase(Left(SumProp, 1)) & Mid(SumProp, 2)
Почему формула выдаёт ошибку #ИМЯ?
Ошибка #ИМЯ! возникает, если:
- Вы не создали именованные функции (для Способа 1).
- В формуле есть опечатка (например,
=РублиПрописьюувместо=РублиПрописью). - Ячейка с исходными данными содержит текст вместо числа.
Решение: проверьте Диспетчер имён (Формулы → Диспетчер имён) и синтаксис формулы.
Как автоматически обновлять сумму прописью при изменении данных?
Все описанные методы (кроме онлайн-сервисов) обновляются автоматически:
- Формулы: обновляются при любом изменении исходных данных.
- VBA: если макрос написан как функция (
Function), он пересчитывается при изменении зависимых ячеек. - Power Query: обновите запрос через
Данные → Обновить все.
Если обновление не происходит, проверьте настройки вычислений (Формулы → Параметры вычислений → Автоматически).
Можно ли использовать эту функцию в Google Таблицах?
В Google Sheets нет встроенной функции для суммы прописью, но есть обходные пути:
- Скрипт Apps Script: аналогично VBA, но на JavaScript. Пример кода:
function RUBLES(number) {// Логика преобразования (аналогично VBA)
return result;
}
Чтобы использовать, перейдите в
Расширения → Apps Script, вставьте код и сохраните. В таблице вызовите функцию как=RUBLES(A1). - Надстройки: в
Расширения → Надстройкинайдите "Number to Words Converter".