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

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

В этой статье мы разберём 5 проверенных методов, как прописать сумму прописью в Excel — от использования комбинаций стандартных функций (ТЕКСТ, ВЫБОР, ЕСЛИ) до создания пользовательских функций на VBA. Вы узнаете, какой способ подходит для одноразовых задач, а какой лучше автоматизировать для регулярного использования. Особое внимание уделим нюансам работы с копейками, отрицательными числами и крупными суммами (миллионы и миллиарды).

Все примеры сопровождаются готовыми формулами и шаблонами, которые вы сможете скачать и адаптировать под свои нужды. А для тех, кто предпочитает готовые решения — в конце статьи приведён обзор бесплатных надстроек Excel для автоматического преобразования чисел в текст.

1. Способ: Использование стандартных функций Excel (без VBA)

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

Основной принцип: число разбивается на разряды (единицы, десятки, сотни), а затем каждый разряд преобразуется в текст с помощью вложенных функций. Например, число 1 234 будет обработано как:

  • 🔹 1 (тысяча) →"одна тысяча"
  • 🔹 2 (сотни) →"двести"
  • 🔹 34 (десятки и единицы) →"тридцать четыре"

Для реализации этого метода:

  1. Создайте на листе Excel справочную таблицу с названиями чисел от 0 до 999 (можно ограничиться до 99, если суммы не превышают 1000).
  2. Используйте функцию =ЦЕЛОЕ(A1/1000) для выделения тысяч, =ОСТАТ(A1;1000) — для остатка.
  3. Примените вложенные ЕСЛИ или ВЫБОР для подстановки текстового эквивалента.

Пример формулы для числа до 999:

=ЕСЛИ(A1=0;"ноль";

ВЫБОР(ЦЕЛОЕ(A1/100);

"";

ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/100);10)=1;"сто";"ста");

"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") &"" &

ЕСЛИ(И(ЦЕЛОЕ(A1/10)>0;ЦЕЛОЕ(A1/10)<2);

ВЫБОР(ОСТАТ(A1;10);

"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";

"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");

ЕСЛИ(ЦЕЛОЕ(A1/10)>1;

ВЫБОР(ЦЕЛОЕ(A1/10);

"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";

"семьдесят";"восемьдесят";"девяносто") &"" &

ВЫБОР(ОСТАТ(A1;10);

"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять");

"")) &"" &

ЕСЛИ(И(ЦЕЛОЕ(A1/10)=0;ОСТАТ(A1;10)>0);

ВЫБОР(ОСТАТ(A1;10);

"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять");

""))

⚠️ Внимание: Этот метод имеет ограничение — формула становится чрезвычайно громоздкой при работе с суммами свыше 999 999. Для миллионов и миллиардов рекомендуется использовать VBA или надстройки.

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

Для тех, кто готов использовать макросы, VBA (Visual Basic for Applications) предлагает самое гибкое решение. Созданная один раз функция SumProp будет доступна во всех книгах Excel на вашем компьютере (при сохранении в Персональной книге макросов).

Преимущества метода:

  • 🔹 Обработка чисел любой длины (включая триллионы).
  • 🔹 Автоматическое склонение валют ("рубль"/"рубля"/"рублей").
  • 🔹 Поддержка отрицательных чисел и нулевых значений.
  • 🔹 Возможность кастомизации (например, добавление"только" или"00 копеек").

Инструкция по установке:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте приведённый ниже код.
  4. Сохраните файл как .xlsm (с поддержкой макросов).
Function SumProp(ByVal n As Double, Optional valuta As String ="рубль/рубля/рублей") As String

Dim rubl As String, kop As String, temp As String

Dim valutaParts As String

valutaParts = Split(valuta,"/")

n = Round(n, 2)

If n = 0 Then

SumProp ="ноль" & valutaParts(2)

Exit Function

End If

If n < 0 Then

SumProp ="минус"

n = Abs(n)

End If

rubl = Num2Str(Int(n))

kop = Num2Str(Round((n - Int(n)) * 100, 0))

If Len(rubl) > 0 Then

temp = GetRub(n, valutaParts)

If Len(temp) > 0 Then rubl = rubl &"" & temp

End If

If Len(kop) > 0 Then

SumProp = rubl &"" & kop &" копеек"

Else

SumProp = rubl &"" & GetRub(n, valutaParts)

End If

End Function

Function Num2Str(n As Long) As String

Dim strNum As String, i As Integer

Dim arr As String, arrNum(1 To 6) As String

Dim j As Integer, k As Integer

If n = 0 Then Exit Function

arrNum(1) =""

arrNum(2) =" тысяча/тысячи/тысяч"

arrNum(3) =" миллион/миллиона/миллионов"

arrNum(4) =" миллиард/миллиарда/миллиардов"

arrNum(5) =" триллион/триллиона/триллионов"

