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

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

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

Особое внимание уделим нюансам, которые часто упускают из виду: корректное склонение рублей/долларов/евро, обработка отрицательных чисел, округление копеек и центов. Все примеры протестированы в Excel 2019 и Office 365, но большинство методов работают и в более ранних версиях (начиная с 2010 года).

1. Способ: Использование функции БАТЕКСТ (для английского языка)

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

Формат функции прост:

=БАТЕКСТ(число; [формат_числа])

Где [формат_числа] — необязательный аргумент, определяющий количество знаков после запятой (по умолчанию — 2).

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

  • 💰 =БАТЕКСТ(1234,56) → вернёт "One thousand two hundred thirty-four baht and fifty-six satang"
  • 📊 =БАТЕКСТ(1000;0) → вернёт "One thousand baht exactly" (без копеек)
⚠️ Внимание: Функция БАТЕКСТ не поддерживает русскоязычный вывод. Для работы с рублями и копейками потребуются другие методы, описанные ниже.

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

2. Способ: Формула из вложенных функций (без VBA)

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

Пример формулы для ячейки A1 с числом 1234:

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

ТЕКСТ(ЦЕЛОЕ(A1/1000000);"[>=1000000]0 ""миллионов "";0") &

ЕСЛИ(ОСТАТ(A1;1000000)>=100000;

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;1000000)/1000);"0 ""сот """) &

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;100000)/1000);"0 ""тысяч """);

ЕСЛИ(ОСТАТ(A1;100000)>=1000;

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;100000)/1000);"0 ""тысяч """);

""

)

) &

ЕСЛИ(ОСТАТ(A1;1000)>=100;

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;1000)/100);"0 ""сот """);

""

) &

ЕСЛИ(ОСТАТ(A1;100)>=20;

ТЕКСТ(ЦЕЛОЕ(ОСТАТ(A1;100)/10);"0 ""десят """) &

ТЕКСТ(ОСТАТ(A1;10);"0 """);

ЕСЛИ(ОСТАТ(A1;100)>=10;

ТЕКСТ(ОСТАТ(A1;20);"[=10]""десять "";

"[=11]""одиннадцать "";

"[=12]""двенадцать "";

"[=13]""тринадцать "";

"[=14]""четырнадцать "";

"[=15]""пятнадцать "";

"[=16]""шестнадцать "";

"[=17]""семнадцать "";

"[=18]""восемнадцать "";

"[=19]""девятнадцать """) &

ЕСЛИ(ОСТАТ(A1;10)>0;ТЕКСТ(ОСТАТ(A1;10);"0 """);"");

ТЕКСТ(ОСТАТ(A1;10);"[=1]""один "";

"[=2]""два "";

"[=3]""три "";

"[=4]""четыре "";

"[=5]""пять "";

"[=6]""шесть "";

"[=7]""семь "";

"[=8]""восемь "";

"[=9]""девять """)

)

) &

"рубль" &

ЕСЛИ(И(ОСТАТ(A1;100)>10;ОСТАТ(A1;100)<20);"ей";

ЕСЛИ(ОСТАТ(A1;10)=1;"ь";

ЕСЛИ(ОСТАТ(A1;10)>=2;ОСТАТ(A1;10)<=4;"ля";"ей")

)

)

)

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

📊 Какой способ преобразования чисел в текст вы используете чаще?
Ручной ввод
Стандартные функции Excel
Пользовательские VBA-функции
Сторонние надстройки

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

Для полноценной работы с рублями, копейками, отрицательными числами и правильным склонением лучше всего подходит пользовательская функция на VBA. Этот метод требует однократной настройки, но затем позволяет использовать простую формулу вида =СуммаПрописью(A1).

Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и скопируйте туда следующий код:

Function СуммаПрописью(ByVal MyNumber As Currency) As String

Dim RUB As String, Kop As String, Temp As String

Dim DecimalPlace As Integer, Count As Integer

Dim Place(9) As String

Dim i As Integer

Place(2) = " тысячи "

Place(3) = " миллиона "

Place(4) = " миллиарда "

Place(5) = " триллиона "

MyNumber = Round(MyNumber, 2)

RUB = Trim(Str(MyNumber))

DecimalPlace = InStr(RUB, ".")

If DecimalPlace > 0 Then

Kop = GetTens(Left(Mid(RUB, DecimalPlace + 1) & "00", 2))

RUB = Trim(Left(RUB, DecimalPlace - 1))

