Как в Excel сделать сумму прописью: 5 рабочих способов с примерами

Преобразование числовых значений в текстовый формат — одна из самых востребованных задач при работе с финансовыми документами в Microsoft Excel. Бухгалтерам, менеджерам и предпринимателям регулярно требуется выводить суммы не только цифрами, но и прописью: "Двадцать пять тысяч триста семьдесят два рубля 56 копеек". Вручную переписывать каждую сумму — нерационально, особенно при работе с большими таблицами. К счастью, в Excel есть несколько способов автоматизировать этот процесс.

В этой статье мы разберём 5 проверенных методов, включая встроенные функции, пользовательские формулы и VBA-макросы. Вы узнаете, как адаптировать решения под разные версии программы (от Excel 2010 до Microsoft 365), избежать типичных ошибок и даже создать универсальный шаблон для повторного использования. Особое внимание уделим нюансам работы с рублями и копейками, а также формату вывода для официальных документов.

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

📊 Как часто вам нужно преобразовывать суммы прописью в Excel?
Ежедневно
Несколько раз в неделю
Рядом
Первый раз столкнулся

1. Встроенная функция БАТТЕКСТ: плюсы и ограничения

Начиная с Excel 2013, в программе появилась встроенная функция БАТТЕКСТ (англ. NUMBERSTRING), которая как раз предназначена для преобразования чисел в текстовый формат. Это самое простое решение, но с рядом нюансов.

Функция поддерживает только русский и украинский языки и имеет фиксированный формат вывода. Например, для числа 1234,56 она вернёт:

=БАТТЕКСТ(1234,56; 1)

→ "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек"

Синтаксис функции:

БАТТЕКСТ(число; [формат_вывода]; [включать_копейки])

где [включать_копейки] может принимать значения:

  • 🔹 1 — вывод с копейками (по умолчанию)
  • 🔹 0 — только рубли (округление до целого)
  • 🔹 2 — только рубли без округления (например, для неденежных значений)

Главный недостаток БАТТЕКСТотсутствие гибкости. Вы не можете:

  • 🔸 Изменить валюту (только рубли/гривны)
  • 🔸 Настроить регистр вывода (всегда строчные буквы)
  • 🔸 Добавить собственные суффиксы (например, "включая НДС")

2. Пользовательская функция на VBA: универсальное решение

Для полного контроля над форматом вывода придётся использовать VBA-макрос. Этот метод работает во всех версиях Excel (включая Excel 2010) и позволяет настраивать:

  • 🔹 Валюту (рубли, доллары, евро и др.)
  • 🔹 Регистр (заглавные/строчные буквы)
  • 🔹 Разделители (пробелы, запятые)
  • 🔹 Округление копеек

Ниже приведён оптимизированный код функции СуммаПрописью, который поддерживает рубли и копейки, а также корректно склоняет числительные:

Function СуммаПрописью(Сумма As Double, Optional Валюта As String = "рубль/рубля/рублей", _

Optional Копейка As String = "копейка/копейки/копеек", Optional Разделитель As String = " ") As String

Dim Рубли As String, Копейки As String, Результат As String

Dim ЦелаяЧасть As Long, ДробнаяЧасть As Long

ЦелаяЧасть = Int(Сумма)

ДробнаяЧасть = Round((Сумма - ЦелаяЧасть) * 100, 0)

If ЦелаяЧасть = 0 And ДробнаяЧасть = 0 Then

СуммаПрописью = "ноль " & Split(Валюта, "/")(2)

Exit Function

End If

Рубли = ЧислоПрописью(ЦелаяЧасть, True) & " " & Склонение(ЦелаяЧасть, Валюта)

Копейки = ЧислоПрописью(ДробнаяЧасть, False) & " " & Склонение(ДробнаяЧасть, Копейка)

If ЦелаяЧасть = 0 Then Рубли = ""

If ДробнаяЧасть = 0 Then Копейки = ""

Результат = Рубли

If Рубли <> "" And Копейки <> "" Then Результат = Результат & Разделитель

Результат = Результат & Копейки

СуммаПрописью = Application.WorksheetFunction.Proper(Результат)

End Function

Function ЧислоПрописью(Число As Long, МужскойРод As Boolean) As String

' ... (полный код функции склонения чисел)

End Function

Function Склонение(Число As Long, Варианты As String) As String

' ... (полный код функции склонения валют)

End Function

Как установить макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте приведённый выше код.
  4. Сохраните файл как .xlsm (с поддержкой макросов).

Теперь в любой ячейке можно использовать формулу:

=СуммаПрописью(A1)

где A1 — ячейка с числовым значением.