arrNum(6) =" квадриллион/квадриллиона/квадриллионов"

strNum = CStr(n)

j = Len(strNum)

k = Int((j - 1) / 3) + 1

ReDim arr(1 To k)

For i = 1 To k

If i < k Then

arr(i) = Right(strNum, 3)

strNum = Left(strNum, Len(strNum) - 3)

Else

arr(i) = strNum

End If

arr(i) = Triad(Right("000" & arr(i), 3), (i = k))

Next i

For i = k To 1 Step -1

If Len(arr(i)) > 0 Then

Num2Str = Num2Str &"" & arr(i) & ChooseCase(arr(i), arrNum(i))

End If

Next i

Num2Str = Application.WorksheetFunction.Trim(Num2Str)

End Function

Function Triad(n As String, isLast As Boolean) As String

Dim hundreds As String, tens As String, ones As String

Dim arr1 As String, arr2 As String, arr3 As String

Dim i As Integer, j As Integer, k As Integer

arr1 = Array("","один","два","три","четыре","пять","шесть","семь","восемь","девять")

arr2 = Array("","десять","двадцать","тридцать","сорок","пятьдесят", _

"шестьдесят","семьдесят","восемьдесят","девяносто")

arr3 = Array("","одна","две","три","четыре","пять","шесть","семь","восемь","девять")

hundreds = Mid(n, 1, 1)

tens = Mid(n, 2, 1)

ones = Mid(n, 3, 1)

If hundreds <>"0" Then

If (tens ="1") And (isLast = False) Then

Triad = arr1(hundreds) &"ста"

Else

Triad = arr1(hundreds) &"сот"

End If

End If

If tens ="1" Then

Triad = Triad &"" & arr2(Val(ones) + 1)

Else

If tens <>"0" Then Triad = Triad &"" & arr2(Val(tens))

If ones <>"0" Then

If (tens ="0") And (isLast = True) And (hundreds ="0") Then

Triad = Triad &"" & arr3(Val(ones))

Else

Triad = Triad &"" & arr1(Val(ones))

End If

End If

End If

Triad = Application.WorksheetFunction.Trim(Triad)

End Function

Function ChooseCase(n As String, s As String) As String

Dim arr As String

arr = Split(s,"/")

n = Val(n)

If n = 0 Then Exit Function

Select Case Right(n, 1)

Case 1: ChooseCase = arr(0)

Case 2, 3, 4: ChooseCase = arr(1)

Case Else: ChooseCase = arr(2)

End Select

End Function

Function GetRub(n As Double, valutaParts As String) As String

n = Int(n)

Select Case Right(n, 1)

Case 1: GetRub = valutaParts(0)

Case 2, 3, 4: GetRub = valutaParts(1)

Case Else: GetRub = valutaParts(2)

End Select

End Function

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

=SumProp(A1)

или с указанием валюты:

=SumProp(A1;"доллар/доллара/долларов")
📊 Какой способ преобразования чисел в текст вы используете чаще?
Стандартные функции Excel
Пользовательские функции VBA
Надстройки (например, NumWord)
Ручной ввод
Другой способ

3. Способ: Надстройки для Excel (готовые решения)

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

Топ-3 надстройки для преобразования чисел в текст:

Название Тип Особенности Ссылка
NumWord Бесплатная Поддерживает 15 валют, склонение по падежам, работу с копейками numword.ru
ЧислоПрописью Условно-бесплатная Интеграция с 1С, экспорт в Word, обработка отрицательных чисел chislopropisyu.ru
Excel Number to Words Платная Мног языковая поддержка, кастомизация формата вывода ablebits.com

Как установить надстройку NumWord (на примере):

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

После установки в Excel появится новая функция:

=NUMWORD(A1;"RUR")

где "RUR" — код валюты (доступны также USD, EUR и др.).

Как удалить надстройку, если она перестала работать?

Чтобы удалить надстройку, перейдите в Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. Снимите галочку с ненужной надстройки и нажмите ОК. Если надстройка повреждена, найдите её файл (обычно в C:\Users\ИмяПользователя\AppData\Roaming\Microsoft\AddIns) и удалите вручную.

4. Способ: Онлайн-конвертеры (для одноразовых задач)

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

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

  • 🌐 NumWord Online — поддерживает 20 валют, экспорт в Excel.
  • 🌐 ЧислоПрописью Онлайн — русскоязычный интерфейс, склонение по падежам.
  • 🌐 Calculat.org — простой конвертер с поддержкой дробных чисел.

Как перенести результат в Excel:

  1. Введите число на сайте и получите текстовый эквивалент.
  2. Скопируйте результат (Ctrl+C).
  3. В Excel выделите ячейку и вставьте значения (Ctrl+V).
  4. Если нужно сохранить форматирование, используйте Специальная вставка → Текст.
