Как написать число прописью в Excel: формулы и макросы

Иван Корнев·21.05.2024·4 мин

Чтобы преобразовать цифры в текст (написать сумму прописью) в русском языке, стандартной функции в Excel не существует. Самый надежный и быстрый способ — использовать пользовательскую функцию на базе макроса (VBA), которая автоматически склоняет слова и добавляет валюту. Если использование макросов запрещено политиками безопасности, можно применить сложные формулы с вспомогательными таблицами, но они работают только для ограниченных диапазонов чисел.

Зачем нужно выводить числа словами

Преобразование чисел в текстовый формат критически важно при оформлении финансовых документов:

  • Счета и акты: Сумма прописью исключает двусмысленность и возможность подделки цифр.
  • Договоры: Юридическая точность требует дублирования стоимости буквами.
  • Чеки и накладные: Автоматизация заполнения печатных форм экономит время и снижает риск ошибок вручную.

Важно: В русской версии Excel нет встроенной функции типа SUMMPROPISYU (как в некоторых надстройках). Решение требует создания своего инструмента.

Способ 1: Использование макроса (VBA) — Рекомендуемый вариант

Этот метод позволяет создать собственную функцию, которая будет работать во всех ячейках книги, правильно склонять слова («рубль», «рубля», «рублей») и обрабатывать копейки.

Пошаговая инструкция

  1. Откройте книгу Excel и нажмите комбинацию клавиш Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert > Module.
  3. Скопируйте приведенный ниже код и вставьте его в белое окно модуля.
Function SumPropis(MyNumber As Double) As String
    Dim Rubles As Integer, Kopecks As Integer
    Dim Result As String
    
    ' Разделяем рубли и копейки
    Rubles = Int(MyNumber)
    Kopecks = Round((MyNumber - Rubles) * 100, 0)
    
    ' Функция преобразования целой части (упрощенная логика для примера)
    ' Для полноценной работы требуется большой массив слов. 
    ' Ниже приведен вызов внешней логики или упрощенный вариант.
    ' В реальном проекте сюда вставляется полный алгоритм склонения.
    
    Result = GetWordGroup(Rubles, 0) & " руб. "
    If Kopecks > 0 Then
        Result = Result & GetWordGroup(Kopecks, 1) & " коп."
    Else
        Result = Result & "00 коп."
    End If
    
    SumPropis = Application.Proper(Result) ' Первая буква заглавная
End Function

' Вспомогательная функция для склонения (требует полной реализации массивов слов)
' Примечание: Полный код занимает много места. 
' Для работы скопируйте готовый проверенный модуль "SumPropis" из надежного источника 
' или используйте упрощенную версию ниже для тестирования логики.

Function GetWordGroup(ByVal Number As Long, ByVal CurrencyType As Integer) As String
    ' Это заглушка. Для реальной работы необходим полный код обработки единиц, десятков и сотен
    ' с учетом родов (одна, один, одно) и падежей.
    ' Рекомендуется найти готовый модуль "Правописание чисел" для VBA.
    GetWordGroup = CStr(Number) 
End Function

Проблема с полным кодом: Полный алгоритм склонения русских числительных очень объемный (сотни строк кода). В рамках статьи невозможно привести его целиком без ошибок сокращения. Решение: Скачайте готовый проверенный модуль SumPropis.bas из открытых репозиториев разработчиков Excel или используйте надстройки вроде «Plexus» или «VBA-Excel.ru», которые добавляют эту функцию автоматически.

Как использовать функцию

После вставки полного кода макроса:

  1. Вернитесь в Excel.
  2. В любой ячейке введите формулу: =SumPropis(A1), где A1 — ячейка с числом.
  3. Файл необходимо сохранить в формате «Книга Excel с поддержкой макросов (.xlsm)».

Способ 2: Формулы без макросов (для небольших чисел)

Если служба безопасности запрещает макросы, можно использовать формулы. Этот способ сложен, так как требует создания справочных таблиц со словами.

Подготовка справочных данных

Создайте новый лист «Справочник» и заполните столбцы словами для единиц, десятков и сотен с учетом падежей.

Пример сложной формулы

Для чисел до 999 можно использовать конструкцию на базе функций ПРОПИСН, ВЫБОР и ОСТАТ. Однако формула получится громоздкой.

Упрощенный пример логики для единиц (без учета всех падежей): =ВЫБОР(ОСТАТ(A1;10)+1; ""; "Один"; "Два"; "Три"; "Четыре"; "Пять"; "Шесть"; "Семь"; "Восемь"; "Девять")

Лайфхак: Вместо написания гигантской формулы вручную, используйте онлайн-конвертеры «число прописью». Сгенерируйте текст там, скопируйте его и вставьте в Excel как значение. Это быстрее и надежнее для разовых задач.

Сравнение методов

КритерийМакрос (VBA)Сложные формулыОнлайн-конвертер
ГибкостьВысокая (любые суммы)Низкая (ограниченный диапазон)Средняя
БезопасностьТребует разрешения макросовПолностью безопасноДанные уходят в сеть
Сложность внедренияСредняя (нужен код)Высокая (ошибки в формулах)Низкая
АвтоматизацияМгновенное обновлениеМгновенное обновлениеРучная работа

Частые ошибки

  • Формат файла: При использовании макросов файл сохраняется как .xlsx, код теряется. Всегда выбирайте .xlsm.
  • Отключение макросов: Если при открытии файла функции выдают ошибку #ИМЯ?, зайдите в «Файл» > «Параметры» > «Центр управления безопасностью» и разрешите выполнение макросов.
  • Неверное склонение: Самодельные формулы часто не учитывают род числа (1 рубль, 2 рубля, 5 рублей). Макросы решают эту проблему автоматически.
  • Копейки: Забывают округлять копейки, из-за чего возникают длинные хвосты после запятой (например, 10,0000001 руб). Используйте функцию ОКРУГЛ перед передачей числа в формулу.

FAQ

Можно ли сделать сумму прописью на английском? Да, в англоязычной версии Excel есть встроенная функция SPELLDOLLARS(), но она работает только с долларами и английским языком. Для русского языка нужен макрос.

Почему функция возвращает ошибку #ИМЯ? Это означает, что Excel не видит имя функции. Либо макрос не был вставлен в модуль, либо файл сохранен без поддержки макросов, либо имя функции в формуле написано с ошибкой.

Как убрать десятичные знаки, если копеек нет? В коде макроса обычно предусмотрена проверка: если копейки равны 0, дописывается «00 коп.» или фраза «ноль копеек». Это настраивается внутри процедуры VBA.