Как прописью написать сумму в рублях в Excel: формулы, надстройки и макросы

В ячейке 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) вернёт ошибку #ИМЯ?.
  • 🔧 Как установить:
    1. Нажмите Alt + F11Insert → Module.
    2. Вставьте код выше.
    3. Вернитесь в Excel и используйте =RublesProp(A1).
  • 📊 Преимущества:
    • Обрабатывает числа до 999 триллионов.
    • Автоматически склоняет "рубль/рубля/рублей".
    • Поддерживает отрицательные суммы (добавляет "минус").
  • 📊 Какой способ вы предпочитаете для преобразования сумм прописью?
    Встроенные формулы
    Надстройки (например, "ЧислоПрописью")
    VBA-макросы
    Ручной ввод

    3. Способ: Надстройка "ЧислоПрописью"

    Для пользователей, которые не хотят разбираться в формулах или VBA, есть готовые надстройки. Самая популярная — "ЧислоПрописью" от ExcelAddIns.ru. Она добавляет в ленту новую вкладку с кнопкой для мгновенного преобразования.

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

    1. Скачайте файл ЧислоПрописью.xlam с официального сайта.
    2. В Excel перейдите в Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти.
    3. Нажмите Обзор, выберите скачанный файл и подтвердите установку.
    Функция надстройки Пример ввода Результат
    =ЧислоПрописью(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-макроса:

    1. Откройте редактор VBA (Alt + F11).
    2. Дважды кликните на лист в дереве проекта (VBAProject → Лист1).
    3. Вставьте этот код для автоматического пересчёта:
      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С:Предприятие используется собственный язык программирования. Однако вы можете:

    1. Экспортировать данные в Excel, преобразовать суммы прописью, а затем импортировать обратно.
    2. Использовать встроенную функцию ЧислоПрописью() в 1С (доступна в большинстве конфигураций).
    3. Написать обработку на языке 1С (пример кода есть в документации).