PropNum.ruPropNum
Инструменты и интеграции

Сумма прописью в Excel: три рабочих способа

6 мин чтения

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

Разберём три способа — от простого к сложному.

Способ 1: Копировать из PropNum вручную

Самый быстрый вариант для разовых задач.

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

Занимает 10–15 секунд. Если нужно обработать 5–10 строк — это вполне нормальный вариант. Если строк 200 — уже нет.

Способ 2: VBA-макрос

Классическое решение, которое работает полностью внутри Excel без интернета.

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

  1. Откройте Excel. Нажмите Alt+F11 — откроется редактор VBA.
  2. В меню выберите Вставка → Модуль.
  3. Вставьте код макроса (ниже).
  4. Закройте редактор — нажмите Alt+F11 ещё раз.
  5. Сохраните файл в формате .xlsm (с поддержкой макросов).

Код макроса

Function PROPNUM(Summa As Double) As String
    Dim Rub As Long
    Dim Kop As Integer
    Rub = Int(Summa)
    Kop = Int((Summa - Rub) * 100 + 0.5)
    PROPNUM = NumberToText(Rub) & " рублей " & Format(Kop, "00") & " копеек"
End Function

Function NumberToText(N As Long) As String
    Dim Billions As Long, Millions As Long, Thousands As Long, Units As Long
    If N = 0 Then NumberToText = "Ноль": Exit Function
    
    Billions = N \ 1000000000
    Millions = (N Mod 1000000000) \ 1000000
    Thousands = (N Mod 1000000) \ 1000
    Units = N Mod 1000
    
    Dim Result As String
    Result = ""
    
    If Billions > 0 Then Result = Result & Group(Billions, 0) & " миллиард" & BillionSuffix(Billions) & " "
    If Millions > 0 Then Result = Result & Group(Millions, 0) & " миллион" & MillionSuffix(Millions) & " "
    If Thousands > 0 Then Result = Result & Group(Thousands, 1) & " тысяч" & ThousandSuffix(Thousands) & " "
    If Units > 0 Then Result = Result & Group(Units, 0)
    
    NumberToText = UCase(Left(Trim(Result), 1)) & Mid(Trim(Result), 2)
End Function

Function Group(N As Long, Gender As Integer) As String
    ' Gender: 0 = мужской, 1 = женский (тысячи)
    Dim Hundreds As Integer, Tens As Integer, Units As Integer
    Hundreds = N \ 100
    Tens = (N Mod 100) \ 10
    Units = N Mod 10
    
    Dim H() As String, T() As String, U1() As String, U2() As String
    H = Split(",сто,двести,триста,четыреста,пятьсот,шестьсот,семьсот,восемьсот,девятьсот", ",")
    T = Split(",десять,двадцать,тридцать,сорок,пятьдесят,шестьдесят,семьдесят,восемьдесят,девяносто", ",")
    U1 = Split(",один,два,три,четыре,пять,шесть,семь,восемь,девять", ",")
    U2 = Split(",одна,две,три,четыре,пять,шесть,семь,восемь,девять", ",")
    
    Dim Teens() As String
    Teens = Split(",одиннадцать,двенадцать,тринадцать,четырнадцать,пятнадцать,шестнадцать,семнадцать,восемнадцать,девятнадцать", ",")
    
    Dim Result As String
    Result = H(Hundreds) & " "
    
    If Tens = 1 Then
        If Units > 0 Then
            Result = Result & Teens(Units) & " "
        Else
            Result = Result & "десять "
        End If
    Else
        Result = Result & T(Tens) & " "
        If Units > 0 Then
            If Gender = 1 Then
                Result = Result & U2(Units) & " "
            Else
                Result = Result & U1(Units) & " "
            End If
        End If
    End If
    
    Group = Trim(Result)
End Function

Function BillionSuffix(N As Long) As String
    Dim U As Integer: U = N Mod 100
    If U >= 11 And U <= 19 Then BillionSuffix = "ов": Exit Function
    Select Case N Mod 10
        Case 1: BillionSuffix = ""
        Case 2, 3, 4: BillionSuffix = "а"
        Case Else: BillionSuffix = "ов"
    End Select
End Function

Function MillionSuffix(N As Long) As String
    Dim U As Integer: U = N Mod 100
    If U >= 11 And U <= 19 Then MillionSuffix = "ов": Exit Function
    Select Case N Mod 10
        Case 1: MillionSuffix = ""
        Case 2, 3, 4: MillionSuffix = "а"
        Case Else: MillionSuffix = "ов"
    End Select
End Function

Function ThousandSuffix(N As Long) As String
    Dim U As Integer: U = N Mod 100
    If U >= 11 And U <= 19 Then ThousandSuffix = "": Exit Function
    Select Case N Mod 10
        Case 1: ThousandSuffix = "а"
        Case 2, 3, 4: ThousandSuffix = "и"
        Case Else: ThousandSuffix = ""
    End Select
End Function

Как использовать после установки

В любой ячейке введите:

=PROPNUM(A1)

где A1 — ячейка с числом. Результат: «Двадцать пять тысяч рублей 00 копеек».

Ограничения макроса

Макрос работает до 999 999 999 рублей (миллиардов нет в базовой версии). Для большинства задач этого хватает. Также макрос не работает при отключённых макросах в политиках безопасности — это актуально для корпоративных Excel-файлов.

Способ 3: REST API PropNum через Power Query

Если нужно обрабатывать большие таблицы автоматически и без макросов — подключите API PropNum через Power Query. Это встроенный инструмент Excel, который умеет делать HTTP-запросы.

Шаги

  1. Откройте вкладку Данные → Получить данные → Из других источников → Из интернета.
  2. Введите URL запроса:
https://propnum.ru/api/convert/num?amount=125000&currency=RUB
  1. Power Query вернёт JSON-ответ. Разверните запись result и возьмите поле full.
  2. Настройте параметр amount на ссылку на ячейку.

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

Сравнительная таблица

СпособСкорость настройкиКоличество строкНужен интернетРаботает без макросов
Копировать из PropNumМгновенно1–10ДаДа
VBA-макрос5–10 минутНеограниченноНетНет
Power Query + API15–30 минутНеограниченноДаДа

Частые вопросы

Почему в Excel нет встроенной функции «прописью» на русском?
Microsoft разрабатывала Excel для международного рынка, и встроенные функции форматирования текста ориентированы на английский язык. Российские пользователи традиционно решают эту задачу через надстройки или макросы.
Макрос нужно устанавливать на каждый компьютер отдельно?
Если сохранить макрос в «Личную книгу макросов» (Personal.xlsb), он будет доступен во всех файлах Excel на одном компьютере. Для распространения по сотрудникам проще использовать API-решение.
Формула работает неправильно для чисел с копейками?
Убедитесь, что ячейка с суммой имеет формат «Число» с двумя знаками после запятой, а не «Текст». Если число хранится как текст, функция PROPNUM вернёт пустую строку.
Можно ли получить прописью с НДС?
В базовом макросе — нет. Через API PropNum — да: используйте метод `/api/convert/nds` с параметрами `rate=22` и `mode=add` (начислить) или `mode=extract` (выделить) — он вернёт итог, сумму без налога и сам НДС прописью.

Попробуйте инструменты PropNum

Похожие статьи