В Excel нет встроенной функции, которая переводит число в текст на русском языке. Функция TEXT() умеет форматировать даты и числа, но «двадцать пять тысяч рублей» из неё не получить. Это разрыв, который бухгалтеры закрывают по-разному: кто копирует из браузера, кто установил макрос десять лет назад и не трогает его, кто использует API.
Разберём три способа — от простого к сложному.
Способ 1: Копировать из PropNum вручную
Самый быстрый вариант для разовых задач.
- Откройте propnum.ru в браузере
- Введите сумму из ячейки Excel
- Нажмите «Копировать» рядом с нужной формулировкой
- Вставьте в ячейку Excel
Занимает 10–15 секунд. Если нужно обработать 5–10 строк — это вполне нормальный вариант. Если строк 200 — уже нет.
Способ 2: VBA-макрос
Классическое решение, которое работает полностью внутри Excel без интернета.
Как установить
- Откройте Excel. Нажмите Alt+F11 — откроется редактор VBA.
- В меню выберите Вставка → Модуль.
- Вставьте код макроса (ниже).
- Закройте редактор — нажмите Alt+F11 ещё раз.
- Сохраните файл в формате .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-запросы.
Шаги
- Откройте вкладку Данные → Получить данные → Из других источников → Из интернета.
- Введите URL запроса:
https://propnum.ru/api/convert/num?amount=125000¤cy=RUB
- Power Query вернёт JSON-ответ. Разверните запись
resultи возьмите полеfull. - Настройте параметр
amountна ссылку на ячейку.
Это чуть сложнее в настройке, зато не требует включения макросов и работает в корпоративной среде.
Сравнительная таблица
| Способ | Скорость настройки | Количество строк | Нужен интернет | Работает без макросов |
|---|---|---|---|---|
| Копировать из PropNum | Мгновенно | 1–10 | Да | Да |
| VBA-макрос | 5–10 минут | Неограниченно | Нет | Нет |
| Power Query + API | 15–30 минут | Неограниченно | Да | Да |