End If

Count = 1

Do While RUB <> ""

Temp = GetHundreds(Right(RUB, 3))

If Temp <> "" Then

RUB = Temp & Place(Count) & RUB

End If

If Len(RUB) > 3 Then

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

Else

RUB = ""

End If

Count = Count + 1

Loop

Select Case Kop

Case ""

Kop = "00"

Case "один"

Kop = "одна"

Case "два"

Kop = "две"

End Select

Select Case Right(RUB, 5)

Case "один "

RUB = RUB & "рубль"

Case "два ", "три ", "четыре "

RUB = RUB & "рубля"

Case Else

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

End Select

СуммаПрописью = Application.WorksheetFunction.Trim(RUB & " " & Kop & " копеек")

End Function

Function GetHundreds(ByVal MyNumber As String) As String

Dim Result As String

If Val(MyNumber) = 0 Then Exit Function

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

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

Result = GetDigit(Mid(MyNumber, 1, 1)) & "сот "

End If

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

Result = Result & GetTens(Mid(MyNumber, 2))

Else

Result = Result & GetDigit(Mid(MyNumber, 3))

End If

GetHundreds = Result

End Function

Function GetTens(TensText As String) As String

Dim Result As String

Result = ""

If Val(Left(TensText, 1)) = 1 Then

Select Case Val(TensText)

Case 10: Result = "десять"

Case 11: Result = "одиннадцать"

Case 12: Result = "двенадцать"

Case 13: Result = "тринадцать"

Case 14: Result = "четырнадцать"

Case 15: Result = "пятнадцать"

Case 16: Result = "шестнадцать"

Case 17: Result = "семнадцать"

Case 18: Result = "восемнадцать"

Case 19: Result = "девятнадцать"

End Select

Else

Select Case Val(Left(TensText, 1))

Case 2: Result = "двадцать "

Case 3: Result = "тридцать "

Case 4: Result = "сорок "

Case 5: Result = "пятьдесят "

Case 6: Result = "шестьдесят "

Case 7: Result = "семьдесят "

Case 8: Result = "восемьдесят "

Case 9: Result = "девяносто "

End Select

Result = Result & GetDigit(Right(TensText, 1))

End If

GetTens = Result

End Function

Function GetDigit(Digit As String) As String

Select Case Val(Digit)

Case 1: GetDigit = "один "

Case 2: GetDigit = "два "

Case 3: GetDigit = "три "

Case 4: GetDigit = "четыре "

Case 5: GetDigit = "пять "

Case 6: GetDigit = "шесть "

Case 7: GetDigit = "семь "

Case 8: GetDigit = "восемь "

Case 9: GetDigit = "девять "

Case Else: GetDigit = ""

End Select

End Function

После вставки кода сохраните файл как книгу Excel с поддержкой макросов (.xlsm). Теперь в любой ячейке можно использовать формулу:

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

Эта функция автоматически:

  • 🔢 Округляет сумму до копеек
  • 💱 Корректно склоняет "рубль/рубля/рублей"
  • 📉 Обрабатывает отрицательные числа (добавляет "минус")
  • 🔄 Работает с суммами до 999 триллионов

Создать резервную копию файла Excel|

Открыть редактор VBA (Alt+F11)|

Добавить новый модуль (Insert → Module)|

Скопировать код функции СуммаПрописью|

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

4. Способ: Сторонние надстройки (для не программистов)

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

Надстройка Особенности Стоимость Ссылка
NumToText Поддерживает 15 языков, включая русский. Работает с валютами и датами. Бесплатно Скачать
Русский текст Специализирована на русском языке, корректное склонение валют. 1 200 ₽ Сайт
Kutools for Excel Входит в пакет из 300 инструментов, включает Numbers to Words. $39/год Официальный сайт
Альт-Инвест Прим Российская надстройка для финансового анализа с функцией прописи. От 5 000 ₽ Подробнее

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

  • 🔧 Не требуют знания VBA
  • 🌍 Поддерживают несколько языков
  • 📅 Регулярно обновляются
  • 🛡️ Протестированы на совместимость с последними версиями Excel
⚠️ Внимание: Перед установкой надстроек отключите защиту макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра... и добавьте папку с надстройкой в список доверия.

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

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

  • 🌐 NumToWord — поддерживает 30 валют, включая рубль
  • 💻 PlanetCalc — русскоязычный калькулятор с настройкой склонений
  • 📱 Text.ru — простой интерфейс, копирование результата в один клик

