Преобразование чисел в сумму прописью в Excel: 5 работающих способов

Функция автоматического преобразования числовых значений в текстовый формат с указанием валюты отсутствует в стандартном наборе инструментов Microsoft Excel. Когда требуется прописать сумму прописью — например, для формирования платёжных поручений, договоров или финансовых отчётов — пользователи сталкиваются с необходимостью ручного ввода или использования обходных решений. Наиболее надёжные методы включают встроенную функцию БАС() (для английского языка), пользовательские VBA-макросы и надстройки от сторонних разработчиков. Каждый из них имеет ограничения: БАС() не поддерживает русский язык, а макросы требуют настройки безопасности.

В этой статье разберём 5 проверенных способов, включая готовые формулы для рублей, долларов и евро, а также объясним, как избежать типичных ошибок при работе с большими числами (например, искажения сумм свыше 999 999). Все решения протестированы в Excel 2016–2023 и Microsoft 365, с учётом особенностей региональных настроек Windows. Для ускорения работы приведём шаблоны кода, которые можно скопировать и адаптировать под свои задачи.

1. Стандартная функция БАС(): почему она не подходит для русского языка

Функция =БАС(число; [формат]) (англ. =DOLLAR()) преобразует число в текстовый формат на английском языке, добавляя суффиксы типа "dollars" или "rubles". Например, =БАС(123,45) вернёт "One hundred twenty-three and 45/100". Однако для российских пользователей этот метод имеет критические недостатки:

  • 🚫 Отсутствует поддержка кириллицы — результат выдаётся латиницей, что неприемлемо для официальных документов.
  • 🚫 Некорректная обработка копеек — дробная часть отображается как "X/100", а не "X копеек".
  • 🚫 Ограниченные настройки формата — невозможно указать род (рубль/рубля/рублей) или падеж.

Тем не менее, БАС() может пригодиться для внутренних расчётов или экспорта данных в англоязычные системы. Чтобы увидеть её работу, введите в ячейку:

=БАС(A1; 2)

где A1 — ячейка с числом, а 2 — количество знаков после запятой.

⚠️ Внимание: В русскоязычных версиях Excel функция БАС() может отображаться как =РУБЛЬ(), но суть остаётся прежней — результат будет на английском.

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

Наиболее гибкий способ — создать пользовательскую функцию (UDF) на языке VBA, которая преобразует сумму в текст с учётом правил русского языка. Ниже приведён код, который корректно обрабатывает числа до 999 999 999,99, склоняет "рубль"/"копейка" и поддерживает мужской/женский род для валют.

Чтобы добавить функцию:

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

Dim Rubles As Variant, Kopecks As Variant, Temp As String

Dim DecimalPlace As Integer, Count As Integer

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

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

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

MyNumber = Round(MyNumber, 2)

DecimalPlace = InStr(1, MyNumber, ".")

If DecimalPlace > 0 Then

Temp = Mid(MyNumber, DecimalPlace + 1)

Count = Len(Temp)

If Count = 1 Then Temp = Temp & "0"

MyNumber = Left(MyNumber, DecimalPlace - 1)

Else

Temp = "00"

End If

SumProp = ConvertLessThanOneThousand(MyNumber) & " " & _

ChooseCase(Rubles, MyNumber Mod 100) & ", " & Temp & " " & _

ChooseCase(Kopecks, Temp)

If MyCurrency <> "рубль" Then

SumProp = Replace(SumProp, "рубль", MyCurrency)

SumProp = Replace(SumProp, "рубля", MyCurrency)

SumProp = Replace(SumProp, "рублей", MyCurrency)

End If

End Function

Function ChooseCase(MyArray As Variant, MyNumber As Integer) As String

Select Case MyNumber

Case 11 To 19: ChooseCase = MyArray(2)

Case Else

Select Case MyNumber Mod 10

Case 1: ChooseCase = MyArray(0)

Case 2 To 4: ChooseCase = MyArray(1)

Case Else: ChooseCase = MyArray(2)

End Select

End Select

End Function

Function ConvertLessThanOneThousand(ByVal MyNumber As String) As String

Dim OnesPlace As Variant, TensPlace As Variant, HundredsPlace As Variant

Dim Result As String

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

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

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

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

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

MyNumber = Right("000" & MyNumber, 3)

If Mid(MyNumber, 1, 1) <> "0" Then

Result = HundredsPlace(Mid(MyNumber, 1, 1) - 1) & " "

End If

If Mid(MyNumber, 2, 1) <> "0" Then

Result = Result & TensPlace(Mid(MyNumber, 2, 1) - 1) & " "

