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

Превращаем числа в слова: зачем это нужно в Excel

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

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

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

Способ 1: Функция БАТЕКСТ() — скрытая возможность Excel

Мало кто знает, но в Excel есть встроенная функция БАТЕКСТ() (англ. DOLLARDE), которая преобразует числа в текстовый формат. Проблема в том, что по умолчанию она отключена и доступна только после подключения надстройки «Пакет анализа» (в английской версии — Analysis ToolPak).

Как её активировать:

  1. Перейдите в Файл → Параметры → Надстройки.
  2. Внизу окна выберите Управление: Надстройки Excel и нажмите Перейти.
  3. Отметьте галочкой Пакет анализа и подтвердите ОК.

Теперь функция БАТЕКСТ() появится в списке. Синтаксис простой:

=БАТЕКСТ(число; [число_знаков_после_запятой])

Пример: =БАТЕКСТ(1250,3; 2) вернёт «1250.30», но не прописью! Здесь кроется подвох: функция выводит число в текстовом формате с разделителями, но не конвертирует в слова. Для полноценной прописи потребуется комбинировать её с другими методами.

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

Для полноценного преобразования чисел в пропись (с учётом падежей, валют и копеек) придётся использовать макрос на VBA. Этот метод требует минимальных знаний программирования, но даёт максимальную гибкость. Ниже приведён готовый код, который работает с рублями, долларами и евро, а также корректно склоняет числительные (например, «1 рубль» vs «2 рубля»).

Как добавить макрос:

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

Dim Rubles As Variant, Cents As Variant, Temp As String

Dim DecimalPart As Integer, IntegerPart As Long

' Массивы для склонения валют

If Currency = "руб" Then

Rubles = Array("рубль", "рубля", "рублей")

Cents = Array("копейка", "копейки", "копеек")

ElseIf Currency = "долл" Then

Rubles = Array("доллар", "доллара", "долларов")

Cents = Array("цент", "цента", "центов")

ElseIf Currency = "евро" Then

Rubles = Array("евро", "евро", "евро")

Cents = Array("цент", "цента", "центов")

End If

IntegerPart = Int(n)

DecimalPart = Round((n - IntegerPart) * 100, 0)

' Преобразование целой части

If IntegerPart = 0 Then

Temp = "ноль " & ChooseCase(IntegerPart, Rubles)

Else

Temp = ConvertLessThanThousand(IntegerPart, Currency)

IntegerPart = IntegerPart \ 1000

If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " тысячи " & Temp

IntegerPart = IntegerPart \ 1000

If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " миллиона " & Temp

IntegerPart = IntegerPart \ 1000

If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " миллиарда " & Temp

End If

' Преобразование дробной части

If DecimalPart > 0 Then

Temp = Temp & " " & DecimalPart & " " & ChooseCase(DecimalPart, Cents)

End If

NumToText = Application.WorksheetFunction.Proper(Temp)

End Function

Function ConvertLessThanThousand(ByVal n As Long, Currency As String) As String

Dim Units As Variant, Tens As Variant, Hundreds As Variant

Dim Result As String

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

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

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

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

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

Hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _

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

If n = 0 Then Exit Function

If n >= 100 Then

Result = Hundreds(n \ 100)

n = n Mod 100

If n > 0 Then Result = Result & " "

End If

If n >= 20 Then

Result = Result & Tens(n \ 10)

n = n Mod 10

If n > 0 Then Result = Result & " " & Units(n)

ElseIf n > 0 Then

Result = Result & Units(n)

End If

ConvertLessThanThousand = Result

End Function

Function ChooseCase(ByVal n As Long, Cases As Variant) As String

If n Mod 100 >= 11 And n Mod 100 <= 19 Then

ChooseCase = Cases(2)

Else

Select Case n Mod 10

Case 1: ChooseCase = Cases(0)

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

Case Else: ChooseCase = Cases(2)

End Select

End If

End Function

Теперь в любой ячейке можно использовать функцию =NumToText(A1; "руб"), где A1 — ячейка с числом, а "руб" — валюта. Пример результата:

ЧислоФормулаРезультат
1250,30=NumToText(B2; "руб")Одна тысяча двести пятьдесят рублей 30 копеек
1,01=NumToText(B3; "долл")Один доллар 1 цент
100500,99=NumToText(B4; "евро")Сто тысяч пятьсот евро 99 центов

Убедитесь, что в настройках Excel разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы)|Сохраните файл в формате .xlsm (с поддержкой макросов)|Проверьте корректность склонений для чисел 1, 2, 5, 21, 101|Тестируйте на числах с нулевой дробной частью (например, 100,00)

-->

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

  • 🔹 Полная поддержка русской морфологии (склонения по падежам).
  • 🔹 Работа с любыми валютами (достаточно добавить массивы склонений в код).
  • 🔹 Возможность доработки под специфические требования (например, добавление слова «только» в начале).

Недостатки:

  • 🚫 Требует включения макросов (может быть заблокировано корпоративной политикой безопасности).
  • 🚫 Файл нужно сохранять в формате .xlsm, что увеличивает его размер.
📊 Какой метод преобразования чисел в текст вы используете чаще?
Встроенные функции Excel
Макросы VBA
Специализированные надстройки
Пишу вручную
Другой способ

Способ 3: Надстройки от сторонних разработчиков — готовые решения

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

Популярные надстройки для прописи чисел:

  • 📌 «Русский текст» от Add-in Express — поддерживает рубли, доллары, евро, гривны, а также казахский тенге. Есть бесплатная версия с ограничениями.
  • 📌 «NumWords» — простая надстройка с открытым исходным кодом, работает с 15+ валютами.
  • 📌 «Атлас-Пропись» — коммерческое решение для бухгалтеров, интегрируется с 1С.

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

  1. Скачайте файл .xlam с официального сайта (например, GitHub).
  2. В Excel перейдите в Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти.
  3. Нажмите Обзор, выберите скачанный файл и подтвердите установку.
  4. Теперь в ячейках доступна функция =NUMWORDS(число; валюта; язык).

Пример использования:

=NUMWORDS(1250,3; "RUB"; "RU")

Результат: «Одна тысяча двести пятьдесят рублей тридцать копеек».

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

Перейдите в Файл → Параметры → Надстройки, выберите ненужную надстройку в списке и нажмите Удалить. Если кнопка неактивна, сначала отключите её галочкой, затем повторите попытку. В некоторых случаях потребуется перезапуск Excel.

Плюсы надстроек:

  • 🔹 Не требуют знаний VBA — достаточно установить и использовать.
  • 🔹 Часто содержат дополнительные функции (например, преобразование дат в текст).
  • 🔹 Регулярно обновляются разработчиками (в отличие от самописных макросов).

Минусы:

  • 🚫 Плагины могут конфликтовать друг с другом или с макросами.
  • 🚫 Бесплатные версии часто имеют ограничения (например, лимит на количество ячеек).

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

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

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

Если макрос или надстройка выводит «1 рублей» вместо «1 рубль», проблема в логике функции ChooseCase. Исправление:

  • Откройте редактор VBA (Alt + F11).
  • Найдите функцию ChooseCase и проверьте массивы склонений для валют.
  • Для русского языка массивы должны выглядеть так:
    Rubles = Array("рубль", "рубля", "рублей")
    

    Cents = Array("копейка", "копейки", "копеек")

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

Excel может округлять дробную часть числа (например, 1250,3251250,33). Чтобы избежать искажений:

  • Используйте функцию ОКРУГЛ() перед преобразованием:
    =NumToText(ОКРУГЛ(A1; 2); "руб")
  • В макросе замените DecimalPart = Round((n - IntegerPart) 100, 0) на DecimalPart = Int((n - IntegerPart) 100 + 0.5) для банковского округления.

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

Если вместо результата появляется #ИМЯ?, проверьте:

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

Альтернативные методы: когда Excel не подходит

Если вам нужно преобразовать суммы прописью за пределами Excel (например, в Word, Google Таблицах или на сайте), рассмотрите эти инструменты:

1. Google Таблицы

В Google Sheets нет встроенной функции для прописи чисел, но можно использовать App Script (аналог VBA). Пример кода:

function NumToTextRUB(number) {

// Код аналогичен VBA, но адаптирован под JavaScript

// Полную версию можно найти на GitHub: https://gist.github.com/...

}

2. Онлайн-конвертеры

Для разовых задач подойдут сервисы вроде:

3. 1С и бухгалтерское ПО

В программах 1С:Бухгалтерия, МойСклад или Битрикс24 пропись сумм реализована «из коробки». Например, в 1С используйте функцию ЧислоПрописью():

ЧислоПрописью(1250.30, "рубль,,копейка,,2")

Сравнение методов: какой выбрать для вашей задачи

Чтобы определиться с методом, ответьте на вопросы:

  • 🔹 Сколько чисел нужно преобразовать?
    • ➕ До 10–20 ячеек → встроенная функция БАТЕКСТ() + ручная доводка.
    • ➕ Сотни/тысячи строк → макрос VBA или надстройка.
  • 🔹 Нужна ли поддержка разных валют?
    • ➕ Только рубли → достаточно простого макроса.
    • ➕ Многовалюта → надстройка или доработанный VBA-код.
  • 🔹 Есть ли доступ к макросам?
    • ➕ Нет → используйте надстройки или онлайн-сервисы.
    • ➕ Да → VBA даст максимальную гибкость.
Критерий Встроенные функции Макросы VBA Надстройки Онлайн-сервисы
Сложность настройки ⭐ (просто) ⭐⭐⭐ (средне) ⭐ (просто) ⭐ (просто)
Поддержка валют ❌ (нет) ✅ (да, при доработке) ✅ (да) ✅ (да)
Работа с большими данными ❌ (нет) ✅ (да) ✅ (да) ❌ (нет)
Безопасность ✅ (встроено) ⚠️ (требует макросы) ⚠️ (зависит от источника) ❌ (передача данных третьим лицам)

Рекомендации по выбору:

  • 📊 Для бухгалтеров и юристов → надстройки (Атлас-Пропись или NumWords).
  • 💻 Для разработчиков и продвинутых пользователей → VBA (полный контроль над логикой).
  • 📄 Для разовых задач → онлайн-сервисы или ручной ввод.

FAQ: Частые вопросы о прописи чисел в Excel

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

Да, но с ограничениями. Например, можно использовать комбинацию функций ЕСЛИ(), ВПР() и текстовых операций для чисел до 999, но для больших сумм это будет крайне громоздко. Пример для чисел до 20:

=ВПР(A1; {"1";"один";"2";"два";...;"20";"двадцать"}; 2; ЛОЖЬ)

Для полноценной прописи всё же потребуется VBA или надстройка.

Почему макрос работает медленно на больших данных?

VBA обрабатывает каждую ячейку последовательно. Чтобы ускорить работу:

  1. Отключите автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную).
  2. Используйте массивы вместо обработки каждой ячейки по отдельности.
  3. Для тысяч строк рассмотрите вариант экспорта данных в Power Query с последующей обработкой.
Как добавить слово «только» в начало прописи (например, для договоров)?

В макросе NumToText найдите строку NumToText = Application.WorksheetFunction.Proper(Temp) и замените её на:

NumToText = "Только " & Application.WorksheetFunction.Proper(Temp)

Для надстроек ищите аналогичный параметр в документации (обычно есть опция prefix или префикс).

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

Да, но потребуется адаптировать код VBA под Google Apps Script. Пример:

function RUB_PROPIS(number) {

// Логика аналогична VBA, но с синтаксисом JavaScript

// Полный код: https://gist.github.com/...

}

После добавления скрипта в таблице станет доступна функция =RUB_PROPIS(A1).

Как сделать пропись суммы с учётом НДС (например, «в том числе НДС 20% — 250 рублей»)?

Доработайте макрос или используйте комбинацию функций:

  1. Рассчитайте сумму НДС отдельно: =A1*20%.
  2. Примените к результату функцию прописи: =NumToText(B1; "руб").
  3. Объедините строки: ="В том числе НДС 20% — " & B2, где B2 — ячейка с прописью НДС.

Если ваш вопрос не освещён в FAQ, проверьте официальную документацию Microsoft или специализированные форумы вроде ExcelWorld.