Убедиться, что макросы разрешены в настройках Excel|Создать резервную копию файла|Проверять код на наличие ошибок перед сохранением|Тестировать функцию на небольшом диапазоне данных-->

3. Альтернативные формулы без VBA: для тех, кто не любит макросы

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

  1. Разбиваем число на разряды (единицы, тысячи, миллионы).
  2. Для каждого разряда используем функцию ВЫБОР или ИНДЕКС для подстановки текстового эквивалента.
  3. Объединяем результаты с учётом склонений.

Пример формулы для чисел до 999 999 рублей (без копеек):

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

СЦЕПИТЬ(

ЕСЛИ(ЦЕЛОЕ(A1/100000)>0;ЧислоВТекст(ЦЕЛОЕ(A1/100000);"ж");"") & ЕСЛИ(И(ЦЕЛОЕ(A1/100000)>0;ЦЕЛОЕ(A1/100000)<20);" ";ЕСЛИ(ЦЕЛОЕ(A1/100000)>0;" ";"")) &

СклонениеМиллионов(ЦЕЛОЕ(A1/100000)) & ЕСЛИ(И(ЦЕЛОЕ(A1/100000)>0;ОСТАТ(A1;100000)>0);" "; "") &

...

)

)

Главный недостаток этого подхода — ограниченная длина формулы (до 8192 символов в Excel). Для полноценной обработки больших чисел потребуется разбивать логику на несколько вспомогательных столбцов.

Для упрощения можно использовать надстройку "Пакет анализа", которая расширяет функционал стандартных формул. Однако даже с ней реализация полноценного преобразователя займёт не менее 20-30 строк кода в одной ячейке.

Пример упрощённой функции для чисел до 1000

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

ЕСЛИ(A1<20;ВЫБОР(A1;"один";"два";"три";...;"девятнадцать");

СЦЕПИТЬ(

ВЫБОР(ЦЕЛОЕ(A1/10);2;"двадцать";3;"тридцать";...;"девяносто");

ЕСЛИ(ОСТАТ(A1;10)=0;"";" ";ВЫБОР(ОСТАТ(A1;10);"один";"два";...;"девять"))

)

)

4. Надстройки от сторонних разработчиков: готовые решения

Если вам нужно быстрое и надёжное решение без погружения в код, обратите внимание на бесплатные и платные надстройки для Excel. Они предлагают:

  • 🔹 Поддержку нескольких валют
  • 🔹 Гибкие настройки формата
  • 🔹 Возможность работы с диапазонами ячеек
  • 🔹 Автоматическое обновление при изменении данных

Топ-3 проверенных надстройки:

НазваниеТипОсобенностиСсылка
РубльКопейкаБесплатнаяПоддержка рублей/долларов, склонение по падежамСкачать
NumToTextПлатная ($19)Многовалютость, экспорт в Word, работа с датамиСайт
Excel Number to WordsУсловно-бесплатнаяИнтеграция с 1С, поддержка английскогоДемо

Как установить надстройку:

  1. Скачайте файл с расширением .xlam или .xlsm.
  2. В Excel перейдите в Файл → Параметры → Надстройки.
  3. Нажмите Перейти... внизу окна и выберите скачанный файл.
  4. Активируйте надстройку и перезапустите Excel.

5. Обработка больших таблиц: оптимизация производительности

При работе с таблицами на 10 000+ строк даже оптимизированные VBA-функции могут тормозить. Чтобы ускорить процесс:

  • 🔹 Отключите автоматический пересчёт формул: перейдите в Формулы → Параметры вычислений → Вручную.
  • 🔹 Используйте массивные формулы вместо построчного применения функции.
  • 🔹 Для VBA добавьте Application.ScreenUpdating = False в начало макроса.
  • 🔹 Разбейте данные на части и обрабатывайте их поочерёдно.

Пример оптимизированного кода для обработки диапазона:

Sub ПреобразоватьДиапазон()

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False

Dim rng As Range, cell As Range

Set rng = Selection

For Each cell In rng

If IsNumeric(cell.Value) Then

cell.Offset(0, 1).Value = СуммаПрописью(cell.Value)

End If

Next cell

Application.Calculation = xlCalculationAutomatic

Application.ScreenUpdating = True

End Sub

Для таблиц свыше 50 000 строк рекомендуется использовать Power Query:

  1. Импортируйте данные в Power Query (Данные → Получить данные → Из таблицы/диапазона).
  2. Добавьте пользовательский столбец с формулой преобразования.
  3. Загрузите результат обратно в Excel.

6. Типичные ошибки и как их избежать

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

1. Неправильное склонение валют

⚠️ Внимание: Функция БАТТЕКСТ всегда выводит "рубля" вместо "рублей" для чисел 2-4. Чтобы исправить это, используйте VBA-функцию со корректным склонением или надстройку.