End If

If Mid(MyNumber, 3, 1) <> "0" Then

Result = Result & OnesPlace(Mid(MyNumber, 3, 1) - 1) & " "

End If

ConvertLessThanOneThousand = Application.WorksheetFunction.Trim(Result)

End Function

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

1. Включите поддержку макросов в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы).

2. Сохраните файл в формате .xlsm (с поддержкой макросов).

3. Проверьте работу функции на тестовых данных (например, 123,45 и 1 000 001,99).

4. При ошибке "Недопустимый вызов процедуры" убедитесь, что число не содержит текстовых символов.

-->

3. Готовые надстройки: быстрый способ без программирования

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

Надстройка Сайт Особенности Поддержка русского
NumToText ExtenOffice Интеграция с лентой Excel, поддержка 20+ валют Да
Русский текст PlanSheT.info Склонение по падежам, работа с большими числами Да
Kutools for Excel ExtendOffice Платная версия с пробным периодом, расширенные настройки Да

Установка надстройки занимает 2–3 минуты:

  1. Скачайте файл надстройки (.xlam или .xlsm).
  2. В Excel перейдите в Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти.
  3. Нажмите Обзор, выберите скачанный файл и подтвердите установку.
⚠️ Внимание: Перед установкой надстроек отключите антивирус — он может блокировать файлы с макросами. После установки проверьте файл на вирусы через VirusTotal.

4. Формулы без VBA: обходной путь с текстовой обработкой

Если макросы отключены по политике безопасности компании, можно использовать комбинацию стандартных функций Excel: ТЕКСТ(), ПОИСКПОЗ() и ВПР(). Этот метод требует предварительной настройки таблицы соответствия чисел и их текстовых эквивалентов, но работает без VBA.

Пример реализации для чисел до 999:

  1. Создайте на листе таблицу с числами от 0 до 999 и их текстовыми аналогами (например, в диапазоне D1:E1000).
  2. В ячейке с результатом используйте формулу:
    =ВПР(ЦЕЛОЕ(A1); D1:E1000; 2; ЛОЖЬ) & " руб. " & ТЕКСТ(ОСТАТ(A1;1)*100; "00") & " коп."

Недостатки метода:

  • 📉 Ограничение на диапазон чисел — для обработки сумм свыше 999 потребуется расширять таблицу вручную.
  • 📉 Нет склонения валют — результат будет выглядеть как "1 руб. 00 коп." вместо "1 рубль 00 копеек".
  • 📉 Чувствительность к форматированию — если ячейка A1 отформатирована как текст, формула вернёт ошибку.

1. Перейдите на вкладку Данные → Получить данные → Из других источников → Пустой запрос.

2. В редакторе введите код на языке M для генерации чисел от 0 до 999.

3. Добавьте столбец с текстовыми эквивалентами через функцию Number.ToText() (потребуется доработка для русского языка).

-->

5. Обработка больших чисел: миллионы и миллиарды

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

' Добавляем в начало функции SumProp()

Dim Millions As Variant, Thousands As Variant

Millions = Array("", "миллион", "миллиона", "миллионов")

Thousands = Array("", "тысяча", "тысячи", "тысяч")

Алгоритм обработки:

  1. Разбиваем число на части по 3 цифры (например, 12 345 678 → 12, 345, 678).
  2. Для каждой части применяем функцию ConvertLessThanOneThousand.
  3. Добавляем соответствующий разряд ("тысяч", "миллионов") с правильным склонением.

Пример результата для числа 1 234 567,89:

"Один миллион двести тридцать четыре тысячи пятьсот шестьдесят семь рублей 89 копеек"
Пример полного кода для миллионов

Function SumPropExtended(MyNumber As Currency) As String

' ... (код из раздела 2)

' Добавляем обработку миллионов

If MyNumber >= 1000000 Then

SumPropExtended = ConvertLessThanOneThousand(Int(MyNumber / 1000000)) & " " & _

ChooseCase(Millions, Int(MyNumber / 1000000) Mod 100) & " "

MyNumber = MyNumber Mod 1000000

End If

' Добавляем обработку тысяч

If MyNumber >= 1000 Then

SumPropExtended = SumPropExtended & ConvertLessThanOneThousand(Int(MyNumber / 1000)) & " " & _

ChooseCase(Thousands, Int(MyNumber / 1000) Mod 100) & " "

MyNumber = MyNumber Mod 1000

End If

' Добавляем обработку рублей и копеек

SumPropExtended = SumPropExtended & ConvertLessThanOneThousand(MyNumber) & " рублей " & _

