Как конвертировать сумму из цифр в пропись в Excel — от простых формул до VBA

Вы когда-нибудь сталкивались с задачей оформить финансовый документ в Excel, где суммы должны быть прописаны не только цифрами, но и словами? Например, "1 250 рублей 30 копеек" вместо просто 1250.30? Это требование часто встречается в договорах, актах, квитанциях и бухгалтерских отчётах. Вручную переписывать сотни строк — неэффективно, а ошибки в таких документах недопустимы.

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

Почему нельзя просто использовать стандартные функции Excel

На первый взгляд кажется, что в Excel должна быть готовая функция для преобразования чисел в текст — как, например, TEXT для форматирования дат. Однако стандартного инструмента для этой задачи нет. Причины кроются в сложности алгоритма:

  • 📌 Склонение числительных: "один рубль", но "два рубля" и "пять рублей" — требуется учитывать падежи.
  • 💰 Дробные части: копейки или центы нужно выделять отдельно и правильно согласовывать с основной суммой.
  • 🌍 Локализация: правила написания чисел прописью отличаются в разных странах (например, в английском нет склонений).

Microsoft не включает такую функцию "из коробки", но предлагает альтернативы: пользовательские формулы, надстройки и макросы. Далее мы рассмотрим каждый вариант подробно.

📊 Какой способ преобразования чисел в пропись вы используете чаще?
Вручную переписываю
Стандартные формулы Excel
Пользовательские функции (VBA)
Надстройки от сторонних разработчиков

Способ 1: Формула без VBA (для Excel 2010 и новее)

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

Создайте вспомогательную таблицу со словами для чисел (единицами, десятками, сотнями) на отдельном листе, а затем используйте функцию ВПР (VLOOKUP) для поиска соответствий. Пример формулы для ячейки с суммой в A1:

=ЕСЛИ(A1=0;"ноль рублей";

ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " рубль" &

ЕСЛИ(И(МОД(ЦЕЛОЕ(A1);100)>10;МОД(ЦЕЛОЕ(A1);100)<20);"ей";

ЕСЛИ(ИЛИ(МОД(ЦЕЛОЕ(A1);10)=0;МОД(ЦЕЛОЕ(A1);10)>=5);"ей";

ЕСЛИ(МОД(ЦЕЛОЕ(A1);10)=1;"ь";"я")))) &

" " &

ТЕКСТ(ОСТАТ(A1;1)*100;"00") & " копеек"

Эта формула работает только для целых рублей и копеек, но её можно расширить, добавив обработку миллионов и миллиардов. Главный минус — при изменении правил склонения (например, для другой валюты) придётся переписывать формулу полностью.

Создайте отдельный лист для справочника чисел|Проверьте регион формата ячеек (должен быть "Русский")|Убедитесь, что сумма в ячейке имеет числовой формат, а не текстовый|Протестируйте формулу на примере 123,45 руб.-->

Способ 2: Пользовательская функция на VBA (универсальное решение)

Для гибкости и точности лучше один раз написать функцию на VBA, которая будет работать во всех книгах. Откройте редактор макросов (Alt + F11), вставьте новый модуль (Insert → Module) и добавьте следующий код:

Function SumProp(ByVal Summa As Currency) As String

Dim Rubl As String, Kop As String

Rubl = Num2Str(Int(Summa))

Kop = Num2Str(Round((Summa - Int(Summa)) * 100, 0))

' Обработка склонений для рублей

If Int(Summa) Mod 100 >= 11 And Int(Summa) Mod 100 <= 19 Then

Rubl = Rubl & " рублей"

Else

Select Case Int(Summa) Mod 10

Case 1: Rubl = Rubl & " рубль"

Case 2, 3, 4: Rubl = Rubl & " рубля"

Case Else: Rubl = Rubl & " рублей"

End Select

End If

' Обработка склонений для копеек

If Kop = "ноль" Then

SumProp = Rubl

Else

Select Case Val(Kop)

Case 1: SumProp = Rubl & " " & Kop & " копейка"

Case 2, 3, 4: SumProp = Rubl & " " & Kop & " копейки"

Case Else: SumProp = Rubl & " " & Kop & " копеек"

End Select

End If

End Function

Function Num2Str(ByVal Number As Integer) As String

' Массивы для преобразования чисел в слова

Dim Ones(1 To 9) As String, Teens(1 To 9) As String, Tens(1 To 9) As String

Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "четыре"

Ones(5) = "пять": Ones(6) = "шесть": Ones(7) = "семь": Ones(8) = "восемь": Ones(9) = "девять"

Teens(1) = "десять": Teens(2) = "одиннадцать": Teens(3) = "двенадцать"

Teens(4) = "тринадцать": Teens(5) = "четырнадцать": Teens(6) = "пятнадцать"

Teens(7) = "шестнадцать": Teens(8) = "семнадцать": Teens(9) = "восемнадцать"