2. Округление копеек

  • 🔸 БАТТЕКСТ округляет копейки по математическим правилам (0.564 → 0.56).
  • 🔸 Для банковского округления (0.564 → 0.56, 0.565 → 0.57) модифицируйте VBA-код:
ДробнаяЧасть = Application.WorksheetFunction.RoundUp((Сумма - ЦелаяЧасть) * 100, 0)

3. Ошибка #ИМЯ? при использовании пользовательской функции

  • 🔸 Убедитесь, что файл сохранён как .xlsm (с поддержкой макросов).
  • 🔸 Проверьте регистр названия функции в коде и в ячейке (должны совпадать).
  • 🔸 Включите макросы в Файл → Параметры → Центр управления безопасностью.

4. Медленная работа с большими таблицами

⚠️ Внимание: Если ваша таблица содержит более 100 000 строк, избегайте применения пользовательских функций к каждой ячейке. Вместо этого используйте Power Query или обрабатывайте данные партиями по 10 000 строк.

7. Продвинутые возможности: многовалютость и кастомизация

Для международных компаний или работы с несколькими валютами стандартных решений недостаточно. Рассмотрим, как адаптировать VBA-функцию для поддержки долларов, евро и других валют:

Модифицированный код с поддержкой многовалюточности:

Function СуммаПрописью(Сумма As Double, _

Optional Валюта As String = "рубль/рубля/рублей|копейка/копейки/копеек", _

Optional Разделитель As String = " ") As String

Dim Валюты() As String

Валюты = Split(Валюта, "|")

' ... (остальной код без изменений, но используем Валюты(0) для основной валюты и Валюты(1) для копеек)

End Function

Теперь функцию можно вызывать с указанием валюты:

=СуммаПрописью(A1; "доллар/доллара/долларов|цент/цента/центов")

Для полной кастомизации можно добавить параметры:

  • 🔹 Язык — для поддержки английского, немецкого и др.
  • 🔹 Регистр — вывод заглавными или строчными буквами.
  • 🔹 ДополнительныйТекст — например, "включая НДС 20%".

Пример вызова с дополнительным текстом:

=СуммаПрописью(A1;;;" (в т.ч. НДС)")
Как добавить поддержку английского языка

1. Создайте отдельную функцию NumberToEnglish с англоязычными числительными.

2. Модифицируйте основную функцию, добавив параметр Language.

3. Используйте конструкцию Select Case Language для выбора нужного алгоритма.

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

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

Да, но с серьёзными ограничениями. Вы можете использовать комбинацию функций ВЫБОР, ЕСЛИ и СЦЕПИТЬ, однако:

  • 🔹 Формула будет очень длинной (до 8000 символов).
  • 🔹 Поддержка только чисел до 999 999.
  • 🔹 Нет корректного склонения валют.

Для реальной работы этот метод не рекомендуется.

Почему функция БАТТЕКСТ не работает в моём Excel?

Вероятные причины:

  • 🔹 У вас версия Excel до 2013 года (функция появилась в 2013).
  • 🔹 Региональные настройки Windows не русские.
  • 🔹 В ячейке текст вместо числа (проверьте формат).

Решение: обновите Excel или используйте VBA-альтернативу.

Как сделать первую букву заглавной в выводе?

В VBA-функции добавьте строку перед возвратом результата:

СуммаПрописью = UCase(Left(Результат, 1)) & Mid(Результат, 2)

Для функции БАТТЕКСТ оберните её в ПРОПНАЧ:

=ПРОПНАЧ(БАТТЕКСТ(A1))

Обратите внимание, что ПРОПНАЧ сделает заглавными все слова, а не только первое букву.

Можно ли использовать эту функцию в Google Таблицах?

В Google Sheets нет аналога БАТТЕКСТ, но вы можете:

  • 🔹 Использовать Apps Script (аналог VBA).
  • 🔹 Установить надстройку "Number to Words" из магазина.
  • 🔹 Применить формулу на основе SWITCH и REGEX (ограничено 50 000 символами).

Пример скрипта для Google Sheets:

function sumInWords(num) {

// ... (реализация на JavaScript)

}

Как экспортировать таблицу с суммами прописью в Word?

Способы переноса:

  • 🔹 Копирование-вставка: Скопируйте диапазон в Excel, в Word выберите Специальная вставка → Текст.
  • 🔹 Связывание данных: В Word используйте Вставка → Объект → Текст из файла и выберите .xlsx.
  • 🔹 VBA-макрос: Напишите скрипт для автоматического экспорта с сохранением форматирования.

Для сохранения формул при экспорте используйте надстройки типа ExcelToWord.