Как использовать:

  1. Перейдите на выбранный сервис
  2. Введите сумму в числовом формате
  3. Выберите валюту (рубли, доллары, евро)
  4. Скопируйте полученный текст прописью
  5. Вставьте результат в Excel как значение (Ctrl + V)

Минусы этого метода:

  • ❌ Не подходит для автоматической обработки больших таблиц
  • ❌ Требует ручного копирования для каждой суммы
  • ❌ Риск утечки конфиденциальных данных при работе с финансовыми документами

6. Способ: Power Query (для опытных пользователей)

Для пользователей Excel 2016 и новее доступен мощный инструмент Power Query, который можно использовать для преобразования чисел в текст. Этот метод подходит для обработки больших массивов данных.

Алгоритм действий:

  1. Выделите исходные данные с суммами
  2. Перейдите на вкладку ДанныеИз таблицы/диапазона
  3. В открывшемся редакторе Power Query добавьте пользовательский столбец:
    • Название столбца: СуммаПрописью
    • Формула:
      = Number.ToText([Сумма], "ru-RU") & " рублей"
  • Нажмите ОКЗакрыть и загрузить
  • Ограничения метода:

    • 🔢 Не поддерживает копейки (только целые рубли)
    • 📉 Не склоняет слово "рубль" правильно (всегда "рублей")
    • 🔄 Требует обновления запроса при изменении исходных данных

    Для устранения этих недостатков можно создать пользовательскую функцию в Power Query на языке M, но это требует более глубоких знаний.

    Сравнение методов: какой выбрать?

    Выбор оптимального способа зависит от ваших задач и уровня подготовки:

    Метод Сложность Автоматизация Поддержка копеек Склонение валют Когда использовать
    Вложенные функции Средняя Да Нет Частично Для простых задач без копеек
    VBA-функция Высокая (однократно) Да Да Полное Для регулярного использования
    Сторонние надстройки Низкая Да Да Полное Для пользователей без навыков VBA
    Онлайн-конвертеры Низкая Нет Да Полное Для разовых задач
    Power Query Высокая Да Нет Частично Для обработки больших массивов

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

    FAQ: Частые вопросы по преобразованию сумм в текст

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

    Да, можно использовать комбинацию вложенных функций ЕСЛИ, ТЕКСТ и ОСТАТ, как показано в втором способе. Однако такое решение не поддерживает копейки и имеет ограничение по максимальной сумме (обычно до 999 999 рублей). Для полноценной работы без VBA лучше использовать сторонние надстройки.

    Почему моя VBA-функция возвращает ошибку #ИМЯ?

    Ошибка #ИМЯ! появляется в трёх случаях:

    1. Файл не сохранён как .xlsm (с поддержкой макросов)
    2. В коде функции есть синтаксические ошибки (проверьте регистр букв — Function должно быть с большой буквы)
    3. Макросы отключены в настройках безопасности Excel (Файл → Параметры → Центр управления безопасностью)

    Решение: сохраните файл в правильном формате, проверьте код и включите макросы.

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

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

    1. Замените в коде слово "рубль/рубля/рублей" на "доллар/доллара/долларов" или "евро" (у евро нет склонений)
    2. Для центов измените логику в функции GetTens (аналогично копейкам)

    Пример для долларов:

    СуммаПрописью = Application.WorksheetFunction.Trim(RUB & " долларов и " & Kop & " центов")

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

    Да, VBA-функция из третьего способа автоматически обрабатывает отрицательные числа, добавляя слово "минус". Например, для значения -123,45 она вернёт:

    "минус сто двадцать три рубля сорок пять копеек"

    Если используете вложенные функции (без VBA), добавьте проверку на знак:

    =ЕСЛИ(A1<0; "минус " & ФормулаПрописью(ABS(A1)); ФормулаПрописью(A1))

    Как обновить суммы прописью при изменении исходных данных?

    Способ обновления зависит от метода:

    • VBA/Формулы: Обновляются автоматически при изменении исходных ячеек
    • Power Query: Нажмите Данные → Обновить все или настройте автоматическое обновление при открытии файла
    • Надстройки: Обычно обновляются автоматически, но некоторые требуют ручного пересчёта (F9)

    Для больших таблиц с VBA рекомендуется отключить автоматический пересчёт (Формулы → Параметры вычислений → Вручную) и обновлять данные по кнопке.