⚠️ Внимание: Онлайн-сервисы не подходят для работы с конфиденциальными данными (номерами счетов, суммами по договорам). Для таких случаев используйте офлайн-методы (VBA или надстройки).

5. Способ: Формулы для рублей и копеек (раздельный вывод)

Часто требуется вывести сумму прописью в формате"123 рубля 45 копеек". Для этого можно разбить задачу на две части: обработку целой части (рубли) и дробной (копейки).

Пример формулы для рублей (ячейка A1 содержит число 123,45):

=ЕСЛИ(ЦЕЛОЕ(A1)=0;"ноль";

ЕСЛИ(ЦЕЛОЕ(A1)=1;"один рубль";

ЕСЛИ(ЦЕЛОЕ(A1)>1;ЕСЛИ(ЦЕЛОЕ(A1)<5;"рубля";"рублей");""))) &"" &

ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0")

Для копеек (дробная часть):

=ЕСЛИ(ОСТАТ(A1*100;100)=0;"00 копеек";

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

Объедините результаты в одной ячейке:

=SumProp(ЦЕЛОЕ(A1)) &"" & ТЕКСТ(ОСТАТ(A1*100;100);"00") &" копеек"

Сверьте целую часть (рубли) с исходным числом|Проверьте склонение валюты ("рубль"/"рубля"/"рублей")|Убедитесь, что копейки округлены до двух знаков|Проверьте обработку нулевых значений (например,"ноль рублей 00 копеек")|Тестируйте на отрицательных числах, если они возможны-->

6. Распространённые ошибки и как их избежать

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

Ошибка Причина Решение
Неправильное склонение валют ("1 рубль" →"1 рублей") Ошибка в логике функции ChooseCase или формуле Используйте проверенные шаблоны или надстройки с поддержкой склонения
Округление копеек (например, 99,995 →"100 копеек") Excel округляет дробную часть при форматировании Применяйте =ОКРУГЛ(A1*100;0) перед преобразованием
Ошибка"#ИМЯ?" при использовании VBA-функции Макрос не сохранён или книга открыта без поддержки макросов Сохраните файл как .xlsm и включите макросы при открытии
Медленная работа при больших объёмах данных Слишком много вложенных функций или неоптимизированный код VBA Используйте надстройки или оптимизируйте код (например, заранее рассчитайте разряды)

Дополнительные рекомендации:

  • 🔹 Тестируйте формулы на краевых значениях: 0, 1, 2, 5, 11, 21, 99, 100, 101, 999, 1000, 1000000.
  • 🔹 Для отрицательных чисел добавьте проверку =ЕСЛИ(A1<0;"минус" & SumProp(ABS(A1)); SumProp(A1)).
  • 🔹 Если используете VBA, всегда сохраняйте резервную копию книги перед внесением изменений в код.

7. Автоматизация для бухгалтерских документов

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

Пример структуры шаблона:

  • 📌 Ячейка A1: Сумма числом (например, 1234,56).
  • 📌 Ячейка B1: Формула =SumProp(A1) (вывод прописью).
  • 📌 Ячейка C1: Формула для копеек =ТЕКСТ(ОСТАТ(A1*100;100);"00") &" копеек".
  • 📌 Ячейка D1: Объединённый результат =B1 &"," & C1.

Чтобы шаблон был универсальным:

  1. Создайте Выпадающий список (проверка данных) для выбора валюты.
  2. Добавьте флажок для включения/отключения слова"только" (например,"Сто двадцать рублей 00 копеек только").
  3. Защитите ячейки с формулами от изменений (Рецензирование → Защитить лист).

FAQ: Частые вопросы по суммам прописью в Excel

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

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

Как прописать сумму с учетом падежей (например,"оплатить пятьсот пятьдесят пять рублей")?

Для склонения по падежам потребуется модифицировать VBA-функцию или использовать специализированные надстройки (например, ЧислоПрописью). В стандартных формулах реализовать корректное склонение крайне сложно.

Почему функция SumProp выдаёт ошибку при открытии файла на другом компьютере?

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

  • Сохраните файл как .xlsx (без макросов) и используйте стандартные функции.
  • Установите надстройку на втором компьютере.
  • Экспортируйте данные в PDF с уже прописанными суммами.

Как прописать сумму в иностранной валюте (доллары, евро)?

В VBA-функции SumProp замените параметр валюты:

=SumProp(A1;"доллар/доллара/долларов")

Для евро:

=SumProp(A1;"евро/евро/евро")

В надстройке NumWord используйте коды валют: =NUMWORD(A1;"USD").

Можно ли автоматически прописать сумму в Word из Excel?

Да, для этого подходит два метода:

  1. Связывание данных: Вставьте в Word объект Excel (Вставка → Объект → Лист Microsoft Excel) и используйте формулу прописью.
  2. VBA-скрипт: Напишите макрос, который экспортирует данные из Excel в Word с преобразованием чисел в текст.