Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач при работе с финансовыми документами в 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.
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 — простой интерфейс, копирование результата в один клик
Как использовать:
- Перейдите на выбранный сервис
- Введите сумму в числовом формате
- Выберите валюту (рубли, доллары, евро)
- Скопируйте полученный текст прописью
- Вставьте результат в Excel как значение (
Ctrl + V)
Минусы этого метода:
- ❌ Не подходит для автоматической обработки больших таблиц
- ❌ Требует ручного копирования для каждой суммы
- ❌ Риск утечки конфиденциальных данных при работе с финансовыми документами
6. Способ: Power Query (для опытных пользователей)
Для пользователей Excel 2016 и новее доступен мощный инструмент Power Query, который можно использовать для преобразования чисел в текст. Этот метод подходит для обработки больших массивов данных.
Алгоритм действий:
- Выделите исходные данные с суммами
- Перейдите на вкладку
Данные→Из таблицы/диапазона - В открывшемся редакторе Power Query добавьте пользовательский столбец:
- Название столбца:
СуммаПрописью - Формула:
= Number.ToText([Сумма], "ru-RU") & " рублей"
ОК → Закрыть и загрузитьОграничения метода:
- 🔢 Не поддерживает копейки (только целые рубли)
- 📉 Не склоняет слово "рубль" правильно (всегда "рублей")
- 🔄 Требует обновления запроса при изменении исходных данных
Для устранения этих недостатков можно создать пользовательскую функцию в Power Query на языке M, но это требует более глубоких знаний.
Сравнение методов: какой выбрать?
Выбор оптимального способа зависит от ваших задач и уровня подготовки:
| Метод | Сложность | Автоматизация | Поддержка копеек | Склонение валют | Когда использовать |
|---|---|---|---|---|---|
| Вложенные функции | Средняя | Да | Нет | Частично | Для простых задач без копеек |
| VBA-функция | Высокая (однократно) | Да | Да | Полное | Для регулярного использования |
| Сторонние надстройки | Низкая | Да | Да | Полное | Для пользователей без навыков VBA |
| Онлайн-конвертеры | Низкая | Нет | Да | Полное | Для разовых задач |
| Power Query | Высокая | Да | Нет | Частично | Для обработки больших массивов |
Для большинства пользователей оптимальным решением будет VBA-функция — она требует однократной настройки, но затем работает автоматически и поддерживает все необходимые функции. Если VBA недоступен (например, в корпоративной политике безопасности), лучшей альтернативой станут сторонние надстройки.
FAQ: Частые вопросы по преобразованию сумм в текст
Можно ли преобразовать сумму прописью без VBA?
Да, можно использовать комбинацию вложенных функций ЕСЛИ, ТЕКСТ и ОСТАТ, как показано в втором способе. Однако такое решение не поддерживает копейки и имеет ограничение по максимальной сумме (обычно до 999 999 рублей). Для полноценной работы без VBA лучше использовать сторонние надстройки.
Почему моя VBA-функция возвращает ошибку #ИМЯ?
Ошибка #ИМЯ! появляется в трёх случаях:
- Файл не сохранён как
.xlsm(с поддержкой макросов) - В коде функции есть синтаксические ошибки (проверьте регистр букв —
Functionдолжно быть с большой буквы) - Макросы отключены в настройках безопасности Excel (
Файл → Параметры → Центр управления безопасностью)
Решение: сохраните файл в правильном формате, проверьте код и включите макросы.
Как преобразовать сумму в долларах или евро?
Для иностранных валют нужно модифицировать VBA-функцию:
- Замените в коде слово "рубль/рубля/рублей" на "доллар/доллара/долларов" или "евро" (у евро нет склонений)
- Для центов измените логику в функции
GetTens(аналогично копейкам)
Пример для долларов:
СуммаПрописью = Application.WorksheetFunction.Trim(RUB & " долларов и " & Kop & " центов")
Можно ли преобразовать отрицательные суммы?
Да, VBA-функция из третьего способа автоматически обрабатывает отрицательные числа, добавляя слово "минус". Например, для значения -123,45 она вернёт:
"минус сто двадцать три рубля сорок пять копеек"
Если используете вложенные функции (без VBA), добавьте проверку на знак:
=ЕСЛИ(A1<0; "минус " & ФормулаПрописью(ABS(A1)); ФормулаПрописью(A1))
Как обновить суммы прописью при изменении исходных данных?
Способ обновления зависит от метода:
- VBA/Формулы: Обновляются автоматически при изменении исходных ячеек
- Power Query: Нажмите
Данные → Обновить всеили настройте автоматическое обновление при открытии файла - Надстройки: Обычно обновляются автоматически, но некоторые требуют ручного пересчёта (
F9)
Для больших таблиц с VBA рекомендуется отключить автоматический пересчёт (Формулы → Параметры вычислений → Вручную) и обновлять данные по кнопке.