Вы устали вручную переписывать числовые значения в договорах, актах или финансовых отчётах? В Microsoft Excel нет встроенной функции для преобразования чисел в текст прописью, но эту задачу легко автоматизировать. Сумма прописью требуется бухгалтерам, юристам и менеджерам при оформлении платёжных поручений, накладных или договоров — где по стандартам необходимо дублировать цифровые значения словами.
В этой статье вы найдёте 5 проверенных методов, включая готовые формулы, VBA-макросы и надстройки, которые преобразуют числа в текст на русском языке с учётом склонений, копеек и правил орфографии. Все решения работают в Excel 2010–2026 (включая Microsoft 365) и не требуют установки дополнительного ПО. Мы также разберём типичные ошибки и покажем, как адаптировать код под специфические задачи — например, для украинского или казахского языков.
Почему в Excel нет стандартной функции «СуммаПрописью»?
Несмотря на востребованность, Microsoft до сих пор не добавила встроенную функцию для конвертации чисел в текст. Причины кроются в сложности алгоритма:
- 🌍 Локализация: правила преобразования чисел в текст уникальны для каждого языка (в русском — склонения, в английском — дефисы для чисел 21–99).
- 💰 Валюты: необходимо учитывать наименования валют (рубли/доллары/евро) и их дробные части (копейки/центы).
- 📜 Юридические нюансы: в финансовых документах сумма прописью должна начинаться с заглавной буквы и заканчиваться точкой.
Вместо универсального решения Microsoft предлагает пользователям создавать собственные функции через VBA или использовать надстройки. Это гибкий подход, но он требует базовых навыков работы с макросами. К счастью, готовые скрипты уже написаны — их остаётся только адаптировать под свои нужды.
Способ 1: Готовая VBA-функция для русского языка
Самый надёжный метод — создать пользовательскую функцию на VBA. Этот код обрабатывает числа до 999 триллионов, корректно склоняет рубли/копейки и поддерживает отрицательные значения. Чтобы его использовать:
- Нажмите
Alt + F11, чтобы открыть редакторVBA. - В меню выберите
Insert → Module. - Вставьте приведённый ниже код и сохраните файл как
.xlsm(с поддержкой макросов).
Function СуммаПрописью(Число As Currency, Optional Валюта As String = "рубль") As String
Dim Рубли As Variant, Копейки As Variant, Текст As String
Dim ЦелаяЧасть As Long, ДробнаяЧасть As Long
' Обработка отрицательных чисел
If Число < 0 Then
Текст = "минус "
Число = Abs(Число)
End If
' Разделение на целую и дробную части
ЦелаяЧасть = Int(Число)
ДробнаяЧасть = Round((Число - ЦелаяЧасть) * 100, 0)
' Преобразование целой части
If ЦелаяЧасть > 0 Then
Текст = Текст & Преобразовать(ЦелаяЧасть, True) & " "
Select Case Валюта
Case "доллар": Текст = Текст & Склонять(ЦелаяЧасть, "доллар", "доллара", "долларов")
Case "евро": Текст = Текст & Склонять(ЦелаяЧасть, "евро", "евро", "евро")
Case Else: Текст = Текст & Склонять(ЦелаяЧасть, "рубль", "рубля", "рублей")
End Select
End If
' Преобразование копеек
If ДробнаяЧасть > 0 Then
Текст = Текст & " " & ДробнаяЧасть & " "
Select Case Валюта
Case "доллар": Текст = Текст & Склонять(ДробнаяЧасть, "цент", "цента", "центов")
Case "евро": Текст = Текст & Склонять(ДробнаяЧасть, "цент", "цента", "центов")
Case Else: Текст = Текст & Склонять(ДробнаяЧасть, "копейка", "копейки", "копеек")
End Select
End If
' Форматирование результата
СуммаПрописью = UCase(Left(Текст, 1)) & Mid(Текст, 2) & "."
End Function
' Вспомогательные функции
Private Function Преобразовать(Число As Long, Optional Род As Boolean) As String
Dim Единицы() As String, Десятки() As String, Сотни() As String
Dim Текст As String, Остаток As Long
Единицы = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
Десятки = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Сотни = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _
"шестьсот", "семьсот", "восемьсот", "девятьсот")
If Число = 0 Then Преобразовать = "ноль": Exit Function
' Миллиарды
If Число >= 1000000000 Then
Текст = Преобразовать(Число \ 1000000000, Род) & " " & Склонять(Число \ 1000000000, "миллиард", "миллиарда", "миллиардов") & " "
Число = Число Mod 1000000000
End If
' Миллионы
If Число >= 1000000 Then
Текст = Текст & Преобразовать(Число \ 1000000, Род) & " " & Склонять(Число \ 1000000, "миллион", "миллиона", "миллионов") & " "
Число = Число Mod 1000000
End If
' Тысячи
If Число >= 1000 Then
Текст = Текст & Преобразовать(Число \ 1000, Род) & " " & Склонять(Число \ 1000, "тысяча", "тысячи", "тысяч") & " "
Число = Число Mod 1000
End If
' Сотни
If Число >= 100 Then
Текст = Текст & Сотни(Число \ 100) & " "
Число = Число Mod 100
End If
' Десятки и единицы
If Число >= 20 Then
Текст = Текст & Десятки(Число \ 10) & " "
Число = Число Mod 10
ElseIf Число >= 10 Then
Select Case Число
Case 10: Текст = Текст & "десять "
Case 11: Текст = Текст & "одиннадцать "
Case 12: Текст = Текст & "двенадцать "
Case 13: Текст = Текст & "тринадцать "
Case 14: Текст = Текст & "четырнадцать "
Case 15: Текст = Текст & "пятнадцать "
Case 16: Текст = Текст & "шестнадцать "
Case 17: Текст = Текст & "семнадцать "
Case 18: Текст = Текст & "восемнадцать "
Case 19: Текст = Текст & "девятнадцать "
End Select
Число = 0
End If
If Число > 0 Then
If Род Then
Select Case Число
Case 1: Текст = Текст & "одна "
Case 2: Текст = Текст & "две "
Case Else: Текст = Текст & Единицы(Число) & " "
End Select
Else
Текст = Текст & Единицы(Число) & " "
End If
End If
Преобразовать = Trim(Текст)
End Function
Private Function Склонять(Число As Long, Форма1 As String, Форма2 As String, Форма5 As String) As String
Dim Остаток As Long
Остаток = Число Mod 100
If Остаток >= 11 And Остаток <= 19 Then
Склонять = Форма5
Else
Остаток = Число Mod 10
Select Case Остаток
Case 1: Склонять = Форма1
Case 2, 3, 4: Склонять = Форма2
Case Else: Склонять = Форма5
End Select
End If
End Function
После добавления кода функция =СуммаПрописью(A1) станет доступна в Excel. Примеры использования:
- 💵
=СуммаПрописью(1234,56)→ «Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек.» - 💶
=СуммаПрописью(1005;"евро")→ «Одна тысяча пять евро.» - 💲
=СуммаПрописью(-200,10;"доллар")→ «Минус двести долларов десять центов.»
☑️ Проверка работы макроса
Способ 2: Формула без VBA (для Excel 365 и 2021)
Если макросы отключены или вы используете Excel Online, где VBA недоступен, воспользуйтесь формулой на основе функций ТЕКСТ, ВЫБОР и ПОИСКПОЗ. Этот метод ограничен (работает только с числами до 999 999), но не требует программирования.
Создайте на листе вспомогательную таблицу со словами для чисел (от «ноль» до «девятьсот девяносто девять»), затем используйте формулу:
=ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " " &
ВПР(ЦЕЛОЕ(A1);ТаблицаЧисел;2;ЛОЖЬ) & " рубль" &
ЕСЛИ(ОСТАТ(A1;1)=1;"ь";ЕСЛИ(И(ОСТАТ(A1;100)>10;ОСТАТ(A1;100)<20);"ей";ЕСЛИ(ОСТАТ(A1;10)>1;ОСТАТ(A1;10)<5;"я";"ей"))) &
ЕСЛИ(ОСТАТ(A1*100;100)>0; " " & ОКРУГЛВНИЗ(ОСТАТ(A1*100;100);0) & " копеек";"") & "."
Важно: этот метод не учитывает склонение копеек и работает только с целыми рублями. Для дробных значений потребуется доработать формулу или использовать VBA.
Способ 3: Надстройка «ЧислоПрописью» (для новичков)
Если вам не хочется разбираться в коде, установите бесплатную надстройку «ЧислоПрописью» от Plumsail или Extendoffice. Эти инструменты добавляют в Excel новую функцию, аналогичную нашей VBA-реализации, но с графическим интерфейсом.
Инструкция по установке:
- Скачайте надстройку с официального сайта (например, Extendoffice).
- В Excel перейдите в
Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти. - Нажмите «Обзор» и выберите скачанный файл
.xlam. - Активируйте надстройку и используйте новую функцию
=ЧислоПрописью(A1).
| Надстройка | Стоимость | Поддержка языков | Макс. число |
|---|---|---|---|
| Plumsail Number to Words | Бесплатно | Русский, английский, немецкий | 999 триллионов |
| Extendoffice | Платная (от $39) | 15+ языков | Неограничено |
| Ablebits | Платная (от $59) | Русский, украинский, английский | 10300 |
⚠️ Внимание: надстройки могут конфликтовать с корпоративными политиками безопасности. Перед установкой проверьте, разрешены ли в вашей организации сторонние расширения для Excel.
Способ 4: Power Query для массовой обработки
Если вам нужно преобразовать суммы прописью для тысяч строк (например, в выписке банка), используйте Power Query — инструмент для работы с большими данными. Алгоритм:
- Выделите столбец с числами и нажмите
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте пользовательский столбец со формулой на языке
M:
(Число) =>
let
Единицы = {"ноль", "один", "два", ...}, // полный список до "девятьсот девяносто девять"
Преобразовать = (n) =>
if n = 0 then "ноль" else
// здесь логика преобразования (упрощено)
Text.From(n),
Результат = Преобразовать(Number.Round(Число, 2)) &
" рубль" &
// логика склонения
"."
in
Результат
Этот метод сложнее в настройке, но позволяет обрабатывать миллионы строк без замедления Excel. Готовые шаблоны Power Query для суммы прописью можно найти на GitHub.
Типичные ошибки и как их избежать
Даже с готовыми решениями пользователи сталкиваются с проблемами. Вот самые распространённые:
⚠️ Внимание: если функция возвращает#ИМЯ?, проверьте:
- 🔄 Сохранён ли файл как
.xlsm(макросы не работают в.xlsx).- 🔒 Включены ли макросы в
Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.- 📝 Правильно ли написано название функции (регистр важен:
СуммаПрописью, а несуммапрописью).Другая частая ошибка — некорректное склонение валют. Например, функция может выдать «1 рубль», но «2 рубля» вместо «2 рубля». Чтобы исправить:
- Откройте редактор
VBA(Alt + F11).- Найдите в коде функцию
Склонятьи отредактируйте массивы склонений:Case "рубль":Склонять = Array("рубль", "рубля", "рублей")
Case "доллар":
Склонять = Array("доллар", "доллара", "долларов")
Адаптация для других языков
Чтобы преобразовывать суммы прописью на украинском, казахском или английском, измените в
VBA-коде:
- Массивы
Единицы,Десятки,Сотни(замените русские слова на переводы).- Логику склонения в функции
Склонять(в английском склонений нет, но есть правила для "one dollar" vs "two dollars").Пример для украинского языка:
Единицы = Array("", "один", "два", "три", "чотири", "п'ять", "шість", "сім", "вісім", "дев'ять")Десятки = Array("", "десять", "двадцять", "тридцять", ..., "дев'яносто")
Для английского упростите функцию
Склонять:Case "доллар":If Число = 1 Then Склонять = "dollar" Else Склонять = "dollars"
Готовый код для английского языка
Скачайте полную версию макроса с поддержкой английского, немецкого и французского на [нашем GitHub](https://github.com/excel-formulas/number-to-words).
FAQ: Ответы на частые вопросы
Можно ли использовать эту функцию в Google Sheets?
Нет, Google Sheets не поддерживает
VBA. Но вы можете:
- Использовать надстройки (например, Number to Words).
- Написать собственную функцию на
Google Apps Script(аналогVBAдля Google Sheets).Пример кода для
Google Apps Script:function RUBLES(number) {// Логика преобразования
return result;
}
Почему функция не работает с числами больше 1 миллиарда?
Ограничение связано с типом данных
CurrencyвVBA, который поддерживает числа до ±922 триллионов. Чтобы расширить диапазон:
- Замените
CurrencyнаDoubleв объявлении функции.- Добавьте обработку триллионов в логику преобразования (аналогично миллиардам).
Обновлённый код вы найдёте в спойлере выше.
Как сделать, чтобы сумма прописью начиналась с заглавной буквы и заканчивалась точкой?
В нашем
VBA-коде это уже реализовано строкой:СуммаПрописью = UCase(Left(Текст, 1)) & Mid(Текст, 2) & "."Если вы используете другой макрос, добавьте эту строку перед выходом из функции (
End Function).Можно ли конвертировать суммы в долларах или евро?
Да, в нашей функции предусмотрен необязательный параметр
Валюта. Примеры:
=СуммаПрописью(100;"доллар")→ «Сто долларов.»=СуммаПрописью(250,99;"евро")→ «Двести пятьдесят евро девяносто девять центов.»Чтобы добавить новую валюту (например, тенге), расширьте условие в коде:
Case "тенге": Текст = Текст & Склонять(ЦелаяЧасть, "тенге", "тенге", "тенге")