Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач при работе с финансовыми документами в Microsoft Excel. Бухгалтерам, экономистам и менеджерам регулярно требуется оформлять счета, акты и договоры, где суммы указываются не только цифрами, но и словами. Например, вместо "1 256,78" нужно получить "Один тысяча двести пятьдесят шесть рублей 78 копеек".
Вручную переписывать каждое число — нерационально и чревато ошибками. К счастью, в Excel есть несколько способов автоматизировать этот процесс: от встроенных функций до пользовательских макросов. В этой статье мы разберём все актуальные методы — от самых простых до продвинутых, — а также покажем, как адаптировать расшифровку под разные валюты и форматы.
Если вы никогда не работали с формулами или VBA, не переживайте: мы дадим пошаговые инструкции с примерами для каждой версии Excel (включая Excel 2019, Excel 365 и онлайн-версию). А для опытных пользователей приготовили оптимизированные решения с учётом нюансов русского языка — например, правильного склонения слов "рубль", "доллар" или "евро" в зависимости от числа.
1. Способ 1: Использование встроенной функции БАТТЕКСТ (только для английского)
Начнём с самого простого — но, увы, не универсального метода. В Excel есть встроенная функция БАТТЕКСТ (англ. BAHTTEXT), которая преобразует числа в текст прописью. Однако она работает только для тайского языка и валюты бат. Для русского языка эта функция бесполезна, но её можно использовать как основу для создания пользовательской формулы.
Если вам вдруг понадобилось преобразовать сумму в батах, синтаксис будет таким:
=БАТТЕКСТ(1256,78)
Результат: "หนึ่งพันสองร้อยห้าสิบหกบาทและเจ็ดสิบแปดสตางค์" (1256 байт и 78 сатангов).
Для русского языка придётся идти другим путём. Но не расстраивайтесь: дальше мы покажем, как обойти это ограничение.
2. Способ 2: Пользовательская функция на VBA (универсальный метод)
Самый надёжный и гибкий способ — создать пользовательскую функцию (UDF) на языке VBA. Она будет работать в любой версии Excel и позволит настраивать формат вывода (рубли/доллары/евро, с копейками или без).
Вот пошаговая инструкция:
- Откройте редактор VBA: нажмите
Alt + F11или перейдите вРазработчик → Visual Basic(если вкладки нет, включите её вФайл → Параметры → Настройка ленты). - В окне редактора выберите
Insert → Module. - Скопируйте и вставьте следующий код:
Function SumProp(ByVal MyNumber As Currency, Optional MyCurrency As String = "руб") As StringDim Rubles As Variant, Kopecks As Variant, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Массивы для чисел
Dim Place(9) As String
Dim Digits(9) As String
Place = Array("", "", "тысяч", "миллион", "миллиард", "", "", "", "", "")
Digits = Array("ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
' Обработка копеек
DecimalPlace = InStr(1, MyNumber, ",")
If DecimalPlace > 0 Then
Temp = Mid(MyNumber, DecimalPlace + 1, 2)
Kopecks = Val(Temp)
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
' Обработка рублей
Count = 1
Do While MyNumber <> ""
Temp = Right(MyNumber, 3)
If Val(Temp) <> 0 Then
Rubles = ConvertLessThanOneThousand(Temp, MyCurrency) & " " & Place(Count) & " " & Rubles
End If
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop
' Сборка результата
Select Case MyCurrency
Case "руб": MyCurrency = "рубль"
Case "долл": MyCurrency = "доллар"
Case "евро": MyCurrency = "евро"
End Select
SumProp = Application.WorksheetFunction.Trim(Rubles & " " & MyCurrency)
' Добавление копеек
If Not IsEmpty(Kopecks) Then
SumProp = SumProp & " " & Kopecks & " копеек"
End If
End Function
Function ConvertLessThanOneThousand(ByVal MyNumber, Currency As String)
Dim Result As String
Dim Hundreds As Integer, Tens As Integer, Ones As Integer
Dim Temp As String
MyNumber = Right("000" & MyNumber, 3)
Hundreds = Val(Left(MyNumber, 1))
Tens = Val(Mid(MyNumber, 2, 1))
Ones = Val(Right(MyNumber, 1))
' Обработка сотен
If Hundreds <> 0 Then
Temp = Choose(Hundreds, "", "сто", "двести", "триста", "четыреста", _
"пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
Result = Temp & " "
End If
' Обработка десятков и единиц
If Tens = 1 Then
Temp = Choose(Ones, "десять", "одиннадцать", "двенадцать", "тринадцать", _
"четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", _
"восемнадцать", "девятнадцать")
Result = Result & Temp
Else
Temp = Choose(Tens, "", "", "двадцать", "тридцать", "сорок", _
"пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Result = Result & Temp & " "
Temp = Choose(Ones, "", "один", "два", "три", "четыре", "пять", _
"шесть", "семь", "восемь", "девять")
Result = Result & Temp
End If
' Согласование с валютой
If Currency = "руб" Then
If Ones = 1 And Tens <> 1 Then Result = Result & " рубль"
If Ones > 1 And Ones < 5 And Tens <> 1 Then Result = Result & " рубля"
If (Ones > 4 Or Ones = 0 Or Tens = 1) Then Result = Result & " рублей"
Else
Result = Result & " " & Currency
End If
ConvertLessThanOneThousand = Application.WorksheetFunction.Trim(Result)
End Function
- Закройте редактор VBA и вернитесь в Excel.
- Теперь в любой ячейке можно использовать функцию:
=SumProp(A1; "руб")где
A1— ячейка с числом, а"руб"— валюта (можно заменить на"долл"или"евро").
Эта функция учитывает склонение слов "рубль/доллар/евро" и правильно обрабатывает копейки. Например, для числа 1256,78 результат будет: "одна тысяча двести пятьдесят шесть рублей 78 копеек".
Сохранить файл как *.xlsm (с поддержкой макросов)|Включить макросы при открытии|Проверить функцию на числах с копейками|Проверить функцию на круглых суммах (например, 1000)|Попробовать разные валюты ("руб", "долл", "евро")
-->
3. Способ 3: Формулы без VBA (для Excel 365 и 2019)
Если вы не хотите использовать VBA или работаете в Excel Online (где макросы недоступны), можно обойтись комбинацией стандартных функций. Этот метод сложнее, но зато не требует программирования.
Пример формулы для числа в ячейке A1 (рубли):
=ТЕКСТ(A1;"[$-419]0,00") & " (" &
ЕСЛИ(ЦЕЛОЕ(A1)=1;"один рубль";
ЕСЛИ(ЦЕЛОЕ(A1)>1;ЕСЛИ(ЦЕЛОЕ(A1)<5;"рубля";"рублей");"рублей")) &
ЕСЛИ(ОСТАТ(А1;1)>0;", " &
ЕСЛИ(ОКРУГЛ(ОСТАТ(A1;1)*100;0)=1;"одна копейка";
ЕСЛИ(ОКРУГЛ(ОСТАТ(A1;1)*100;0)>1;
ЕСЛИ(ОКРУГЛ(ОСТАТ(A1;1)*100;0)<5;"копейки";"копеек");"копеек"));"") & ")"
Эта формула:
- Преобразует число в текстовый формат с двумя знаками после запятой.
- Добавляет скобки и слово "рубль" в правильном склонении.
- Обрабатывает копейки (если они есть).
Минус метода: он не расшифровывает число прописью, а только добавляет валюту. Для полной расшифровки придётся комбинировать с другими функциями или использовать VBA.
4. Способ 4: Надстройки от сторонних разработчиков
Если вам нужно быстрое и готовое решение без программирования, можно воспользоваться бесплатными надстройками для Excel. Они добавляют новые функции для расшифровки сумм прописью.
Популярные варианты:
- 🔹 NumWord — надстройка с поддержкой русского, английского и других языков. Умеет склонять валюты и работает с большими числами.
- 🔹 РубльТекст — специализированное решение для российских рублей и копеек. Легко устанавливается и настраивается.
- 🔹 Excel Number to Words — универсальная надстройка с открытым кодом (можно доработать под свои нужды).
Как установить надстройку:
- Скачайте файл надстройки (
.xlamили.xlsm) с официального сайта разработчика. - В Excel перейдите в
Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку. - После установки в Excel появятся новые функции (например,
=RUBTEXT(A1)).
Преимущества надстроек:
- 🔹 Не нужно писать код самому.
- 🔹 Поддержка обновлений от разработчика.
- 🔹 Дополнительные функции (например, расшифровка дат или времени).
Где скачать надстройки безопасно?
Официальные источники:
1. [Microsoft AppSource](https://appsource.microsoft.com/) — проверенные решения от партнёров Microsoft.
2. [GitHub](https://github.com/) — репозитории с открытым кодом (ищите проекты с высоким рейтингом и последними коммитами).
3. Сайты разработчиков (например, [numword.ru](https://numword.ru/) для NumWord).
⚠️ Никогда не скачивайте надстройки с сомнительных файлообменников или торрент-трекеров — они могут содержать вирусы или вредоносный код.
5. Ошибки и нюансы при расшифровке сумм
Даже с готовыми решениями можно столкнуться с проблемами. Рассмотрим типичные ошибки и как их избежать:
1. Неправильное склонение валют
⚠️ Внимание: Функции и надстройки часто ошибаются со словами "рубль/доллар/евро" при числах, оканчивающихся на 1, 2, 3 или 4. Например, "2 рубля" вместо "2 рубля" (правильно) или "21 рубль" вместо "21 рубль" (правильно).
Решение: Проверяйте логику склонения в коде или используйте надстройки с поддержкой русского языка (например, NumWord).
2. Округление копеек
Если в ячейке число 1256,785, некоторые функции округят его до 1256,79, а другие — до 1256,78. Это может привести к несоответствию сумм в документах.
Решение: Предварительно округлите число с помощью функции =ОКРУГЛ(A1;2).
3. Ограничение на длину числа
Стандартные функции Excel (например, ТЕКСТ) не работают с числами больше 15 знаков. Для больших сумм (например, в триллионах) нужны специальные алгоритмы.
Решение: Используйте VBA-функции с поддержкой типа Currency или Double.
4. Разделители дробной части
В разных странах используются разные разделители: в России это запятая (1 256,78), а в США — точка (1,256.78). Если функция ожидает один формат, а в ячейке другой, результат будет неверным.
Решение: Приведите число к нужному формату с помощью =ПОДСТАВИТЬ(A1; "."; ",").
| Проблема | Причина | Решение |
|---|---|---|
| Сумма прописью не обновляется | Отключены автоматический пересчёт формул | Нажмите F9 или включите в Формулы → Параметры вычислений → Автоматически |
| Ошибка #ИМЯ? в ячейке | Неправильное имя функции или опечатка | Проверьте регистр и синтаксис (например, =SumProp, а не =sumprop) |
| Неправильные копейки (например, 78 копеек вместо 0,78) | Функция ожидает целое число копеек, а не дробную часть | Умножьте дробную часть на 100: =ОКРУГЛ(ОСТАТ(A1;1)*100;0) |
| Медленная работа файла | Слишком много вызовов пользовательских функций | Оптимизируйте код или используйте надстройки |
6. Как адаптировать расшифровку под разные валюты
Если вам нужно расшифровывать суммы не только в рублях, но и в долларах, евро или других валютах, придётся доработать функцию. Вот как это сделать:
1. Для долларов и евро
В VBA-функции SumProp (из второго способа) замените строку:
SumProp = Application.WorksheetFunction.Trim(Rubles & " " & MyCurrency)
на:
SumProp = Application.WorksheetFunction.Trim(Rubles & " " & Choose(MyCurrency, "рубль", "доллар", "евро"))
И добавьте обработку копеек/центов:
If Not IsEmpty(Kopecks) Then
SumProp = SumProp & " и " & Kopecks & " " & Choose(MyCurrency, "копеек", "центов", "центов")
End If
2. Для валют с другим форматом
Например, в тенге (Казахстан) дробная часть называется тиын, а в гривнах (Украина) — копейка. Добавьте новые варианты в функцию:
Select Case MyCurrency
Case "руб": MyCurrency = "рубль"; MyCent = "копеек"
Case "долл": MyCurrency = "доллар"; MyCent = "центов"
Case "евро": MyCurrency = "евро"; MyCent = "центов"
Case "тенге": MyCurrency = "тенге"; MyCent = "тиын"
Case "гривна": MyCurrency = "гривна"; MyCent = "копейки"
End Select
3. Для валют без дробной части
Некоторые валюты (например, йена) не используют копейки/центы. В этом случае модифицируйте функцию, чтобы она игнорировала дробную часть:
If MyCurrency = "йена" Then
SumProp = Application.WorksheetFunction.Trim(Rubles & " йен")
Else
' Обычная логика с копейками
End If
Пример результата для разных валют:
- 🔹 1256,78 рубля → "одна тысяча двести пятьдесят шесть рублей 78 копеек"
- 🔹 1256,78 долларов → "one thousand two hundred fifty-six dollars and 78 cents"
- 🔹 1256 тенге → "мың екі жүз елту тенге 78 тиын"
7. Автоматизация расшифровки для больших таблиц
Если вам нужно расшифровать суммы прописью для сотен или тысяч строк, ручной ввод формул займёт слишком много времени. Вот как оптимизировать процесс:
1. Копирование формул
Если используете VBA-функцию:
- Введите формулу в первую ячейку (например,
=SumProp(A2; "руб")). - Протяните маркер автозаполнения вниз до последней строки.
2. Преобразование в значения
Чтобы формулы не пересчитывались при каждом открытии файла (это замедляет работу), преобразуйте их в текст:
- Выделите ячейки с расшифровкой.
- Нажмите
Ctrl + C(скопировать). - Правой кнопкой мыши выберите
Специальная вставка → Значения.
3. Динамические массивы (Excel 365)
В Excel 365 можно использовать функцию ТЕКСТРАЗН (англ. TEXTJOIN) для объединения расшифровки с другими данными. Например:
=ТЕКСТРАЗН("";ИСТИНА; "Сумма: "; ТЕКСТ(A1;"0,00"); " ("; SumProp(A1); ")")
Результат: "Сумма: 1256,78 (одна тысяча двести пятьдесят шесть рублей 78 копеек)".
4. Power Query для массовой обработки
Если данные хранятся в внешнем источнике (например, в SQL или CSV), используйте Power Query:
- Импортируйте данные в Excel через
Данные → Получить данные. - Добавьте пользовательский столбец с формулой расшифровки.
- Загрузите данные обратно в таблицу.
Как ускорить работу с большими таблицами?
1. Отключите автоматический пересчёт (Формулы → Параметры вычислений → Вручную) на время редактирования.
2. Используйте надстройки — они оптимизированы лучше, чем пользовательские VBA-функции.
3. Разбейте данные на части — обрабатывайте по 1000 строк за раз, если файл тормозит.
4. Сохраняйте файл в формате .xlsm — это ускоряет работу макросов по сравнению с .xlsx.
8. Альтернативные решения: онлайн-сервисы и другие программы
Если Excel по какой-то причине не подходит, можно воспользоваться альтернативными инструментами:
1. Онлайн-конвертеры
Сервисы вроде [numword.com](https://numword.com/) или [summa-propisyu.ru](https://summa-propisyu.ru/) позволяют ввести число и получить расшифровку прописью. Минус: придётся копировать результат вручную.
2. Google Таблицы
В Google Sheets нет встроенной функции для русского языка, но можно использовать скрипты на Google Apps Script. Пример кода:
function RUBTEXT(number) {
// Логика преобразования (аналогично VBA)
return "расшифровка";
}
3. 1С и другие бухгалтерские программы
В 1С:Бухгалтерия расшифровка сумм прописью встроена в печатные формы документов. Если вы работаете в 1С, проще выгрузить данные оттуда, чем делать это в Excel.
4. Python и другие языки программирования
Для продвинутых пользователей: библиотека num2words в Python поддерживает русский язык. Пример:
from num2words import num2words
print(num2words(1256.78, lang='ru', to='currency', currency='RUB'))
Вывод: одна тысяча двести пятьдесят шесть рублей 78 копеек
| Инструмент | Плюсы | Минусы |
|---|---|---|
| Excel + VBA | Гибкость, работа офлайн | Требует навыков программирования |
| Надстройки для Excel | Простота установки, поддержка обновлений | Зависимость от сторонних разработчиков |
| Онлайн-сервисы | Не нужно ничего устанавливать | Ручной ввод, риски конфиденциальности |
| Google Sheets + Apps Script | Бесплатно, облачный доступ | Ограниченная функциональность |
FAQ: Частые вопросы по расшифровке сумм в Excel
Можно ли сделать расшифровку суммы прописью без VBA?
Да, но с ограничениями. В Excel 365 и Excel 2019 можно использовать комбинацию функций ТЕКСТ, ЕСЛИ и ВЫБОР, но это не даст полной расшифровки числа прописью — только добавление валют в правильном склонении. Для полноценной расшифровки (например, "одна тысяча двадцать пять") без VBA понадобится надстройка.
Почему моя пользовательская функция выдаёт ошибку #ИМЯ?
Это происходит по трём причинам:
- Файл не сохранён в формате
.xlsm(с поддержкой макросов). - Опечатка в имени функции (регистр важен:
SumProp≠sumprop). - Макросы отключены в настройках безопасности (
Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы).
Как расшифровать сумму в иностранной валюте (доллары, евро)?
В пользовательской функции SumProp (из второго способа) добавьте параметр для валюты:
=SumProp(A1; "долл")
Для евро:
=SumProp(A1; "евро")
Если нужна поддержка других валют (например, тенге или гривны), доработайте код функции, добавив новые варианты в блок Select Case.
Можно ли расшифровать сумму прописью в Excel Online?
В Excel Online макросы и пользовательские функции VBA не работают. Альтернативы:
- Используйте надстройки (если они поддерживаются в вашей версии).
- Скопируйте данные в настольную версию Excel, расшифруйте суммы и вставьте результат обратно.
- Воспользуйтесь онлайн-сервисами (например, [summa-propisyu.ru](https://summa-propisyu.ru/)) и вставьте результат вручную.
Как сделать, чтобы расшифровка автоматически обновлялась при изменении суммы?
Если вы используете пользовательскую функцию VBA, она будет обновляться автоматически при изменении исходных данных (при включённом автоматическом пересчёте). Чтобы проверить настройки:
- Перейдите в
Формулы → Параметры вычислений. - Выберите
Автоматически(если стоитВручную, формулы не будут обновляться). - Для принудительного пересчёта нажмите
F9.
Если расшифровка сделана через надстройку, проверьте её настройки — некоторые решения требуют ручного обновления.