Format(MyNumber - Int(MyNumber), "00") & " копеек"

End Function

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

При преобразовании чисел в текстовые суммы пользователи часто сталкиваются с следующими проблемами:

Ошибка Причина Решение
#ИМЯ? Опечатка в названии функции или отсутствует модуль VBA. Проверьте регистр букв в =SumProp и убедитесь, что макрос сохранён.
Неправильное склонение ("1 рублей") Ошибка в логике функции ChooseCase. Добавьте исключения для чисел 11–19 (они всегда используют форму "рублей").
Отображается "0 рублей 00 копеек" Ячейка содержит текст или пустое значение. Используйте =ЕЧИСЛО(A1) для проверки перед преобразованием.
Медленная работа с большими диапазонами VBA-функции пересчитываются при каждом изменении листа. Отключите автоматический пересчёт: Формулы → Параметры вычислений → Вручную.

Для диагностики ошибок используйте пошаговое выполнение кода в редакторе VBA:

  1. Откройте модуль с функцией SumProp.
  2. Установите курсор на первую строку и нажмите F8 для пошагового выполнения.
  3. Проверьте значения переменных в окне Locals (открывается через View → Locals Window).

=VBA-макросы

=Готовые надстройки

=Стандартные функции Excel (БАС, ТЕКСТ)

=Ручной ввод

-->

7. Альтернативные решения: онлайн-сервисы и Power Query

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

Для автоматизации в Excel 2016+ подходит Power Query:

  1. Импортируйте данные в Power Query через Данные → Получить данные → Из таблицы/диапазона.
  2. Добавьте пользовательский столбец с формулой на языке M:
    = Number.ToText([Column1], "ru-RU") & " руб."

    (потребуется доработка для копеек).

  3. Загрузите результат обратно в Excel.
⚠️ Внимание: Онлайн-сервисы не гарантируют конфиденциальность данных. Не вводите суммы, содержащие персональную или коммерческую тайну.

1. Использовать VBA-функции с проверкой на ошибки.

2. Сверять результат с ручным вводом для сумм свыше 10 млн рублей.

3. Сохранять файл в формате .xlsm с паролем для защиты макросов.

-->

FAQ: Частые вопросы

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

Да, но с ограничениями. Варианты:

  • Использовать комбинацию функций ВПР() + таблицу соответствия (подходит для чисел до 999).
  • Установить надстройку (например, NumToText), которая не требует написания кода.
  • Экспортировать данные в Word и использовать там поле {= {SUM} \* CardText}.

Для сумм свыше 999 999 без VBA обойтись невозможно.

Почему функция возвращает "#ЗНАЧ!"?

Ошибка #ЗНАЧ! возникает в трёх случаях:

  1. Ячейка содержит текст вместо числа (проверьте формат через Формат ячеек → Числовой).
  2. В коде VBA отсутствует обработка дробных чисел (добавьте Round(MyNumber, 2)).
  3. Конфликт имён функций (убедитесь, что название SumProp уникально для книги).

Для диагностики используйте =ТИП(A1) — если результат не равен 1, ячейка не является числом.

Как прописать сумму в долларах или евро?

В VBA-функции SumProp замените массивы склонения:

Dollars = Array("dollar", "dollars", "dollars")

Euros = Array("euro", "euros", "euros")

И вызовите функцию с указанием валюты:

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

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

Можно ли автоматизировать заполнение платёжных поручений?

Да, для этого:

  1. Создайте шаблон платёжного поручения в Excel с полями для суммы.
  2. Добавьте VBA-функцию SumProp для автоматического заполнения прописью.
  3. Используйте Worksheet_Change для обновления текста при изменении числового значения:
    Private Sub Worksheet_Change(ByVal Target As Range)
    

    If Not Intersect(Target, Range("B2")) Is Nothing Then

    Range("B3").Value = SumProp(Range("B2").Value)

    End If

    End Sub

    где B2 — ячейка с числовой суммой, а B3 — с текстовым эквивалентом.

Для защиты от случайных изменений заблокируйте ячейки с формулами через Рецензирование → Защитить лист.

Как проверить правильность склонения для больших чисел?

Тестируйте функцию на контрольных значениях:

Число Ожидаемый результат
1 001 "Одна тысяча один рубль 00 копеек"
1 011 "Одна тысяча одиннадцать рублей 00 копеек"
1 021 "Одна тысяча двадцать один рубль 00 копеек"
1 111 "Одна тысяча сто одиннадцать рублей 00 копеек"

Обратите внимание на склонение слов "тысяча" и "миллион" — они должны согласовываться с числительным в роде и падеже.