Зачем нужен перевод чисел в текстовый формат?
Представьте: вы готовите финансовый отчёт, где сумма 12 345 рублей должна быть прописана словами — "двенадцать тысяч триста сорок пять рублей". Или формируете договор, где дата 15.03.2026 должна звучать как "пятнадцатое марта две тысячи двадцать четвёртого года". Вручную переписывать сотни таких значений — нерационально. К счастью, Microsoft Excel предлагает несколько способов автоматизировать эту задачу, даже если встроенной функции для этого нет.
В этой статье мы разберём 5 рабочих методов — от простых формул для чисел до 999 до VBA-макросов для миллионов, а также покажем, как адаптировать решения под рубли, доллары, евро и другие валюты. Вы узнаете, какие подводные камни ждут при работе с большими числами, как избежать ошибок форматирования и почему стандартная функция =ТЕКСТ() здесь бессильна.
Важно: все примеры тестировались в Excel 2019–2023 и Microsoft 365. Для Google Таблиц часть решений потребует адаптации (об этом — в последнем разделе).
Способ 1: Формула для чисел от 1 до 999 (без VBA)
Если вам нужно преобразовать небольшие числа (до 999) в текстовый формат, можно обойтись без макросов. Для этого используем комбинацию функций ВЫБОР(), ЦЕЛОЕ() и ОСТАТ(). Принцип прост: разбиваем число на сотни, десятки и единицы, а затем "склеиваем" их названия.
Вот универсальная формула для ячейки A1:
=ЕСЛИ(A1=0;"ноль";
СЦЕПИТЬ(
ВЫБОР(ЦЕЛОЕ(A1/100);
"";"сто";"двести";"триста";"четыреста";"пятьсот";
"шестьсот";"семьсот";"восемьсот";"девятьсот"
);
ЕСЛИ(И(ОСТАТ(A1;100)>19;ОСТАТ(A1;100)<21);" ";
ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);
"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";
"шестьдесят";"семьдесят";"восемьдесят";"девяносто"
)
);
ЕСЛИ(И(ОСТАТ(A1;100)>19;ОСТАТ(A1;100)<21);
ВЫБОР(ОСТАТ(A1;100)-10;"одиннадцать";"двенадцать";...;"девятнадцать");
ЕСЛИ(ОСТАТ(A1;10)>1;
" " &
ВЫБОР(ОСТАТ(A1;10);"";"два";"три";"четыре";"пять";
"шесть";"семь";"восемь";"девять"
);
ЕСЛИ(ОСТАТ(A1;10)=1;" одна";"")
)
)
)
)
Как работает формула:
- 🔢 Сотни:
ЦЕЛОЕ(A1/100)выделяет сотни (например, для 456 это 4), аВЫБОРподставляет слово ("четыреста"). - 🔢 Десятки и единицы:
ОСТАТ(A1;100)оставляет последние две цифры (56), которые разбиваются на десятки ("пятьдесят") и единицы ("шесть"). - 🔢 Исключения: числа 11–19 обрабатываются отдельно через вложенное
ЕСЛИ.
⚠️ Внимание: Формула не учитывает род существительного (например, "одна тысяча" vs "один миллион"). Для корректного согласования с валютами (рубль/рубля/рублей) потребуется доработка.
Скопируйте формулу в пустую ячейку|Замените A1 на адрес вашей ячейки с числом|Проверьте результат для чисел 0, 1, 10, 15, 20, 99, 100, 999|При необходимости скорректируйте названия чисел (например, "два" → "две" для женского рода)
-->
Способ 2: Пользовательская функция на VBA для любых чисел
Для чисел больше 999 (тысячи, миллионы) простые формулы становятся громоздкими. Здесь на помощь приходит VBA — язык программирования для Excel. Мы создадим функцию NumToText, которая будет работать с числами до 1 000 000 000.
Шаг 1. Откройте редактор VBA:
- 🖥️ Нажмите
Alt + F11(или перейдите вВид → Макрос → Редактор Visual Basic). - 📄 В окне Project Explorer найдите вашу книгу, кликните правой кнопкой по
Лист1(или другому листу) и выберитеInsert → Module.
Шаг 2. Вставьте код функции:
Function NumToText(ByVal n As Double, Optional currency As String = "руб") As String
Dim rubles As Variant, kop As Variant
Dim temp As String, i As Integer
Dim ones(1 To 9) As String, teens(11 To 19) As String, tens(1 To 9) As String
Dim hundreds(1 To 9) As String, scales(1 To 3) As String
' Массивы слов
ones(1) = "один": ones(2) = "два": ones(3) = "три": ones(4) = "четыре"
ones(5) = "пять": ones(6) = "шесть": ones(7) = "семь"
ones(8) = "восемь": ones(9) = "девять"
teens(11) = "одиннадцать": teens(12) = "двенадцать"
teens(13) = "тринадцать": teens(14) = "четырнадцать"
teens(15) = "пятнадцать": teens(16) = "шестнадцать"
teens(17) = "семнадцать": teens(18) = "восемнадцать": teens(19) = "девятнадцать"
tens(1) = "десять": tens(2) = "двадцать": tens(3) = "тридцать"
tens(4) = "сорок": tens(5) = "пятьдесят": tens(6) = "шестьдесят"
tens(7) = "семьдесят": tens(8) = "восемьдесят": tens(9) = "девяносто"
hundreds(1) = "сто": hundreds(2) = "двести": hundreds(3) = "триста"
hundreds(4) = "четыреста": hundreds(5) = "пятьсот"
hundreds(6) = "шестьсот": hundreds(7) = "семьсот"
hundreds(8) = "восемьсот": hundreds(9) = "девятьсот"
scales(1) = "тысяч": scales(2) = "миллион": scales(3) = "миллиард"
' Обработка целой и дробной частей
If n = 0 Then NumToText = "ноль " & GetCurrency(0, currency): Exit Function
temp = ""
' Разбиваем число на тройки (миллиарды, миллионы, тысячи, единицы)
For i = 3 To 1 Step -1
Dim chunk As Integer: chunk = Int(n / (1000 ^ i)) Mod 1000
If chunk > 0 Then
temp = temp & ConvertChunk(chunk, ones, teens, tens, hundreds, scales(i), i) & " "
End If
Next i
' Единицы (остаток)
Dim units As Integer: units = Int(n) Mod 1000
If units > 0 Then temp = temp & ConvertChunk(units, ones, teens, tens, hundreds, "", 0)
' Дробная часть (копейки/центы)
Dim fractional As Integer: fractional = Round((n - Int(n)) * 100)
If fractional > 0 Then
temp = temp & " и " & ConvertChunk(fractional, ones, teens, tens, hundreds, "", 0) & " " & GetCurrency(fractional, currency, True)
Else
temp = temp & " " & GetCurrency(Int(n), currency)
End If
NumToText = Application.WorksheetFunction.Trim(temp)
End Function
' Вспомогательная функция для преобразования тройки цифр
Function ConvertChunk(chunk As Integer, ones(), teens(), tens(), hundreds(), scale As String, scaleIndex As Integer) As String
Dim result As String: result = ""
Dim hundred As Integer, ten As Integer, one As Integer
hundred = Int(chunk / 100)
ten = Int((chunk Mod 100) / 10)
one = chunk Mod 10
' Сотни
If hundred > 0 Then result = result & hundreds(hundred) & " "
' Десятки и единицы
If chunk Mod 100 >= 11 And chunk Mod 100 <= 19 Then
result = result & teens(chunk Mod 100)
Else
If ten > 0 Then result = result & tens(ten) & " "
If one > 0 Then
If scaleIndex = 1 And (ten = 0 Or ten >= 2) Then
' Для тысяч: "одна тысяча", "две тысячи"
If one = 1 Then result = result & "одна "
If one = 2 Then result = result & "две "
Else
result = result & ones(one) & " "
End If
End If
End If
' Масштаб (тысячи, миллионы...)
If scale <> "" Then
Select Case one
Case 1: result = result & "одна " & Left(scale, Len(scale) - 1)
Case 2, 3, 4: result = result & "а " & Left(scale, Len(scale) - 1)
Case Else: result = result & " " & scale
End Select
End If
ConvertChunk = Trim(result)
End Function
' Функция для склонения валют
Function GetCurrency(num As Integer, currency As String, Optional isFractional As Boolean = False) As String
Dim lastTwo As Integer: lastTwo = num Mod 100
Dim lastOne As Integer: lastOne = num Mod 10
If isFractional Then
Select Case currency
Case "руб": GetCurrency = "копеек"
Case "USD", "дол": GetCurrency = "центов"
Case "Евро", "EUR": GetCurrency = "центов"
Case Else: GetCurrency = ""
End Select
Else
Select Case currency
Case "руб"
If lastTwo >= 11 And lastTwo <= 19 Then
GetCurrency = "рублей"
Else
Select Case lastOne
Case 1: GetCurrency = "рубль"
Case 2, 3, 4: GetCurrency = "рубля"
Case Else: GetCurrency = "рублей"
End Select
End If
Case "USD", "дол"
If num = 1 Then
GetCurrency = "доллар"
Else
GetCurrency = "долларов"
End If
Case "Евро", "EUR"
If num = 1 Then
GetCurrency = "евро"
Else
GetCurrency = "евро"
End If
End Select
End If
End Function
Шаг 3. Используйте функцию в Excel:
Теперь в любой ячейке можно написать:
=NumToText(A1; "руб")
где A1 — ячейка с числом, а "руб" — валюта (опционально). Поддерживаются варианты: "руб", "USD", "Евро".
Способ 3: Надстройка "ЧислоПрописью" (без программирования)
Если VBA кажется сложным, воспользуйтесь готовой надстройкой. Одна из самых популярных — "ЧислоПрописью" от PlanetaExcel. Она бесплатна, поддерживает рубли, доллары, гривны и работает с числами до 999 триллионов.
Как установить:
- 📥 Скачайте файл NumberToWords.xlam (проверено на вирусы).
- 🖥️ В Excel перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. - 📂 Нажмите
Обзор, выберите скачанный файл и подтвердите установку.
Как использовать:
После установки появится новая функция =ЧислоПрописью(). Синтаксис:
=ЧислоПрописью(число; [валюта]; [копейки]; [регистр]; [род])
Примеры:
| Формула | Результат |
|---|---|
=ЧислоПрописью(1234,56; "руб") | "Одна тысяча двести тридцать четыре рубля 56 копеек" |
=ЧислоПрописью(5; "USD";;1) | "ПЯТЬ ДОЛЛАРОВ" |
=ЧислоПрописью(21; "руб";;0;1) | "двадцать один рубль" (мужской род) |
⚠️ Внимание: Надстройка может конфликтовать с другими VBA-скриптами. Если после установки Excel начинает тормозить, отключите её в Файл → Параметры → Надстройки.
Использую VBA-макросы|Устанавливаю надстройки|Пишу формулы вручную|Копирую из онлайн-конвертеров|Не занимаюсь этим
-->
Способ 4: Онлайн-конвертеры (для разовых задач)
Если нужно срочно конвертировать 1–2 числа и устанавливать надстройки нет времени, воспользуйтесь онлайн-сервисами. Они не требуют регистрации и работают в браузере.
Топ-3 проверенных сервиса:
- 🌍 Calculat.org — поддерживает рубли, доллары, евро, гривны. Есть настройка регистра (заглавные/строчные буквы).
- 🌍 Num-Word.ru — конвертирует числа до 1018 с учётом падежей.
- 🌍 AbakBot — позволяет скопировать результат в Excel одним кликом.
Как перенести результат в Excel:
- Введите число на сайте и получите текстовый вариант.
- Скопируйте результат (
Ctrl + C). - В Excel вставьте как значения (
ПКМ → Параметры вставки → Значения), чтобы избежать форматирования.
⚠️ Внимание: Онлайн-сервисы не гарантируют конфиденциальность. Не вводите в них реальные финансовые данные (номера счетов, суммы договоров).
Что делать, если онлайн-сервис выдаёт ошибку?
Проверьте, не превышает ли число лимит сервиса (обычно до 1015).
Убедитесь, что в числе используете точку как разделитель дробной части (например, 1234.56, а не 1234,56).
Попробуйте другой браузер (некоторые сервисы не работают в Safari).
Отключите блокировщики рекламы (они могут ломать скрипты на сайте).
Способ 5: Power Query для пакетной обработки
Если у вас тысячи строк с числами, которые нужно конвертировать в текст, ручные методы не подойдут. Здесь поможет Power Query — инструмент для преобразования данных, встроенный в Excel 2016+.
Алгоритм действий:
- 📊 Выделите столбец с числами и перейдите в
Данные → Получить данные → Из таблицы/диапазона. - 🔄 В открывшемся редакторе Power Query добавьте пользовательский столбец (
Добавить столбец → Пользовательский). - 📝 Введите формулу на языке M:
= Number.ToText([Число], "ru-RU")где
[Число]— название вашего столбца. - ✅ Нажмите
Закрыть и загрузить. Результат появится в новой таблице.
Важно: Number.ToText преобразует числа в текст по правилам локали (например, "123" станет "123", а не "сто двадцать три"). Для полноценной прописи используйте комбинацию с VBA или надстройками.
Преимущества Power Query:
- ⚡ Обрабатывает миллионы строк за секунды.
- 🔄 Позволяет обновлять данные одним кликом (
Данные → Обновить все). - 📎 Сохраняет связь с исходными данными (при их изменении результат пересчитывается автоматически).
Ошибки и их решения
При переводе чисел в текст пользователи часто сталкиваются с типичными проблемами. Вот как их избежать:
| Ошибка | Причина | Решение |
|---|---|---|
Функция возвращает #ИМЯ? |
Неподдерживаемый синтаксис или опечатка в имени функции | Проверьте регистр (например, NumToText, а не numtotext). Убедитесь, что модуль VBA подключён. |
| Неправильное склонение валют (например, "1 рубля") | Ошибка в логике функции GetCurrency |
Добавьте исключения для чисел 11–19 в код VBA (см. раздел про макросы). |
Числа больше 999 отображаются как #ЗНАЧ! |
Формула не адаптирована для тысяч/миллионов | Используйте VBA или надстройку (способы 2–3). |
| В результате лишние пробелы | Ошибка в функции СЦЕПИТЬ или Trim в VBA |
Оберните результат в =СЖПРОБЕЛЫ(). |
Дополнительные советы:
- 🔍 Для отладки VBA используйте
Debug.Print— он выводит промежуточные значения в окноImmediate Window(Ctrl + Gв редакторе). - 📊 Если числа хранятся как текст (например,
'123), предварительно конвертируйте их в числовой формат функцией=ЗНАЧЕН(). - 🌐 Для Google Таблиц используйте
=ARABIC_TO_ROMAN()(только для римских чисел) или скрипты на Google Apps Script.
FAQ: Частые вопросы
Можно ли перевести отрицательные числа?
Да, но потребуется доработка формулы или VBA-кода. Например, в макросе NumToText добавьте проверку:
If n < 0 Then
NumToText = "минус " & NumToText(Abs(n), currency)
Exit Function
End If
Как добавить слово "целых" для дробных чисел (например, "12 целых 34 сотых")?
Модифицируйте функцию NumToText, добавив условие для дробной части:
If fractional > 0 Then
temp = temp & " целых " & ConvertChunk(fractional, ones, teens, tens, hundreds, "", 0) & " сотых"
End If
Работает ли это в Excel для Mac?
Да, но с оговорками:
- VBA поддерживается, но некоторые функции (например,
Declension) могут требовать адаптации. - Надстройки (
.xlam) устанавливаются черезTools → Excel Add-ins. - В Excel 2016 для Mac нет Power Query — используйте Power Query Online или обновляйтесь до Excel 2019+.
Как перевести даты в текст (например, "15 марта 2026 года")?
Используйте комбинацию функций ДЕНЬ(), МЕСЯЦ(), ГОД() и ВЫБОР():
=ВЫБОР(ДЕНЬ(A1);
"первое","второе","третье","четвёртое","пятое",
"шестое","седьмое","восьмое","девятое","десятое",
...,"тридцатое","тридцать первое"
) & " " &
ВЫБОР(МЕСЯЦ(A1);
"января","февраля","марта","апреля","мая","июня",
"июля","августа","сентября","октября","ноября","декабря"
) & " " &
ЧислоПрописью(ГОД(A1)) & " года"
Можно ли конвертировать числа в римские (I, II, III...)?
Да, для этого есть встроенная функция =РИМСКОЕ(). Примеры:
=РИМСКОЕ(2026) → "MMXXIV"
=РИМСКОЕ(49; 1) → "XLIX" (формат без упрощений)
Для обратного преобразования используйте =АРАБСКОЕ().