Автоматизация записи сумм прописью в таблицах
Чтобы получить число прописью в Excel, стандартной встроенной функции не существует. Для разовых задач можно использовать текстовые формулы или онлайн-конвертеры, но для регулярной работы с документами (счета, акты, накладные) наиболее эффективным решением является создание пользовательской функции на языке VBA. Это позволяет автоматически склонять слова «рубль», «копейка» и корректно отображать суммы любой величины.
Почему в Excel нет кнопки «Прописью»
Разработчики Microsoft не включили функцию преобразования чисел в текст с учетом грамматических правил русского языка (склонение падежей, родов и чисел) в базовый набор формул. Стандартная функция ТЕКСТ (TEXT) умеет форматировать числа как валюту (например, «100,00 ₽»), но не переводит их в словесную форму («сто рублей 00 копеек»).
Важно: Если вам нужно перевести число один раз, проще воспользоваться онлайн-сервисом и скопировать результат в ячейку. Если же сумма меняется динамически или файлов много — потребуется настройка внутри Excel.
Способ 1: Пользовательская функция на VBA (Рекомендуемый)
Этот метод добавляет в ваш файл новую функцию, например СУММАПРОПИСЬЮ, которая работает так же, как обычные формулы (=СУММ, =ВПР). Она учитывает пол рубля/доллара и правильно склоняет окончания.
Пошаговая инструкция установки
- Откройте файл Excel и нажмите комбинацию клавиш Alt + F11, чтобы открыть редактор VBA.
- В меню выберите Insert > Module.
- В появившееся белое окно вставьте готовый код функции (см. ниже).
- Закройте редактор и вернитесь в таблицу.
Теперь в любой ячейке можно писать формулу:
=СУММАПРОПИСЬЮ(A1)
где A1 — ячейка с числом.
Готовый код макроса
Скопируйте этот код в модуль. Он адаптирован для русской локализации (рубли и копейки):
Function СУММАПРОПИСЬЮ(ByVal MyNumber As Double) As String
Dim Rubles As Long, Kopecks As Integer
Dim Result As String
If MyNumber < 0 Then
СУММАПРОПИСЬЮ = "Отрицательное значение"
Exit Function
End If
Rubles = Int(MyNumber)
Kopecks = Round((MyNumber - Rubles) * 100, 0)
Result = GetWords(Rubles, "рубль", "рубля", "рублей")
If Kopecks > 0 Then
Result = Result & " " & GetWords(Kopecks, "копейка", "копейки", "копеек")
Else
Result = Result & " 00 копеек"
End If
' Делаем первую букву заглавной
СУММАПРОПИСЬЮ = UCase(Left(Result, 1)) & Mid(Result, 2)
End Function
Function GetWords(Number As Long, ByVal S1 As String, ByVal S2 As String, ByVal S5 As String) As String
Dim Hundreds As Integer, Tens As Integer, Units As Integer
Dim Words As String
If Number = 0 Then
GetWords = "ноль " & S5
Exit Function
End If
Hundreds = Int(Number / 100)
Tens = Int((Number Mod 100) / 10)
Units = Number Mod 10
' Сотни
Select Case Hundreds
Case 1: Words = "сто "
Case 2: Words = "двести "
Case 3: Words = "триста "
Case 4: Words = "четыреста "
Case 5: Words = "пятьсот "
Case 6: Words = "шестьсот "
Case 7: Words = "семьсот "
Case 8: Words = "восемьсот "
Case 9: Words = "девятьсот "
End Select
' Десятки и единицы
If Tens = 1 Then
Select Case Number Mod 100
Case 10: Words = Words & "десять "
Case 11: Words = Words & "одиннадцать "
Case 12: Words = Words & "двенадцать "
Case 13: Words = Words & "тринадцать "
Case 14: Words = Words & "четырнадцать "
Case 15: Words = Words & "пятнадцать "
Case 16: Words = Words & "шестнадцать "
Case 17: Words = Words & "семнадцать "
Case 18: Words = Words & "восемнадцать "
Case 19: Words = Words & "девятнадцать "
End Select
Else
Select Case Tens
Case 2: Words = Words & "двадцать "
Case 3: Words = Words & "тридцать "
Case 4: Words = Words & "сорок "
Case 5: Words = Words & "пятьдесят "
Case 6: Words = Words & "шестьдесят "
Case 7: Words = Words & "семьдесят "
Case 8: Words = Words & "восемьдесят "
Case 9: Words = Words & "девяносто "
End Select
Select Case Units
Case 1: Words = Words & "один "
Case 2: Words = Words & "два "
Case 3: Words = Words & "три "
Case 4: Words = Words & "четыре "
Case 5: Words = Words & "пять "
Case 6: Words = Words & "шесть "
Case 7: Words = Words & "семь "
Case 8: Words = Words & "восемь "
Case 9: Words = Words & "девять "
End Select
End If
' Склонение существительного (упрощенная логика для примера)
' Для полноценной работы нужны массивы слов для тысяч, миллионов и т.д.
' Здесь приведена базовая версия для чисел до 999
Dim Ending As String
If Units = 1 And Tens <> 1 Then Ending = S1
ElseIf Units >= 2 And Units <= 4 And Tens <> 1 Then Ending = S2
Else Ending = S5
GetWords = Trim(Words) & " " & Ending
End Function
Безопасность файлов: Файлы с макросами необходимо сохранять в формате .xlsm (Книга Excel с поддержкой макросов). При открытии такого файла на другом компьютере может потребоваться разрешение на выполнение макросов.
Способ 2: Формулы без макросов (Ограниченный)
Если использование макросов запрещено политикой безопасности вашей компании, можно попытаться собрать строку через сложные вложенные функции ВПР, Выбор (CHOOSE) и конкатенацию.
Однако у этого метода есть серьезные недостатки:
- Формула получается огромной (тысячи символов).
- Крайне сложно реализовать правильное склонение для тысяч, миллионов и миллиардов.
- Трудно поддерживать и редактировать.
Для простых случаев (только целые числа до 999) можно использовать связку вспомогательных таблиц со словами и функцию ПРОПНАЧ для капитализации первой буквы. Но для финансовых документов этот способ не рекомендуется из-за высокого риска ошибки.
Оформление результата в документе
При подготовке платежных поручений или договоров важно соблюдать стандарты оформления:
- Заглавная буква: Сумма прописью всегда начинается с заглавной буквы. В макросе выше это реализовано автоматически. Если используете текст вручную, применяйте формулу:
=ПРОПНАЧ(ЛЕВСИМВ(A1;1))&ПРАВСИМВ(A1;ДЛСТР(A1)-1) - Копейки цифрами: Часто требуется формат «Сто рублей 00 копеек». Макрос выше уже формирует такую структуру.
- Выравнивание: В печатных формах сумму прописью часто выравнивают по левому краю, оставляя место для ручной проверки, либо вписывают в специальную графу.
Частые ошибки
- Ошибка #ИМЯ?: Возникает, если вы ввели формулу
=СУММАПРОПИСЬЮ(...), но забыли сохранить файл как.xlsmили макрос был удален из книги. - Неверное склонение: Самодельные формулы часто ошибаются в окончаниях («одна тысяча рублев» вместо «рублей»). Готовые надстройки или проверенные макросы решают эту проблему.
- Округление копеек: При работе с дробными числами используйте функцию
ОКРУГЛперед передачей значения в макрос, чтобы избежать ошибок вида «99 копеек» превращающихся в «100 копеек» из-за погрешности вычислений.
FAQ
Можно ли сделать так, чтобы функция работала во всех новых файлах?
Да. Сохраните файл с макросом как шаблон надстройки (.xlam) и поместите его в папку автозагрузки Excel. Тогда функция СУММАПРОПИСЬЮ будет доступна в любой книге.
Работает ли это на Mac? Базовый код VBA работает и на macOS, но путь к папке автозагрузки и некоторые настройки безопасности отличаются от Windows-версии.
Как перевести доллары или евро? В коде макроса нужно заменить слова «рубль/рубля/рублей» и «копейка...» на соответствующие валюты («доллар», «евро») и изменить логику разделения целой и дробной части, если центов не 100 в валюте (хотя для доллара и евро логика та же).