Tens(2) = "двадцать": Tens(3) = "тридцать": Tens(4) = "сорок": Tens(5) = "пятьдесят"

Tens(6) = "шестьдесят": Tens(7) = "семьдесят": Tens(8) = "восемьдесят": Tens(9) = "девяносто"

If Number = 0 Then Num2Str = "ноль": Exit Function

Dim StrNum As String, Temp As String, i As Integer

' Обработка миллиардов

If Number >= 1000000000 Then

Temp = Num2Str(Int(Number / 1000000000))

StrNum = StrNum & Temp & " миллиард"

If Int(Number / 1000000000) Mod 100 >= 11 And Int(Number / 1000000000) Mod 100 <= 19 Then

StrNum = StrNum & "ов"

Else

Select Case Int(Number / 1000000000) Mod 10

Case 1: StrNum = StrNum & ""

Case 2, 3, 4: StrNum = StrNum & "а"

Case Else: StrNum = StrNum & "ов"

End Select

End If

Number = Number Mod 1000000000

If Number > 0 Then StrNum = StrNum & " "

End If

' Обработка миллионов (аналогично для тысяч, сотен и т.д.)

' ... (продолжение кода для других разрядов)

End Function

После вставки кода закройте редактор и используйте функцию =SumProp(A1) в любой ячейке. Преимущества этого метода:

  • ✅ Работает с суммами любой величины (в пределах типа Currency).
  • ✅ Автоматически склоняет "рубль"/"копейка" по правилам русского языка.
  • ✅ Можно адаптировать под другие валюты (доллары, евро), изменив склонения.
⚠️ Внимание: Если при использовании функции появляется ошибка #ИМЯ?, проверьте, включены ли макросы в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов).

Способ 3: Надстройки от сторонних разработчиков

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

Надстройка Стоимость Особенности Ссылка
NumWord Бесплатно Поддерживает 15 валют, включая рубль и доллар. Работает в Excel 2007–2023. numword.com
Русский язык для Excel 1 200 ₽ Включает не только суммы прописью, но и даты, и другие текстовые функции. excel-rus.ru
Ablebits $39/год Англоязычная надстройка с поддержкой русского языка для сумм. ablebits.com

Установка надстроек обычно занимает не более 5 минут. Например, для NumWord:

  1. Скачайте файл .xlam с официального сайта.
  2. Откройте Excel, перейдите в Файл → Параметры → Надстройки.
  3. Нажмите "Перейти" внизу окна, затем "Обзор" и выберите скачанный файл.
  4. После установки появится новая функция =NUMWORD.

Преимущество надстроек — не нужно писать код самому, а также часто есть дополнительные возможности, например, выбор валюты или регистра (заглавные/строчные буквы). Однако некоторые решения платные, а бесплатные могут содержать ограничения.

Ошибки и их решения: почему сумма прописью отображается неправильно

Даже с готовыми решениями пользователи часто сталкиваются с проблемами. Вот самые распространённые ошибки и способы их исправления:

Проблема Причина Решение
Функция возвращает #ЗНАЧ! Ячейка содержит текст, а не число. Проверьте формат ячейки (Числовой) или используйте =ЗНАЧЕН(A1).
Неправильные склонения ("1 рублей") Ошибка в логике функции VBA. Проверьте блок Select Case для обработки единиц.
Надстройка не устанавливается Блокировка макросов или несовместимая версия Excel. Включите макросы в настройках безопасности или обновите Excel.
Сумма прописью на английском Неверные региональные настройки. Установите русский язык в Файл → Параметры → Язык.

Если вы используете VBA-функцию, а сумма отображается с ошибками, проверьте:

  • 🔢 Тип данных: ячейка должна быть числовой, а не текстовый.
  • 📝 Регистр: функция чувствительна к регистру (например, "Рубль" vs "рубль").
  • 🌐 Локаль: в настройках Windows должен быть выбран русский язык.
⚠️ Внимание: При копировании книги с макросами на другой компьютер может потребоваться повторно разрешить выполнение макросов в настройках Excel. Иначе функция SumProp не будет работать.

Как адаптировать решение для других валют

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

' Замените блок склонений в функции SumProp на:

If Int(Summa) Mod 100 >= 11 And Int(Summa) Mod 100 <= 19 Then

Rubl = Rubl & " долларов"

Else

Select Case Int(Summa) Mod 10

Case 1: Rubl = Rubl & " доллар"

Case Else: Rubl = Rubl & " долларов"

End Select

End If

' И для центов:

If Kop = "ноль" Then

SumProp = Rubl

Else

If Val(Kop) = 1 Then

SumProp = Rubl & " " & Kop & " цент"

Else

SumProp = Rubl & " " & Kop & " центов"

End If

End If

Для евро правила ещё проще — слово не склоняется:

Rubl = Rubl & " евро"

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

Пример для казахстанского тенге

Для тенге склонение зависит от числа:

- 1 тенге

- 2–4 тенге

- 5–20 тенге (и далее без изменений).

