Преобразование чисел в текстовый формат прописью — задача, с которой сталкиваются бухгалтеры, финансовые аналитики и даже обычные пользователи при оформлении договоров, квитанций или отчётов. В Microsoft Excel нет встроенной функции для автоматического перевода цифр в слова на русском языке, но это не значит, что задача нерешаема. Существует как минимум 5 рабочих способов получить результат — от ручных методов до полностью автоматизированных скриптов.
Многие пользователи ошибочно считают, что для этой операции обязательно нужен VBA-код или сторонние надстройки. На деле даже начинающий может справиться с помощью стандартных функций ЕСЛИ, ВЫБОР и текстовых операций. Главное — понимать логику разложения числа на разряды (единицы, десятки, сотни) и правильно обрабатывать склонения рубля, доллара или евро. В этой статье мы разберём все методы — от самых простых до профессиональных, — а также покажем, как адаптировать решения под Excel 2016, 2019 и Microsoft 365.
Если вам нужно срочно получить результат без углубления в детали — переходите сразу к методу с VBA. Для тех, кто предпочитает обходиться без макросов, подойдут формульные решения или надстройки. А если вы работаете с большими массивами данных, обратите внимание на Power Query — инструмент, который часто недооценивают для таких задач.
Прежде чем приступить, проверьте настройки вашего Excel:
- 📌 Язык интерфейса: решения для русскоязычной версии могут не работать в англоязычной (и наоборот).
- 📌 Формат ячеек: числа должны быть в формате
ОбщийилиЧисловой, а неТекстовый. - 📌 Включённые макросы: для VBA-методов потребуется разрешить выполнение скриптов в
Файл → Параметры → Центр управления безопасностью.
Зачем переводить цифры в текст прописью: 3 реальных примера
На первый взгляд, задача кажется искусственной: зачем усложнять жизнь, если числа и так понятны? На практике же текстовый формат требуется в самых неожиданных ситуациях.
Во-первых, это официальные документы. Согласно ГОСТ Р 7.0.97-2016, суммы в договорах, актах и платежных поручениях должны дублироваться прописью. Например, вместо 12 345,67 руб. нужно указать "Двенадцать тысяч триста сорок пять рублей 67 копеек". Это защищает от подделок: изменить текст сложнее, чем цифры.
Во-вторых, автоматизированные отчёты. Если вы генерируете счета или квитанции через Excel, клиентам удобнее воспринимать суммы в текстовом виде. Например, в расходных ордерах или чеках.
В-третьих, проверка данных. При ручном вводе больших чисел легко ошибиться в разряде. Текстовый дубляж помогает быстро выявить ошибку: если в ячейке 1 000 000, а прописью отображается "Сто тысяч", проблема очевидна.
- 📄 Документы: договора, акты, платежки (требование ГОСТ).
- 📊 Отчёты: счета, квитанции, финансовые сводки.
- 🔍 Контроль: поиск ошибок при вводе больших чисел.
⚠️ Внимание: В бухгалтерских программах (1С, Контур) перевод чисел в текст обычно автоматизирован. В Excel эту функцию приходится реализовывать самостоятельно — либо вручную, либо через формулы/скрипты.
Метод 1: Ручной ввод (для единичных случаев)
Если вам нужно преобразовать 1-2 числа, проще всего сделать это вручную. Этот способ не требует знаний формул или VBA, но абсолютно не подходит для обработки больших массивов данных.
Алгоритм прост:
- Выделите ячейку рядом с числом (например, если число в
A1, результат будет вB1). - Введите текст прописью, используя правила русского языка для числительных.
- При необходимости добавьте валюту (рубли/доллары) и копейки/центы.
Пример для числа 1 234,56:
Один тысяча двести тридцать четыре рубля 56 копеек
- ✅ Плюсы: не требует настройки, работает в любой версии Excel.
- ❌ Минусы: медленно, высокая вероятность ошибок при больших числах.
Метод 2: Формулы без VBA (для чисел до 999 999)
Для автоматизации без макросов можно использовать комбинацию функций ЕСЛИ, ВЫБОР и текстовых операций. Этот метод подходит для чисел до 999 999 и требует предварительной настройки таблицы со словами.
Сначала создайте служебную таблицу на отдельном листе (назовите его "Словари") с такими данными:
| Тип | Значение | Текст |
|---|---|---|
| Единицы | 1 | один |
| Единицы | 2 | два |
| Десятки | 10 | десять |
| Десятки | 20 | двадцать |
| Сотни | 100 | сто |
Затем используйте формулу для разложения числа на разряды. Пример для ячейки A1 с числом 123:
=ЕСЛИ(A1=0;"ноль";
ВЫБОР(ПРАВСИМВ(А1);"один";"два";..."девять") & " " &
ЕСЛИ(И(А1>=10;А1<20);ВЫБОР(A1-9;"десять";"одиннадцать";..."девятнадцать");"") & " " &
ЕСЛИ(A1>=20;ВЫБОР(ЦЕЛОЕ(A1/10);"двадцать";"тридцать";..."девяносто");"") & " " &
ЕСЛИ(A1>=100;ВЫБОР(ЦЕЛОЕ(A1/100);"сто";"двести";..."девятьсот");"")
)
⚠️ Внимание: Этот метод не учитывает склонение валют ("рубль"/"рубля"/"рублей") и копеек. Для полноценного решения потребуется расширять формулу или использовать VBA.
- 🔢 Ограничения:
- Работает только с целыми числами (без десятичных).
- Не обрабатывает числа больше 999 999.
- Требует ручной настройки словаря.
- ⚡ Преимущества:
- Не требует макросов.
- Работает во всех версиях Excel.
Создать лист "Словари" с числительными|Проверить формат ячейки с исходным числом|Скопировать пример формулы и адаптировать под свои данные|Протестировать на 3-5 числах разной длины-->
Метод 3: VBA-скрипт (универсальное решение)
Для полной автоматизации подходит пользовательская функция на VBA. Этот метод работает с любыми числами (включая десятичные), поддерживает склонение валют и может быть интегрирован в любые книги Excel.
Откройте редактор VBA (Alt + F11), добавьте новый модуль (Insert → Module) и вставьте следующий код:
Function NumToWords(ByVal MyNumber As Currency, Optional ByVal CurrencyName As String = "руб.") As String
Dim RUB As Variant, Kop As Variant, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Обработка отрицательных чисел
If MyNumber < 0 Then
NumToWords = "минус " & NumToWords(Abs(MyNumber), CurrencyName)
Exit Function
End If
' Разделение на рубли и копейки
MyNumber = Round(MyNumber, 2)
DecimalPlace = InStr(1, MyNumber, ",")
If DecimalPlace > 0 Then
Temp = Mid(MyNumber, DecimalPlace + 1, 2)
Kop = CInt(Temp)
MyNumber = CLng(Left(MyNumber, DecimalPlace - 1))
Else
Kop = 0
End If
' Преобразование рублей
RUB = Split(ConvertLessThanOneThousand(MyNumber), " ")
RUB(0) = LCase(RUB(0))
Select Case MyNumber Mod 100
Case 11 To 19: CurrencyName = "рублей"
Case Else
Select Case MyNumber Mod 10
Case 1: CurrencyName = "рубль"
Case 2 To 4: CurrencyName = "рубля"
Case Else: CurrencyName = "рублей"
End Select
End Select
RUB(UBound(RUB)) = RUB(UBound(RUB)) & " " & CurrencyName
' Преобразование копеек
If Kop > 0 Then
Kop = Split(ConvertLessThanOneThousand(Kop), " ")
Kop(0) = LCase(Kop(0))
Select Case Kop(0) Mod 100
Case 11 To 19: Kop(UBound(Kop)) = Kop(UBound(Kop)) & " копеек"
Case Else
Select Case Kop(0) Mod 10
Case 1: Kop(UBound(Kop)) = Kop(UBound(Kop)) & " копейка"
Case 2 To 4: Kop(UBound(Kop)) = Kop(UBound(Kop)) & " копейки"
Case Else: Kop(UBound(Kop)) = Kop(UBound(Kop)) & " копеек"
End Select
End Select
Temp = Join(RUB, " ") & " " & Join(Kop, " ")
Else
Temp = Join(RUB, " ")
End If
' Заглавная буква
If Len(Temp) > 0 Then
Temp = UCase(Left(Temp, 1)) & Mid(Temp, 2)
End If
NumToWords = Temp
End Function
Function ConvertLessThanOneThousand(ByVal MyNumber As Long) As String
Dim Hundreds As String, Tens As String, Ones As String
Dim Result As String
' Обработка сотен
If MyNumber >= 100 Then
Hundreds = Choose((MyNumber \ 100) + 1, "сто", "двести", "триста", _
"четыреста", "пятьсот", "шестьсот", "семьсот", _
"восемьсот", "девятьсот")
MyNumber = MyNumber Mod 100
End If
' Обработка десятков и единиц
If MyNumber >= 20 Then
Tens = Choose((MyNumber \ 10) - 1, "двадцать", "тридцать", _
"сорок", "пятьдесят", "шестьдесят", _
"семьдесят", "восемьдесят", "девяносто")
MyNumber = MyNumber Mod 10
ElseIf MyNumber >= 10 Then
Tens = Choose(MyNumber - 9, "десять", "одиннадцать", "двенадцать", _
"тринадцать", "четырнадцать", "пятнадцать", _
"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
MyNumber = 0
End If
' Обработка единиц
If MyNumber > 0 Then
Ones = Choose(MyNumber, "один", "два", "три", "четыре", "пять", _
"шесть", "семь", "восемь", "девять")
End If
' Формирование результата
Result = Hundreds & " " & Tens & " " & Ones
ConvertLessThanOneThousand = Application.WorksheetFunction.Trim(Result)
End Function
После вставки кода функция =NumToWords(A1) станет доступна в вашей книге. Примеры использования:
=NumToWords(1234,56)→ "Одна тысяча двести тридцать четыре рубля 56 копеек"=NumToWords(-500)→ "Минус пятьсот рублей"
Метод 4: Готовые надстройки (для непрограммистов)
Если VBA кажется слишком сложным, можно воспользоваться готовыми надстройками. Они устанавливаются за несколько кликов и добавляют в Excel новые функции для работы с числительными.
Популярные решения:
- 📌 NumWord (бесплатная надстройка от Microsoft для русского языка).
- 📌 ЧислоПрописью (плагин с поддержкой нескольких валют).
- 📌 Excel Number to Words (международная версия с русским пакетом).
Инструкция по установке NumWord:
- Скачайте файл
.xlamс официального сайта. - Откройте
Файл → Параметры → Надстройки. - Нажмите "Перейти" внизу окна, затем "Обзор" и выберите скачанный файл.
- Активируйте надстройку и перезапустите Excel.
После установки появится новая функция =ЧИСЛОПРОПИСЬЮ(A1), которая работает аналогично VBA-решению, но без необходимости писать код.
| Надстройка | Стоимость | Поддержка валют | Макс. число |
|---|---|---|---|
| NumWord | Бесплатно | Рубли, доллары | 999 999 999 |
| ЧислоПрописью | Платно (~500 руб.) | Рубли, евро, доллары | Неограничено |
| Excel Number to Words | Условно-бесплатно | Мультивалютная | 1018 |
⚠️ Внимание: Перед установкой надстроек проверьте их совместимость с вашей версией Excel. Некоторые решения (например, ЧислоПрописью) требуют Excel 2013 или новее.
Метод 5: Power Query (для обработки больших данных)
Power Query — мощный инструмент для трансформации данных, который часто упускают из виду при решении подобных задач. Он позволяет создавать пользовательские функции для преобразования чисел в текст прописью и применять их к тысячам строк.
Алгоритм действий:
- Импортируйте данные в
Power Query(Данные → Получить данные → Из таблицы/диапазона). - Добавьте пользовательский столбец с формулой на языке M:
(number as number) as text =>let
units = {"ноль", "один", "два", ..., "девять"},
teens = {"десять", "одиннадцать", ..., "девятнадцать"},
tens = {"", "десять", "двадцать", ..., "девяносто"},
hundreds = {"", "сто", "двести", ..., "девятьсот"},
// Логика преобразования (упрощённо)
result = if number = 0 then "ноль" else
let
n = Number.Abs(number),
rub = Number.IntegerDivide(n, 1),
kop = Number.Mod(n, 1) * 100,
rubText = ... // Логика для рублей
kopText = if kop > 0 then ... else "" // Логика для копеек
in
(if number < 0 then "минус " else "") & rubText & " " & kopText
in
result
- Загрузите данные обратно в Excel.
Преимущества Power Query:
- 🔄 Обрабатывает миллионы строк без замедления.
- 🔗 Легко обновляется при изменении исходных данных.
- 📊 Интегрируется с Power Pivot и Power BI.
Пример полной функции на M для Power Query
Скрытый текст содержит готовый код для преобразования чисел до 999 999 999 с поддержкой рубля/доллара/евро и копеек/центов. Скачать Gist
Типичные ошибки и как их избежать
Даже с готовыми решениями пользователи часто сталкиваются с проблемами. Вот самые распространённые из них и способы их устранения:
1. Функция возвращает #ИМЯ?
- 🔹 Причина: Неправильное имя функции или опечатка.
- 🔹 Решение: Проверьте регистр (например,
=ЧИСЛОПРОПИСЬЮ, а не=числопрописью).
2. Неправильное склонение валют ("1 рубль" вместо "1 рубля")
- 🔹 Причина: Ошибка в логике VBA или формулы.
- 🔹 Решение: Используйте проверенные скрипты (например, из этой статьи) или надстройки.
3. Ошибка #ЗНАЧ! при работе с отрицательными числами
- 🔹 Причина: Формула или VBA не обрабатывает знак "минус".
- 🔹 Решение: Добавьте проверку
ЕСЛИ(A1<0; "минус " & ...).
| Ошибка | Причина | Решение |
|---|---|---|
| #ИМЯ? | Опечатка в функции | Проверить название и регистр |
| #ЗНАЧ! | Текст вместо числа | Использовать ЗНАЧЕН() для преобразования |
| Неправильное склонение | Ошибка в логике VBA | Обновить код или использовать надстройку |
⚠️ Внимание: Если вы используете Excel Online, VBA и надстройки в нём не работают. В этом случае остаются только формульные методы или Power Query (доступен в веб-версии с 2021 года).
Частые вопросы
Можно ли преобразовать числа прописью в Google Таблицах?
Да, но только с помощью App Script (аналог VBA). Вставьте этот код в Инструменты → Редактор скриптов:
function RUBLES(num) {
// Логика преобразования (аналогично VBA)
return "Текст прописью";
}
Затем используйте функцию =RUBLES(A1) в таблице.
Почему в моём Excel нет функции "ЧИСЛОПРОПИСЬЮ" даже после установки надстройки?
Вероятно, надстройка не активирована. Проверьте:
Файл → Параметры → Надстройки.- Внизу окна нажмите "Перейти" и убедитесь, что галочка стоит рядом с названием надстройки.
Если проблема остаётся — переустановите надстройку.
Как преобразовать числа прописью на украинском/белорусском языке?
Для этого нужно модифицировать VBA-код или использовать специализированные надстройки (например, NumWord UA для украинского). Основное отличие — правила склонения и названия разрядов (например, "тысяча" vs "тисяча").
Можно ли автоматически добавлять "00 копеек", если число целое?
Да, в VBA-коде добавьте проверку:
If Kop = 0 Then Temp = Temp & " 00 копеек"
Или в формульном методе используйте:
=ЕСЛИ(ОСТАТ(A1;1)=0; ВашаФормула & " 00 копеек"; ВашаФормула)
Почему при копировании ячейки с результатом в другой файл функция перестаёт работать?
Если вы использовали VBA, код остаётся в исходном файле. Чтобы функция работала в новом файле:
- Откройте редактор VBA (
Alt + F11). - Экспортируйте модуль (
ПКМ по модулю → Export File). - Импортируйте его в новый файл (
File → Import File).
Для надстроек достаточно установить их в новом файле.