В ячейке D5 у вас число 1245,75, а нужно получить текст "Один тысяча двести сорок пять рублей 75 копеек". Excel не умеет автоматически конвертировать числа в прописной формат, но эту задачу можно решить тремя основными способами: встроенными формулами, надстройками и VBA-скриптами. Проблема в том, что стандартные функции Excel не поддерживают русскоязычное числовое преобразование — придётся использовать обходные пути.
Если вы работаете с бухгалтерскими документами, договорами или счетами, прописная сумма обязательна для заполнения платёжных поручений и накладных. Ошибка в одном символе может привести к отказу банка в проведении платежа. Далее разберём все рабочие методы, включая нюансы с копейками, склонением рублей и обработкой больших чисел (миллионы и миллиарды).
В этой статье вы найдёте готовые решения для Excel 2010–2023 и Office 365, а также универсальные формулы, которые работают без установки дополнительных компонентов. Особое внимание уделим склонению числительных (например, "1 рубль" vs "2 рубля") и обработке дробных значений (копейки). Если вам нужно решение для Google Таблиц, переходите к соответствующему разделу.
1. Способ: Формула с вложенными функциями (без VBA)
Самый надёжный метод для пользователей, которые не могут устанавливать макросы или надстройки. Используем комбинацию функций ТЕКСТ, ПОИСКПОЗ и ВЫБОР для разбора числа по разрядам. Минус: формула получается громоздкой (до 500 символов), но зато работает в любой версии Excel.
Пример формулы для ячейки A1 с числом 1245,75:
=ЕСЛИ(A1=0;"ноль рублей";СЦЕПИТЬ(
ЕСЛИ(ЦЕЛОЕ(A1/1000000)>0;ВЫБОР(ЦЕЛОЕ(A1/1000000);"один";"два";"три";...) & " миллион";"") &
ЕСЛИ(И(ЦЕЛОЕ(A1/1000)>0;ЦЕЛОЕ(A1/1000)<20);ВЫБОР(ЦЕЛОЕ(A1/1000);"одна";"две";...);"") &
" рубль" & ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);100)>10;ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);100)>19;"ей";ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);10)=1;"ь";ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);10)<5;"я";"ей")));"ей") &
" " & ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0) & " копеек"
))
- 🔢 Плюсы: не требует установки дополнений, работает на защищённых листах.
- ⚠️ Минусы: сложно редактировать, не обрабатывает числа больше 999 999 999.
- 📌 Совет: для упрощения создайте
Именованный диапазонс массивом числительных (один, два, ..., девять).
2. Способ: Пользовательская функция на VBA
Если вы готовы включить макросы, этот метод даёт максимальную гибкость. Функция RublesProp автоматически склоняет "рубль/рубля/рублей" и обрабатывает копейки. Критичный нюанс: макросы блокируются по умолчанию в файлах, полученных из интернета (.xlsx не поддерживает VBA — сохраняйте файл как .xlsm).
Код для вставки в редактор VBA (Alt + F11):
Function RublesProp(ByVal MyNumber As Currency) As String
Dim Rub As String, Kop As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Обработка целой части (рубли)
Rub = ConvertLessThanOneThousand(Int(MyNumber))
If Int(MyNumber / 1000) > 0 Then
Rub = ConvertLessThanOneThousand(Int(MyNumber / 1000)) & " тысяч" & Rub
End If
Rub = RTrim(Rub)
Select Case Right(Rub, 1)
Case "а": Rub = Rub & " рублей"
Case "ь": Rub = Left(Rub, Len(Rub) - 1) & " рубль"
Case Else: Rub = Rub & " рубля"
End Select
' Обработка дробной части (копейки)
DecimalPlace = InStr(1, CStr(MyNumber), ",")
If DecimalPlace > 0 Then
Temp = Mid(CStr(MyNumber), DecimalPlace + 1)
Kop = ConvertLessThanOneThousand(CInt(Temp))
Kop = Kop & " копеек"
Else
Kop = "00 копеек"
End If
RublesProp = Rub & " " & Kop
End Function
Function ConvertLessThanOneThousand(ByVal Amount As Integer) As String
' Массивы числительных
Dim OnesPlace(9) As String, TensPlace(9) As String, Teens(9) As String
OnesPlace(1) = "один": OnesPlace(2) = "два": OnesPlace(3) = "три"
' ... (продолжение массива до 9)
TensPlace(2) = "двадцать": TensPlace(3) = "тридцать"
' ... (продолжение массива до 9)
If Amount = 0 Then Exit Function
If Amount >= 100 Then
ConvertLessThanOneThousand = OnesPlace(Amount \ 100) & " сто"
Amount = Amount - (Amount \ 100) * 100
If Amount > 0 Then ConvertLessThanOneThousand = ConvertLessThanOneThousand & " "
End If
' Логика для десятков и единиц
' ...
End Function
⚠️ Внимание: После вставки кода сохраните файл как.xlsm(с поддержкой макросов). В противном случае функция=RublesProp(A1)вернёт ошибку#ИМЯ?.
- 🔧 Как установить:
- Нажмите
Alt + F11→Insert → Module. - Вставьте код выше.
- Вернитесь в Excel и используйте
=RublesProp(A1).
- Нажмите
- Обрабатывает числа до 999 триллионов.
- Автоматически склоняет "рубль/рубля/рублей".
- Поддерживает отрицательные суммы (добавляет "минус").
3. Способ: Надстройка "ЧислоПрописью"
Для пользователей, которые не хотят разбираться в формулах или VBA, есть готовые надстройки. Самая популярная — "ЧислоПрописью" от ExcelAddIns.ru. Она добавляет в ленту новую вкладку с кнопкой для мгновенного преобразования.
Инструкция по установке:
- Скачайте файл
ЧислоПрописью.xlamс официального сайта. - В Excel перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку.
| Функция надстройки | Пример ввода | Результат |
|---|---|---|
=ЧислоПрописью(A1; "рубль"; "рубля"; "рублей"; "копейка"; "копейки"; "копеек") |
1245,75 |
"Одна тысяча двести сорок пять рублей 75 копеек" |
=ЧислоПрописью(A1;,,,"доллар","доллара","долларов") |
101,50 |
"Сто один доллар 50 центов" |
=ЧислоПрописью(A1; "евро"; "евро"; "евро") |
99,99 |
"Девяносто девять евро 99 центов" |
⚠️ Внимание: Надстройки могут конфликтовать с антивирусами (например, Kaspersky блокирует .xlam-файлы). Перед установкой добавьте папку с надстройкой в исключения антивируса.
Добавьте сайт exceladdins.ru в доверенные в настройках браузера|
Отключите антивирус на время скачивания файла|
Сохраните резервную копию книги Excel|
Проверьте разрядность Office (32-bit или 64-bit) — скачивайте соответствующую версию надстройки-->
4. Обработка копеек и округление
Частая ошибка при преобразовании сумм — игнорирование дробной части или её некорректное округление. Например, 123,456 должно стать "123 рубля 46 копеек" (округление до копеек), а не "123 рубля 45,6 копеек".
Решение:
- 🔄 Используйте
ОКРУГЛдля дробной части:=ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100; 0) - 💰 Для бухгалтерского округления (по правилам банков) замените
ОКРУГЛна:=ОКРУГЛВВЕРХ((A1-ЦЕЛОЕ(A1))*100; 0) - ⚠️ Если копеек нет (например, 100,00), функция должна возвращать "00 копеек", а не пустую строку.
Пример корректной обработки в VBA:
' В функции RublesProp замените строку с Kop на:
DecimalPlace = InStr(1, CStr(MyNumber), ",")
If DecimalPlace > 0 Then
Temp = Mid(CStr(MyNumber), DecimalPlace + 1)
If Len(Temp) = 1 Then Temp = Temp & "0" ' Добавляем ноль, если одна цифра после запятой
Kop = ConvertLessThanOneThousand(CInt(Left(Temp & "00", 2))) & " копеек"
Else
Kop = "00 копеек"
End If
Почему важно округлять копейки?
Банки отказывают в проведении платежей, если сумма в копейках указана некорректно (например, "123,456 руб." вместо "123,46 руб."). Согласно Положению ЦБ РФ № 383-П, сумма платежа должна быть указана с точностью до копеек, а дробная часть — округлена по математическим правилам (0,5 и выше — в большую сторону).
5. Решение для Google Таблиц
В Google Sheets нет встроенных функций для преобразования чисел в прописной формат, но можно использовать App Script (аналог VBA). Скопируйте этот код в Extensions → Apps Script:
function RUBLES_PROP(number) {
const units = ["", "один", "два", "три", ..., "девять"];
const teens = ["десять", "одиннадцать", ..., "девятнадцать"];
const tens = ["", "десять", "двадцать", ..., "девяносто"];
function convertLessThanThousand(n) {
let res = "";
if (n >= 100) {
res += units[Math.floor(n / 100)] + " сто";
n %= 100;
if (n > 0) res += " ";
}
if (n >= 20) {
res += tens[Math.floor(n / 10)];
if (n % 10 > 0) res += " " + units[n % 10];
} else if (n >= 10) {
res += teens[n - 10];
} else if (n > 0) {
res += units[n];
}
return res;
}
const rub = Math.floor(number);
const kop = Math.round((number - rub) * 100);
let rubText = convertLessThanThousand(rub);
if (rub % 100 >= 11 && rub % 100 <= 19) {
rubText += " рублей";
} else if (rub % 10 === 1) {
rubText += " рубль";
} else if (rub % 10 >= 2 && rub % 10 <= 4) {
rubText += " рубля";
} else {
rubText += " рублей";
}
return rubText + " " + kop + " копеек";
}
После сохранения скрипта в таблице появится функция =RUBLES_PROP(A1). Ограничение: скрипт работает только в вашем аккаунте Google — при совместном доступе другим пользователям придётся устанавливать его самостоятельно.
6. Типичные ошибки и их исправление
Даже с готовыми решениями пользователи сталкиваются с проблемами. Вот топ-5 ошибок и их причины:
| Ошибка | Причина | Решение |
|---|---|---|
Функция возвращает #ИМЯ? |
Не включены макросы или файл сохранён как .xlsx |
Сохраните файл как .xlsm и разрешите выполнение макросов |
| "Один тысяча рублей" вместо "Одна тысяча рублей" | Ошибка в склонении числительного "один/одна" | Добавьте проверку на род в функции ConvertLessThanOneThousand |
| Не отображаются копейки | Формула не учитывает дробную часть | Используйте ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0) |
| "Двести рубля" вместо "Двести рублей" | Ошибка в правилах склонения для чисел 100–900 | Исправьте логику в блоке склонения (см. раздел 4) |
| Надстройка не устанавливается | Блокировка антивирусом или несовпадение разрядности Office | Отключите антивирус или скачайте 64-bit версию надстройки |
7. Альтернативные инструменты
Если Excel не подходит для вашей задачи, рассмотрите эти варианты:
- 🌐 Онлайн-конвертеры:
- Calc.ru — поддерживает рубли, доллары и евро.
- Num-Word.ru — генератор для юридических документов.
- 📱 Мобильные приложения:
- Число Прописью (Android/iOS) — офлайн-работа, экспорт в Word.
- Бухгалтерские калькуляторы (например, 1С:Калькулятор).
- 💻 Программы для ПК:
- Аккорд-ЧислоПрописью — интеграция с 1С и Excel.
- Гарант-Число — для юридических лиц, поддерживает печатные формы.
⚠️ Внимание: Онлайн-конвертеры не подходят для обработки больших массивов данных (например, 1000 строк в Excel). В этом случае используйте VBA или надстройки.
FAQ: Частые вопросы
Можно ли преобразовать сумму прописью без VBA и надстроек?
Да, но формула будет очень длинной (до 1000 символов). Пример для чисел до 999 999:
=ЕСЛИ(A1=0;"ноль рублей";
СЦЕПИТЬ(
ЕСЛИ(ЦЕЛОЕ(A1/1000000)>0;ВЫБОР(ЦЕЛОЕ(A1/1000000);"один";"два";...);"");
ЕСЛИ(И(ЦЕЛОЕ(A1/1000)>0;ЦЕЛОЕ(A1/1000)<20);ВЫБОР(ЦЕЛОЕ(A1/1000);"одна";"две";...);"");
" рубль" & ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);100)>10;ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1);100)>19;"ей";...);"ей")
) & " " & ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0);"00") & " копеек"
)
Для упрощения разбейте формулу на вспомогательные ячейки (по одной на каждый разряд: миллионы, тысячи, сотни и т.д.).
Как сделать, чтобы сумма прописью автоматически обновлялась при изменении числа?
Если вы используете формулу или надстройку, обновление происходит автоматически. Для VBA-макроса:
- Откройте редактор VBA (
Alt + F11). - Дважды кликните на лист в дереве проекта (
VBAProject → Лист1). - Вставьте этот код для автоматического пересчёта:
Private Sub Worksheet_Change(ByVal Target As Range)On Error Resume Next
If Not Intersect(Target, Me.Range("A1:A100")) Is Nothing Then
Application.EnableEvents = False
Me.Range("B" & Target.Row).Value = RublesProp(Target.Value)
Application.EnableEvents = True
End If
End Sub
Теперь при изменении ячейки в столбце A результат прописью будет автоматически обновляться в столбце B.
Почему надстройка "ЧислоПрописью" выдаёт ошибку при открытии файла?
Причины и решения:
- Файл открыт в защищённом режиме: Сохраните файл в доверенную папку (например,
Документы) и откройте повторно. - Несовпадение разрядности: Установите 64-bit версию надстройки, если у вас Office 2016+ x64.
- Блокировка макросов: Перейдите в
Файл → Параметры → Центр управления безопасностью → Параметры центра... → Включить все макросы(не рекомендуется для файлов из ненадёжных источников). - Повреждённая надстройка: Удалите её через
Параметры → Надстройкии установите заново.
Как преобразовать сумму в долларах или евро?
В функциях на VBA или надстройках замените аргументы склонения:
- Для долларов:
=ЧислоПрописью(A1; "доллар"; "доллара"; "долларов"; "цент"; "цента"; "центов") - Для евро:
=ЧислоПрописью(A1; "евро"; "евро"; "евро"; "цент"; "цента"; "центов")
В ручной формуле замените "рубль/рубля/рублей" на нужную валюту и добавьте обработку дробной части (например, "центов" вместо "копеек").
Можно ли использовать это решение в 1С?
Нет, в 1С:Предприятие используется собственный язык программирования. Однако вы можете:
- Экспортировать данные в Excel, преобразовать суммы прописью, а затем импортировать обратно.
- Использовать встроенную функцию
ЧислоПрописью()в 1С (доступна в большинстве конфигураций). - Написать обработку на языке 1С (пример кода есть в документации).