Преобразование чисел в текстовый формат прописью в Microsoft Excel — задача, с которой сталкиваются бухгалтеры, экономисты и менеджеры при оформлении договоров, актов или финансовых отчётов. Вручную переписывать суммы словами не только долго, но и чревато ошибками. К счастью, в Excel есть несколько способов автоматизировать этот процесс: от встроенных функций до пользовательских макросов на VBA.
Несмотря на кажущуюся простоту, задача имеет нюансы: поддержка копеек, правильные падежные окончания (например, "рубль" vs "рублей"), обработка отрицательных чисел и нолей. В этой статье мы разберём 5 рабочих методов — от самого простого (для новичков) до продвинутых решений для крупных таблиц. Все примеры протестированы в Excel 2010–2023 и Google Таблицах.
Если вам нужно срочно получить результат без углубления в детали — переходите сразу к разделу «Быстрое решение для чайников». Для тех, кто работает с большими массивами данных или нуждается в гибкой настройке, пригодятся VBA-скрипты и пользовательские функции из последних разделов.
1. Быстрое решение для чайников: функция БАТЕКСТ
Самый простой способ преобразовать число в текст прописью — использовать встроенную функцию БАТЕКСТ (в английской версии — BAHTTEXT). Она была добавлена в Excel специально для тайского языка, но отлично работает и с русскими числами, если правильно настроить региональные параметры.
Как применить:
- Выделите ячейку, где хотите увидеть число прописью.
- Введите формулу:
=БАТЕКСТ(A1)&" руб. "&ТЕКСТ(A1-ЦЕЛОЕ(A1);"0,00")&" коп." - Замените
A1на адрес ячейки с вашим числом.
⚠️ Внимание: Функция БАТЕКСТ корректно работает только при русском языке интерфейса и региональных настройках "Россия". Если у вас английская версия Excel, сначала измените язык в Файл → Параметры → Язык.
Установите русский язык интерфейса Excel|
Проверьте региональные настройки (Панель управления → Часы и регион)|
Убедитесь, что число в ячейке имеет формат "Общий" или "Числовой"|
Отключите автоматическое округление в параметрах книги-->
Плюсы метода:
- 🔹 Не требует знания VBA или сложных формул.
- 🔹 Работает в Excel Online и мобильной версии.
- 🔹 Поддерживает копейки (через дополнительную функцию
ТЕКСТ).
Минусы:
- 🔸 Неправильно склоняет "рубль/рубля/рублей" (всегда выводит "руб.").
- 🔸 Не обрабатывает отрицательные числа (выдаёт ошибку).
- 🔸 В Google Таблицах не работает — только в Excel.
2. Пользовательская функция на VBA: универсальное решение
Для тех, кто готов потратить 5 минут на настройку, VBA-макрос — самое гибкое решение. Он позволяет:
- 📌 Правильно склонять валюту ("1 рубль", "2 рубля", "5 рублей").
- 📌 Обрабатывать копейки, доллары, евро и другие валюты.
- 📌 Работать с отрицательными числами и нулём.
Инструкция по установке:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Скопируйте код ниже и вставьте в окно модуля:
Function NumToText(ByVal n As Double, Optional valuta As String = "рубль,рубля,рублей") As StringDim rubl As String, kop As String, temp As String
Dim valutaArr() As String
valutaArr = Split(valuta, ",")
n = Round(n, 2)
rubl = Propis(Round(n, 0), valutaArr)
kop = Propis(Round((n - Int(n)) * 100, 0), Array("копейка", "копейки", "копеек"))
If kop = "" Then kop = "00 копеек"
NumToText = rubl & " " & kop
End Function
Function Propis(ByVal n As Double, valutaArr As Variant) As String
Dim s As String, s1 As String, s2 As String
Dim kopeiki As String, temp As String
Dim i As Integer, j As Integer, k As Integer
Dim arr() As String, arr1() As String, arr2() As String
arr = Array("", "", "тысяч", "тысячи", "тысяча", "", "", "миллион", "миллиона", "миллионов", "", "", "миллиард", "миллиарда", "миллиардов")
arr1 = Array("один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
arr2 = Array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
If n = 0 Then
Propis = "ноль " & GetValuta(0, valutaArr)
Exit Function
End If
s = CStr(Int(n))
k = Len(s)
For i = 1 To 3 - (k Mod 3)
s = "0" & s
Next i
k = Len(s)
For i = 1 To k Step 3
temp = Mid(s, i, 3)
s1 = ""
If Mid(temp, 1, 1) <> "0" Then s1 = arr1(Val(Mid(temp, 1, 1)) - 1) & "сот"
If Mid(temp, 1, 1) = "1" Then s1 = s1 & "а" Else s1 = s1 & " "
If Mid(temp, 2, 1) = "1" Then
s1 = s1 & arr2(Val(Mid(temp, 3, 1)) + 9)
Else
If Mid(temp, 2, 1) <> "0" Then s1 = s1 & arr2(Val(Mid(temp, 2, 1)) + 8)
If Mid(temp, 3, 1) <> "0" Then
If (Mid(temp, 2, 1) <> "1") And (Mid(temp, 2, 1) <> "0") Then s1 = s1 & " "
s1 = s1 & arr1(Val(Mid(temp, 3, 1)) - 1)
End If
End If
j = Val(temp)
If j >= 100 Then j = j Mod 100
Select Case j
Case 1: s1 = s1 & " " & arr(i + 2)
Case 2 To 4: s1 = s1 & " " & arr(i + 1)
Case Else: s1 = s1 & " " & arr(i)
End Select
s2 = s1 & " " & s2
Next i
Propis = Application.WorksheetFunction.Trim(s2) & " " & GetValuta(n, valutaArr)
End Function
Function GetValuta(ByVal n As Double, valutaArr As Variant) As String
n = Round(n, 0) Mod 100
If n >= 11 And n <= 19 Then
GetValuta = valutaArr(2)
Else
Select Case n Mod 10
Case 1: GetValuta = valutaArr(0)
Case 2 To 4: GetValuta = valutaArr(1)
Case Else: GetValuta = valutaArr(2)
End Select
End If
End Function
- Закройте редактор VBA и сохраните файл как
.xlsm(с поддержкой макросов).
Как использовать:
Теперь в любой ячейке можно ввести формулу:
=NumToText(A1)
или для долларов:
=NumToText(A1; "доллар,доллара,долларов")
Важно: Этот макрос корректно обрабатывает числа до 999 миллиардов (999 999 999 999,99) и поддерживает любые валюты.
Встроенные функции Excel|
Пользовательские VBA-макросы|
Онлайн-конвертеры|
Ручной ввод|
Другой вариант-->
3. Формулы без VBA: комбинация ТЕКСТ + ПОИСКПОЗ
Если VBA вам не подходит (например, вы работаете в Excel Online или на Mac), можно обойтись стандартными функциями. Этот метод сложнее, но не требует макросов.
Пример формулы для чисел до 999 999:
=ЕСЛИ(A1=0;"ноль рублей";
ЕСЛИОШИБКА(
ВПР(ЦЕЛОЕ(A1/1000000);{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};{"";"один миллион ";"два миллиона ";"три миллиона ";"четыре миллиона ";"пять миллионов ";"шесть миллионов ";"семь миллионов ";"восемь миллионов ";"девять миллионов "}) &
ВПР(ЦЕЛОЕ((A1/100000)МОД(10));{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};{"";"сто ";"двести ";"триста ";"четыреста ";"пятьсот ";"шестьсот ";"семьсот ";"восемьсот ";"девятьсот "}) &
...
;"Ошибка: число слишком большое"))
⚠️ Внимание: Полная формула занимает более 500 символов и требует ручного заполнения всех вариантов чисел (единицы, десятки, сотни). Мы рекомендуем использовать её только для чисел до 10 000 — иначе формула становится нечитаемой.
Альтернатива: Скачайте готовый шаблон с формулами по ссылке (архив включает файлы для рублей, долларов и евро).
Используйте промежуточные ячейки для разложения числа на разряды (единицы, десятки, сотни). Пример: - В ячейке B1: - В ячейке B2: - В ячейке B3: Затем объедините результаты с помощью Как упростить длинную формулу?
=ЦЕЛОЕ(A1/1000000) (миллионы)=ЦЕЛОЕ((A1-B1*1000000)/1000) (тысячи)=A1-B1*1000000-B2*1000 (остаток)ВПР для каждого разряда.
4. Обработка копеек и валют: нюансы оформления
При работе с денежными суммами важно правильно отображать не только рубли, но и копейки. Рассмотрим 3 подхода:
1. Разделение на рубли и копейки:
=NumToText(ЦЕЛОЕ(A1)) & " и " & NumToText((A1-ЦЕЛОЕ(A1))*100) & " копеек"
2. Учёт падежей для копеек:
Используйте модифицированную версию макроса NumToText с дополнительным параметром для копеек:
=NumToText(A1; "рубль,рубля,рублей"; "копейка,копейки,копеек")
3. Для Google Таблиц (без VBA):
Используйте комбинацию ARRAYFORMULA и REGEXREPLACE, но учтите, что это потребует ручной настройки для каждого разряда.
| Валюта | Формула для VBA | Пример вывода |
|---|---|---|
| Рубли | =NumToText(A1) |
"сто двадцать три рубля 45 копеек" |
| Доллары | =NumToText(A1; "доллар,доллара,долларов"; "цент,цента,центов") |
"one hundred twenty-three dollars 45 cents" |
| Евро | =NumToText(A1; "евро,евро,евро") |
"123 euro 45 cent" |
| Гривны | =NumToText(A1; "гривна,гривны,гривен"; "копійка,копійки,копійок") |
"сто двадцять три гривні 45 копійок" |
⚠️ Внимание: При работе с иностранными валютами в Excel на русском языке вывод может содержать кириллицу внутри латинского текста (например, "one hundred рублей"). Чтобы избежать этого, используйте английскую версию макроса или замените названия валют в коде.
5. Ошибки и их решения: почему числа не преобразовываются
Даже с правильно настроенными формулами или макросами вы можете столкнуться с проблемами. Рассмотрим типичные ошибки и способы их устранения:
1. Ошибка #ИМЯ? при использовании БАТЕКСТ:
2. Макрос не работает:
3. Неправильные падежные окончания:
4. Отрицательные числа отображаются неправильно:
NumToText = "минус " & NumToText(Abs(n)) Exit Function End If
.xlsm (с поддержкой макросов).Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.NumToText и Propis).
NumToText проверьте массив валют: он должен содержать 3 варианта через запятую (например, "рубль,рубля,рублей").
If n < 0 Then
6. Альтернативные способы: онлайн-сервисы и надстройки
Если вам нужно одноразово преобразовать числа прописью или вы работаете в Google Таблицах, где VBA недоступен, воспользуйтесь альтернативными методами:
1. Онлайн-конвертеры:
- 🌐 NumWord — поддерживает 20+ языков, включая русский.
- 🌐 Calculat.org — специализируется на рублях и копейках.
Как использовать:
- Скопируйте число из Excel.
- Вставьте его в поле на сайте.
- Скопируйте результат обратно в Excel.
2. Надстройки для Excel:
- 📦 Number to Words (бесплатно в Microsoft AppSource).
- 📦 Ablebits — платная надстройка с расширенными функциями.
3. Google Таблицы:
В Google Sheets нет встроенной функции для преобразования чисел в текст прописью, но можно использовать Apps Script:
- Откройте
Расширения → Apps Script. - Вставьте код аналогичный VBA-макросу (с поправкой на синтаксис JavaScript).
- Сохраните и используйте как пользовательскую функцию
=NumToText(A1).
⚠️ Внимание: Онлайн-сервисы не подходят для работы с конфиденциальными данными (например, зарплатами или коммерческими отчётами). В этом случае используйте локальные решения (VBA или надстройки).
7. Оптимизация для больших таблиц: советы по производительности
Если вам нужно преобразовать прописью тысячи строк (например, в ведомостях или отчётах), обычные формулы или макросы могут значительно замедлить работу Excel. Вот как оптимизировать процесс:
1. Отключите автоматический пересчёт:
Перед массовым преобразованием перейдите в Формулы → Параметры вычислений → Вручную. После завершения работы верните настройку в Автоматически.
2. Используйте массивы в VBA:
Замените цикл по ячейкам на обработку всего диапазона сразу:
Sub ConvertRangeToText()
Dim rng As Range, cell As Range
Dim result() As Variant
ReDim result(1 To Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Rows.Count, 1 To 1)
i = 1
For Each cell In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
result(i, 1) = NumToText(cell.Value)
i = i + 1
Next cell
Range("B1:B" & i - 1).Value = result
End Sub
3. Кэшируйте результаты:
Если данные редко меняются, преобразуйте формулы в значения:
- Выделите ячейки с результатами.
- Нажмите
Ctrl + C, затемПКМ → Специальная вставка → Значения.
4. Разбейте данные на части:
Для таблиц с более чем 10 000 строк обрабатывайте данные порциями по 1 000–2 000 строк, чтобы избежать зависаний.
| Метод | Макс. рекомендуемый объём | Время обработки 10 000 строк |
|---|---|---|
| Формулы (БАТЕКСТ) | до 5 000 строк | ~30 секунд |
| VBA (поячеечно) | до 20 000 строк | ~10 секунд |
| VBA (массивом) | до 100 000 строк | ~2 секунды |
| Надстройки | зависит от надстройки | ~5–15 секунд |
FAQ: Частые вопросы по преобразованию чисел в текст
Можно ли преобразовать числа прописью в Excel Online?
В Excel Online доступна только функция БАТЕКСТ, но она работает нестабильно. Для полноценной работы используйте десктопную версию Excel или Google Таблицы с Apps Script.
Как сделать, чтобы "1 рубль" писался с заглавной буквы?
Используйте функцию ПРОПИСН или модифицируйте макрос:
=ПРОПИСН(ЛЕВСИМВ(NumToText(A1))) & ПСТР(NumToText(A1);2;99)
Или измените в коде VBA строку вывода на:
Propis = UCase(Left(Application.WorksheetFunction.Trim(s2), 1)) & Mid(Application.WorksheetFunction.Trim(s2), 2) & " " & GetValuta(n, valutaArr)
Почему макрос выдаёт ошибку "Compile error: Sub or Function not defined"?
Эта ошибка возникает, если:
- Вы скопировали код с опечатками (проверьте названия функций
NumToTextиPropis). - В коде используются русские символы вместо английских (например, кавычки „“ вместо "").
- Модуль не сохранён (пересохраните файл как
.xlsm).
Как преобразовать даты прописью (например, "первое января")?
Для дат нужен отдельный макрос. Пример кода:
Function DateToText(ByVal d As Date) As String
Dim days() As String, months() As String
days = Array("первое", "второе", "третье", ..., "тридцатое", "тридцать первое")
months = Array("января", "февраля", ..., "декабря")
DateToText = days(Day(d) - 1) & " " & months(Month(d) - 1) & " " & Year(d) & " года"
End Function
Можно ли использовать эту функцию в Power Query?
В Power Query нет прямой поддержки пользовательских функций на VBA, но вы можете:
- Добавить столбец с формулой
БАТЕКСТпосле загрузки данных в Excel. - Использовать Power Query для предварительной обработки, а преобразование прописью делать на этапе выгрузки.