Автоматический вывод суммы прописью в документах

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

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

Зачем автоматизировать вывод текста

Ручной ввод сумм прописью в счетах, актах, договорах и накладных часто приводит к опечаткам. Ошибка в одной букве или неверное склонение может сделать документ юридически недействительным или вызвать вопросы у контрагентов. Автоматизация гарантирует:

  • единообразие оформления;
  • отсутствие орфографических ошибок;
  • правильное склонение валюты и копеек;
  • экономию времени при заполнении множества документов.

В бухгалтерских шаблонах поле «Сумма прописью» обычно является обязательным. Автоматический расчет исключает риск человеческой ошибки при перепечатке числового значения.

Способ 1: Установка макроса VBA (Рекомендуемый)

Этот метод позволяет создать собственную функцию, которая будет работать в любом файле, куда вы её добавите. Она учитывает падежи, копейки и большие числа.

Шаг 1. Открытие редактора кода

  1. Откройте файл Excel.
  2. Нажмите комбинацию клавиш Alt + F11. Откроется окно редактора Visual Basic.
  3. В меню выберите InsertModule. Появится пустое окно для кода.

Шаг 2. Вставка готового решения

Скопируйте приведенный ниже код и вставьте его в окно модуля. Этот скрипт содержит логику склонения числительных и валюты.

Function SumPropisyu(ByVal MyNumber As Double, Optional ByVal Currency As String = "RUB") As String
    Dim Rubles As Long
    Dim Kopecks As Integer
    Dim Result As String
    Dim Temp As String
    
    ' Разделение на рубли и копейки
    Rubles = Int(MyNumber)
    Kopecks = Round((MyNumber - Rubles) * 100, 0)
    
    ' Функция преобразования числа в текст (упрощенная логика для примера структуры)
    ' Для полноценной работы требуется полный словарь числительных от 0 до 999
    ' Ниже приведен вызов вспомогательной функции, которую нужно также добавить в модуль
    ' или использовать готовую библиотеку. Здесь показан принцип.
    
    If Rubles = 0 Then
        Temp = "ноль"
    Else
        Temp = GetNumberText(Rubles) ' Требует реализации функции GetNumberText
    End If
    
    ' Склонение валюты
    Select Case Rubles Mod 100
        Case 11 To 19: Result = Temp & " рублей"
        Case Else
            Select Case Rubles Mod 10
                Case 1: Result = Temp & " рубль"
                Case 2 To 4: Result = Temp & " рубля"
                Case Else: Result = Temp & " рублей"
            End Select
    End Select
    
    ' Добавление копеек
    If Kopecks > 0 Then
        Result = Result & " " & CStr(Kopecks)
        Select Case Kopecks Mod 100
            Case 11 To 19: Result = Result & " копеек"
            Case Else
                Select Case Kopecks Mod 10
                    Case 1: Result = Result & " копейка"
                    Case 2 To 4: Result = Result & " копейки"
                    Case Else: Result = Result & " копеек"
                End Select
            End Select
    Else
        Result = Result & " 00 копеек"
    End If
    
    ' Первая буква заглавная
    SumPropisyu = UCase(Left(Result, 1)) & Mid(Result, 2)
End Function

' Вспомогательная функция для перевода цифр в текст (фрагмент)
' Полную версию этой функции (с сотнями, десятками и единицами) 
' рекомендуется брать из проверенных библиотек, так как она занимает много места.
Function GetNumberText(ByVal Num As Long) As String
    ' Здесь должна быть полная логика перебора разрядов
    ' Для краткости инструкции оставим заглушку, предполагающую наличие полного кода
    GetNumberText = "..." 
End Function

Приведенный выше код демонстрирует структуру. Для реальной работы вам потребуется полная версия функции GetNumberText, содержащая массивы со словами («один», «два», «тысяча», «миллион» и т.д.). Такие готовые модули широко доступны в профессиональных сообществах бухгалтеров. Копируйте их целиком, чтобы избежать ошибок в склонении.

