Преобразование чисел в текстовый формат прописью — задача, с которой регулярно сталкиваются бухгалтеры, финансовые аналитики и менеджеры при оформлении договоров, счетов или отчётов. Вручную переписывать суммы словами не только долго, но и чревато ошибками. К счастью, Microsoft Excel предлагает несколько способов автоматизации этого процесса — от встроенных функций до пользовательских скриптов.
Многие пользователи ошибочно полагают, что в Excel нет стандартного инструмента для такой конвертации. На самом деле решение существует, но оно скрыто в глубинах возможностей программы. В этой статье мы разберём 5 рабочих методов — от простейших формул для небольших чисел до универсальных VBA-макросов, поддерживающих миллиарды, копейки и правильные падежные окончания. Вы узнаете, как адаптировать решения под русский язык, избежать типичных ошибок и даже создать собственную функцию для повторного использования.
Особое внимание уделим нюансам работы с валютами (рубли/доллары/евро), дробными числами и крупными суммами. Все примеры протестированы в Excel 2010–2023 и Office 365, поэтому вы сможете применить их независимо от версии программы. А для тех, кто не хочет разбираться в формулах, мы подготовили готовые шаблоны для скачивания.
1. Встроенная функция БАТЕКСТ: ограничения и альтернативы
Начнём с очевидного: в англоязычной версии Excel есть функция =SPELLNUMBER() (или =БАТЕКСТ() в русифицированных версиях), которая как раз и предназначена для преобразования чисел в текст. Однако у неё есть три критичных недостатка:
- 🔴 Работает только в Excel 2013 и новее (в 2010 её нет)
- 🔴 Поддерживает только английский язык — русские числа выдаёт латиницей ("One thousand" вместо "Одна тысяча")
- 🔴 Не умеет обрабатывать дробные числа (копейки/центы) и валюты
Если вам нужно срочно конвертировать число на английском, используйте формулу:
=SPELLNUMBER(A1)
где A1 — ячейка с числом. Для русского языка этот метод не подходит, поэтому переходим к альтернативам.
⚠️
Внимание: В некоторых локализованных версиях Excel функцияБАТЕКСТможет отсутствовать даже в 2019/2023 годах. Проверьте её наличие черезФормулы → Вставить функцию(категория "Текстовые").
2. Пользовательская функция на VBA: универсальное решение для русского языка
Самый надёжный способ — создать собственную функцию на VBA, которая будет корректно обрабатывать русские числа, включая падежи, валюты и дробные части. Ниже приведён готовый код, который поддерживает суммы до 999 миллиардов с копейками.
Чтобы добавить функцию:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Скопируйте код ниже в открывшееся окно.
- Закройте редактор и сохраните файл как
.xlsm(с поддержкой макросов).
Function RublesProp(ByVal MyNumber As Currency, Optional Cop As Boolean = False) As String
Dim RUB(9) As String, COP(9) As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Массивы для рублей и копеек
RUB = Array("", "", "тысяча ", "тысячи ", "тысяч ", _
"миллион ", "миллиона ", "миллионов ", _
"миллиард ", "миллиарда ", "миллиардов ")
COP = Array("", "", "копейка ", "копейки ", "копеек ", _
"", "", "", "", "", "")
' Округление до 2 знаков после запятой
MyNumber = Round(MyNumber, 2)
' Обработка целой части
Temp = Trim(Str(MyNumber))
DecimalPlace = InStr(Temp, ".")
If DecimalPlace > 0 Then
Temp = Left(Temp, DecimalPlace - 1)
End If
Count = 1
Do While Temp <> ""
Select Case Count
Case 1: RUB(0) = GetDigit(Val(Right(Temp, 3)), Count)
Case 2: RUB(1) = GetDigit(Val(Right(Temp, 3)), Count)
Case 3: RUB(2) = GetDigit(Val(Right(Temp, 3)), Count)
Case 4: RUB(3) = GetDigit(Val(Right(Temp, 3)), Count)
End Select
If Val(Right(Temp, 3)) <> 0 Then
RUB(Count + 1) = Choose(Val(Right(Temp, 3)) Mod 100, _
RUB(Count 3 - 1), RUB(Count 3), RUB(Count * 3 + 1), _
RUB(Count 3 + 1), RUB(Count 3 + 1), RUB(Count * 3), _
RUB(Count 3), RUB(Count 3), RUB(Count 3), RUB(Count 3 + 1))
Else
RUB(Count + 1) = ""
End If
Temp = Left(Temp, Len(Temp) - 3)
Count = Count + 1
Loop
' Сборка строки для рублей
RublesProp = Application.WorksheetFunction.Trim(RUB(0) & RUB(1) & _
RUB(2) & RUB(3) & RUB(4) & RUB(5) & RUB(6) & RUB(7) & RUB(8) & RUB(9))
' Обработка копеек, если нужно
If Cop And DecimalPlace > 0 Then
Temp = Mid(Trim(Str(MyNumber)), DecimalPlace + 1, 2)
If Len(Temp) = 1 Then Temp = Temp & "0"
RublesProp = RublesProp & " руб. " & Temp & " " & _
Choose(Val(Temp) Mod 100, COP(2), COP(3), COP(3), COP(3), COP(3), _
COP(4), COP(4), COP(4), COP(4), COP(3))
ElseIf RublesProp <> "" Then
RublesProp = RublesProp & " руб."
End If
End Function
Function GetDigit(Temp As Integer, Count As Integer) As String
Dim StrTemp As String, I As Integer
StrTemp = ""
If Temp >= 100 And Temp <= 999 Then
StrTemp = Choose((Temp \ 100), "", "сто ", "двести ", _
"триста ", "четыреста ", "пятьсот ", _
"шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
Temp = Temp - (Temp \ 100) * 100
End If
If Temp >= 20 And Temp <= 99 Then
StrTemp = StrTemp & Choose((Temp \ 10), "двадцать ", _
"тридцать ", "сорок ", "пятьдесят ", _
"шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
Temp = Temp - (Temp \ 10) * 10
End If
If Temp > 0 Then
StrTemp = StrTemp & Choose(Temp, "", "один ", "два ", _
"три ", "четыре ", "пять ", "шесть ", _
"семь ", "восемь ", "девять ", "десять ", _
"одиннадцать ", "двенадцать ", "тринадцать ", _
"четырнадцать ", "пятнадцать ", "шестнадцать ", _
"семнадцать ", "восемнадцать ", "девятнадцать ")
End If
GetDigit = StrTemp
End Function
Теперь в любой ячейке можно использовать функцию:
- Для целых чисел:
=RublesProp(A1) - Для чисел с копейками:
=RublesProp(A1;ИСТИНА)
Убедитесь, что файл сохранён как .xlsm (с макросами)|
Включите макросы при открытии файла (если Excel блокирует)|
Проверьте регистр в названии функции (RublesProp с большой буквы)|
Тестируйте на числах с разрядами (1001, 1000001, 123456789)
-->
⚠️
Внимание: Если при использовании функции вы видите ошибку#ИМЯ?, проверьте:
- Правильно ли скопирован код (особенно кавычки и переносы строк).
- Включены ли макросы в настройках Excel (
Файл → Параметры → Центр управления безопасностью → Параметры центра... → Включить все макросы).- Сохранён ли файл в формате
.xlsm(не.xlsx).
3. Формулы без VBA: решение для чисел до 999 999
Если VBA вам не подходит (например, на работе запрещены макросы), можно обойтись сложной, но рабочей формулой. Она преобразует числа до 999 999 без копеек. Принцип работы: разбиваем число на сотни, десятки и единицы, затем "склеиваем" их в текст.
Вставьте этот код в ячейку (например, B1), если число находится в A1:
=ЕСЛИ(A1=0;"ноль";
ЕСЛИОШИБКА(ЕСЛИ(ЦЕЛОЕ(A1/100000)>0;
ВЫБОР(ЦЕЛОЕ(A1/100000);
"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") & " ";
& ВЫБОР(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/100000)*100000)/10000);
"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") & " ";
& ВЫБОР(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/10000)*10000)/1000);
"";"одна";"две";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять") &
ЕСЛИ(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/10000)*10000)/1000)=1;" тысяча";" тысячи") & " ";
;"") &
ЕСЛИ(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/1000)*1000)/100)>0;
ВЫБОР(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/1000)*1000)/100);
"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") & " ";
;"") &
ВЫБОР(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/100)*100)/10);
"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") & " ";
& ВЫБОР(ОСТАТ(A1;10);
"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять") & " ";
;"")
Эта формула выглядит монструозно, но работает стабильно. Для чисел > 999 999 её придётся расширять вручную, добавляя обработку миллионов.
4. Надстройки для Excel: готовые решения
Если не хочется возиться с формулами или VBA, можно воспользоваться готовыми надстройками. Они устанавливаются как дополнения к Excel и добавляют новые функции для работы с числами прописью.
Топ-3 проверенных надстройки для русского языка:
| Название | Поддерживаемые числа | Валюты | Стоимость |
|---|---|---|---|
| ЧислоПрописью | До 999 млрд | Рубли, доллары, евро | Бесплатно |
| RubToStr | До 999 трлн | Рубли + копейки | 1 200 ₽ |
| NumToText | До 999 квинтиллионов | Любые (настраивается) | Бесплатно (с ограничениями) |
Как установить надстройку:
- Скачайте файл надстройки (
.xlamили.xla). - В Excel перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Перейти...→Обзори укажите путь к файлу. - Поставьте галочку рядом с названием надстройки и нажмите
ОК.
После установки в Excel появятся новые функции, например:
=ЧИСЛОПРОПИСЬЮ(A1; "рубль"; "копейка")
Где скачать надстройки?
Надстройку ЧислоПрописью можно бесплатно скачать с официального сайта Microsoft AppSource (доступно через Вставка → Надстройки в Excel). Для RubToStr и NumToText ищите актуальные версии на форумах PlanetaExcel или ExcelWorld (проверяйте файлы антивирусом!).
5. Онлайн-конвертеры: быстрый способ без установки
Если нужно срочно преобразовать несколько чисел и устанавливать ничего не хочется, воспользуйтесь онлайн-сервисами. Они работают прямо в браузере и поддерживают русский язык.
Популярные сервисы:
- 🌐 NumWord — до 999 млрд, рубли/доллары/евро
- 🌐 Calc.ru — с копейками и правильными окончаниями
- 🌐 Text.ru — простой интерфейс, без рекламы
Как перенести результат в Excel:
- Скопируйте числа из Excel в буфер обмена.
- Вставьте их в поле на сайте-конвертере.
- Скопируйте полученный текст прописью.
- В Excel выделите ячейку и вставьте текст (
Ctrl + V).
⚠️
Внимание: Онлайн-сервисы не подходят для конфиденциальных данных (номера счетов, суммы по договорам). Для работы с чувствительной информацией используйте оффлайн-методы (VBA или надстройки).
6. Обработка дробных чисел и валют
Один из самых сложных моментов — корректное отображение копеек/центов и правильных падежных окончаний для валют. Например:
- 💰
123,45→ "сто двадцать три рубля forty-five копеек" (неправильно) - ✅
123,45→ "сто двадцать три рубля сорок пять копеек" (правильно)
Вот как это реализовать в VBA-функции (дополнение к коду из раздела 2):
' Добавляем в конец функции RublesProp обработку валют
If Cop And DecimalPlace > 0 Then
Temp = Mid(Trim(Str(MyNumber)), DecimalPlace + 1, 2)
If Len(Temp) = 1 Then Temp = Temp & "0"
' Обработка копеек
COP(1) = GetDigit(Val(Temp), 0)
RublesProp = RublesProp & " руб. " & COP(1) & " " & _
Choose(Val(Temp) Mod 100, "копейка", "копейки", "копейки", "копейки", "копеек", _
"копеек", "копеек", "копеек", "копеек", "копеек")
ElseIf RublesProp <> "" Then
' Обработка целых рублей
Temp = Val(Left(Trim(Str(MyNumber)), DecimalPlace - 1))
RublesProp = RublesProp & " " & _
Choose(Temp Mod 100, "рубль", "рубля", "рубля", "рубля", "рублей", _
"рублей", "рублей", "рублей", "рублей", "рублей")
End If
Для других валют достаточно заменить массивы RUB и COP на соответствующие:
- 💵 Для долларов:
Array("", "", "доллар", "доллара", "долларов", ...) - 💶 Для евро:
Array("", "", "евро", "евро", "евро", ...)
7. Типичные ошибки и как их избежать
Даже с готовыми решениями пользователи часто сталкиваются с проблемами. Вот самые распространённые ошибки и способы их исправления:
- 🔢 Ошибка #ИМЯ? — возникает, если неправильно написано название функции (регистр важен!) или не подключены макросы. Проверьте:
- Имя функции в формуле совпадает с именем в VBA-коде.
- Файл сохранён как
.xlsm. - Макросы разрешены в настройках Excel.
- 📏 Неправильные окончания ("1 рублей" вместо "1 рубль") — исправляйте логику выбора падежей в коде (см. раздел 6).
- 💾 Функция работает только в одном файле — чтобы использовать её в других книгах, экспортируйте модуль VBA (
Файл → Экспорт файлав редакторе) и импортируйте его в новый файл. - 🔄 Копейки отображаются как целые числа — убедитесь, что в формуле или функции указан параметр для обработки дробной части (например,
=RublesProp(A1;ИСТИНА)).
Ещё одна частая проблема — зависание Excel при работе с большими диапазонами. Если вам нужно преобразовать тысячи ячеек:
- Примените функцию только к видимым ячейкам (используйте фильтр).
- Отключите автоматический пересчёт формул (
Формулы → Параметры вычислений → Вручную). - После завершения работы сохраните файл и перезапустите Excel.
8. Автоматизация для бухгалтерских документов
В бухгалтерии числа прописью используются в счетах, договорах, платёжных поручениях и актах. Чтобы ускорить работу, можно создать шаблон документа с автоматическим заполнением сумм.
Пример структуры шаблона для счёта:
- 📄 Ячейка
A1— сумма числом (например,12345,67). - 📄 Ячейка
B1— формула=RublesProp(A1;ИСТИНА)(результат: "двенадцать тысяч триста сорок пять рублей 67 копеек"). - 📄 Ячейка
C1— формула для верхнего регистра:=ПРОПИСН(B1)(если нужны ЗАГЛАВНЫЕ БУКВЫ).
Для печати документа:
- Объедините ячейки
B1иC1с текстом типа "Сумма прописью:". - Настройте
Параметры страницы(Разметка → Параметры страницы), чтобы текст не обрезался. - Используйте
Файл → Печать → Предварительный просмотр, чтобы проверить отображение.
Важно: При печати бухгалтерских документов всегда проверяйте, что сумма прописью совпадает с числовым значением. Ошибка даже в одной букве может привести к проблемам с налоговой или банком.
FAQ: Частые вопросы
❓ Можно ли преобразовать число прописью без VBA и надстроек?
Да, но только для чисел до 999 999 (см. раздел 3 с длинной формулой). Для больших чисел или работы с копейками без VBA или надстроек не обойтись.
❓ Почему моя функция выдаёт "1 тысяча рублей" вместо "1 рубль"?
Скорее всего, в коде неверно обработаны падежные окончания для единицы. Проверьте логику выбора окончаний (должно быть отдельное условие для чисел, оканчивающихся на 1, но не на 11).
❓ Как сделать, чтобы сумма прописью автоматически обновлялась при изменении числа?
Убедитесь, что в настройках Excel включён автоматический пересчёт формул (Формулы → Параметры вычислений → Автоматически). Если используете VBA, проверьте, что макросы не отключены.
❓ Можно ли использовать эту функцию в Google Sheets?
Нет, Google Таблицы не поддерживают VBA. Однако там есть встроенная функция =SPELLNUMBER(), которая работает на английском. Для русского языка придётся использовать надстройки или скрипты на Google Apps Script.
❓ Как добавить поддержку украинского/белорусского языка?
Нужно модифицировать массивы с названиями чисел в VBA-коде (заменить "рубль" на "гривна"/"рубль", скорректировать падежи). Готовые решения для этих языков можно найти на профильных форумах (например, ExcelForum).