В функции SumProp замените блок склонений на:

If Int(Summa) Mod 100 >= 11 And Int(Summa) Mod 100 <= 19 Then

Rubl = Rubl & " тенге"

Else

Select Case Int(Summa) Mod 10

Case 1: Rubl = Rubl & " тенге"

Case 2, 3, 4: Rubl = Rubl & " тенге"

Case Else: Rubl = Rubl & " тенге"

End Select

End If

Обратите внимание, что слово "тенге" не склоняется по падежам в современном казахском языке, но в русском оно остаётся неизменным.

Автоматизация для больших таблиц: как применить функцию ко всему столбцу

Если у вас сотни или тысячи строк с суммами, вручную протягивать формулу неэффективно. Вот как автоматизировать процесс:

  1. Для стандартной формулы: дважды кликните по правому нижнему углу ячейки с формулой (маркер автозаполнения). Excel автоматически скопирует её до последней заполненной ячейки в соседнем столбце.
  2. Для VBA-функции: выделите диапазон, в который нужно вставить результат, введите формулу (например, =SumProp(A1)) и нажмите Ctrl + Enter.
  3. Для надстроек: некоторые плагины (например, Ablebits) позволяют обработать весь столбец за один клик через меню надстройки.

Если данные обновляются регулярно, настройте автоматический пересчёт:

  • 🔄 Перейдите в Формулы → Параметры вычислений → Автоматически.
  • 📊 Для больших таблиц (более 10 000 строк) лучше использовать ручной пересчёт (F9), чтобы избежать замедления.

Для ускорения работы с VBA-функциями можно также:

  • 🚀 Отключить обновление экрана во время выполнения макроса (добавьте Application.ScreenUpdating = False в начало кода).
  • 📈 Преобразовать данные в значения после расчёта (Специальная вставка → Значения), если дальнейшие изменения не планируются.

FAQ: Ответы на частые вопросы

Можно ли преобразовать сумму прописью в Excel Online?

Нет, в веб-версии Excel (Excel Online) не поддерживаются пользовательские функции VBA и большинство надстроек. Альтернативы:

  • Используйте Power Automate (Microsoft Flow) для автоматизации.
  • Экспортируйте данные в настольную версию Excel, обработайте их и загрузите обратно.
  • Воспользуйтесь внешними сервисами (например, онлайн-конвертер).
Как сделать, чтобы сумма прописью была с заглавной буквы?

Добавьте функцию ПРОПНАЧ (PROPER) или ЗАГЛАВНЫЕ (UPPER) к результату:

=ПРОПНАЧ(SumProp(A1))  ' "Двадцать пять рублей"

=ЗАГЛАВНЫЕ(SumProp(A1)) ' "ДВАДЦАТЬ ПЯТЬ РУБЛЕЙ"

Для VBA-функции можно модифицировать вывод, добавив:

SumProp = UCase(Left(SumProp, 1)) & Mid(SumProp, 2)
Почему функция работает медленно на больших таблицах?

Пользовательские функции VBA выполняются медленнее встроенных формул Excel. Оптимизация:

  • 🛠️ Отключите обновление экрана в коде (Application.ScreenUpdating = False).
  • 📊 Используйте массивы для обработки данных пакетно, а не построчно.
  • 🔄 Пересчитывайте вручную (F9) вместо автоматического режима.

Для таблиц с >100 000 строк рассмотрите перенос логики в Power Query или Python (с библиотекой num2words).

Можно ли использовать это решение в Google Таблицах?

В Google Sheets нет VBA, но есть альтернативы:

  1. Используйте App Script (аналог VBA):
  2. function SumProp(rub, kop) {
    

    // Логика преобразования (аналогично VBA)

    return result;

    }

  3. Установите надстройку NumWord для Google Sheets.
  4. Воспользуйтесь формулой с IMPORTRANGE и внешним сервисом.

Пример вызова пользовательской функции в ячейке:

=SumProp(ЦЕЛОЕ(A1); ОСТАТ(A1;1)*100)
Как добавить поддержку миллиардов в пользовательскую функцию?

Расширьте функцию Num2Str, добавив обработку миллиардов. Пример кода для блока миллиардов:

' Обработка миллиардов (добавьте перед обработкой миллионов)

If Number >= 1000000000 Then

Temp = Num2Str(Int(Number / 1000000000))

StrNum = StrNum & Temp & " миллиард"

If Int(Number / 1000000000) Mod 100 >= 11 And Int(Number / 1000000000) Mod 100 <= 19 Then

StrNum = StrNum & "ов"

Else

Select Case Int(Number / 1000000000) Mod 10

Case 1: StrNum = StrNum & ""

Case 2, 3, 4: StrNum = StrNum & "а"

Case Else: StrNum = StrNum & "ов"

End Select

End If

Number = Number Mod 1000000000

If Number > 0 Then StrNum = StrNum & " "

End If

Аналогично добавьте обработку триллионов, если требуется.