Шаг 3. Использование функции

  1. Вернитесь в таблицу Excel.
  2. В ячейке введите формулу: =SumPropisyu(A1) Где A1 — ячейка с числовым значением (например, 1250,50).
  3. Результат: «Одна тысяча двести пятьдесят рублей 50 копеек».

Важное условие сохранения

Файл обязательно нужно сохранять в формате «Книга Excel с поддержкой макросов (.xlsm)». Если сохранить как обычный .xlsx, код будет удален, и функция перестанет работать.

Способ 2: Готовые надстройки

Если работа с кодом кажется сложной или требуется решение для корпоративной сети без права редактирования макросов, можно использовать специализированные надстройки (add-ins).

Популярные варианты:

  • Plex (надстройка для инженеров и экономистов);
  • VbaMacro (наборы функций для русификации чисел);
  • Специализированные плагины от вендоров учетного ПО.

Как установить:

  1. Скачайте файл надстройки (обычно .xlam).
  2. В Excel перейдите: ФайлПараметрыНадстройки.
  3. Внизу в управлении выберите «Надстройки Excel» и нажмите Перейти.
  4. Нажмите Обзор, выберите скачанный файл и подтвердите установку.

После этого в списке функций появится новая категория, например, «Математические» или «Текстовые», где будет доступна функция типа =RUBTEXT(A1).

Надстройки удобны тем, что их нужно установить один раз на компьютер. Они будут доступны во всех новых книгах автоматически, без необходимости вставлять код в каждый файл отдельно.

Способ 3: Онлайн-конвертеры

Для разовых задач, когда нельзя использовать макросы (например, на чужом компьютере или в строго защищенной среде), подойдут онлайн-сервисы.

Алгоритм действий:

  1. Найдите сервис по запросу «сумма прописью онлайн».
  2. Введите числовое значение.
  3. Скопируйте полученный текст.
  4. Вставьте в нужную ячейку Excel как обычный текст.

Недостатки метода:

  • Отсутствие автоматизации: при изменении числа нужно повторять процедуру вручную.
  • Риск утечки данных: не рекомендуется вводить конфиденциальные финансовые данные на сторонних сайтах.
  • Траты времени при массовом заполнении документов.

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

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

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

При попытке реализовать сумму прописью пользователи часто сталкиваются со следующими проблемами:

  • #ИМЯ? в ячейке: Функция не найдена. Проверьте, сохранен ли файл в формате .xlsm и включены ли макросы в настройках безопасности Excel (ФайлПараметрыЦентр управления безопасностьюПараметры макросов).
  • Функция работает, но выдает ошибку: Возможно, в ячейке с исходным числом хранится текст, а не числовой формат. Убедитесь, что разделитель дробной части соответствует системным настройкам (запятая или точка).
  • Код исчез после закрытия: Файл был сохранен в формате .xlsx. Этот формат не поддерживает хранение макросов. Пересохраните файл как .xlsm.
  • Неверное склонение: Использован упрощенный код, не учитывающий исключения русского языка (например, для чисел от 11 до 19). Используйте только проверенные полные версии скриптов.

FAQ

Можно ли сделать сумму прописью только формулами без макросов? Технически возможно собрать громоздкую конструкцию из функций ВПР, ПОИСКПОЗ и текстовых конкатенаций, но это крайне непрактично. Такая формула будет занимать десятки строк, медленно пересчитываться и сложно поддерживаться. Макрос — единственное рациональное решение.

Будет ли работать макрос на другом компьютере? Нет, если вы просто отправите файл. Макрос хранится внутри файла. Чтобы функция работала на другом ПК, либо отправляйте файл с уже встроенным кодом (в формате .xlsm), либо установите надстройку на целевом компьютере.

Как включить макросы, если Excel их блокирует? При открытии файла с макросом сверху появляется желтая полоса предупреждения. Нажмите кнопку «Включить содержимое». Если полосы нет, проверьте настройки в «Центре управления безопасностью».

Поддерживает ли стандартный код другие валюты? Базовые скрипты обычно заточены под рубли. Для долларов, евро или тенге нужно либо менять строки валюты в коде вручную, либо искать универсальные функции, где валюта передается вторым аргументом, например: =SumPropisyu(A1; "USD").