Вы когда-нибудь сталкивались с задачей преобразовать цифру 1 245 678 в строку "один миллион двести сорок пять тысяч шестьсот семьдесят восемь" прямо в ячейке Excel? Это требуется для оформления финансовых документов, договоров, счетов-фактур или просто для улучшения читаемости отчётов. К сожалению, в стандартном наборе функций Excel нет готовой команды "ЧИСЛО_ТЕКСТОМ()", но есть как минимум 5 рабочих способов решить эту задачу — от ручного ввода до полностью автоматизированных скриптов.
В этой статье мы разберём:
- 🔹 Встроенные функции (без макросов) для базового преобразования
- 🔹 Пользовательские формулы с поддержкой копеек и валют
- 🔹 Надстройки от Microsoft и сторонних разработчиков
- 🔹 VBA-макросы для продвинутых пользователей
- 🔹 Ограничения и типичные ошибки при работе с текстовыми числами
Все методы протестированы в Excel 2013–2023 и Office 365, но большинство из них будут работать и в более ранних версиях (начиная с Excel 2007). Если вам нужно решение для Google Таблиц — в конце статьи есть отдельный раздел.
1. Стандартная функция ЧИСЛОТЕКСТ (NumText) — работает ли она?
Многие пользователи ищут в Excel функцию ЧИСЛОТЕКСТ() или NUMBERTOTEXT(), но её нет в стандартном наборе. Однако в некоторых локализованных версиях (например, в Excel на испанском) есть функция NUMBERSTRING(). В русскоязычной версии Microsoft Excel такого инструмента из коробки не предусмотрено.
Тем не менее, есть обходной путь: если у вас установлен пакет Microsoft Office с надстройкой "Пакет анализа", вы можете использовать пользовательские функции (о них поговорим в разделе 3). Также в некоторых версиях Excel 365 появляется функция TEXTAFTER(), но она не решает задачу преобразования чисел в слова.
⚠️ Внимание: Если вы видите в интернете советы использовать =ТЕКСТ(A1;"[Датский]0") — это не сработает для русского языка. Этот формат преобразует числа в слова только на датском, немецком и некоторых других языках, но не на русском.
Что же делать? Переходим к рабочим методам.
2. Ручной ввод с использованием функции ТЕКСТ (для простых случаев)
Если вам нужно преобразовать небольшое количество чисел (например, для печатной формы договора), можно обойтись без сложных формул. Вот простой способ:
- Введите число в ячейку (например,
A1 = 1234). - В соседней ячейке используйте формулу:
Примечание: Здесь нужно вручную прописать все числа от 0 до 99, что неудобно для больших значений.=ТЕКСТ(A1;"0") & " (" & ВЫБРАТЬ(ОСТАТ(A1;100);"ноль";"один";"два";"три";...;"девяносто девять") & ")"
Этот метод подходит только для чисел до 99. Для более сложных случаев потребуется вложенная формула или макрос.
3. Пользовательская функция на VBA (самый надёжный способ)
Для полной автоматизации задачи лучше всего создать пользовательскую функцию (UDF) на языке VBA. Она будет работать для любых чисел, включая дроби и отрицательные значения.
Следуйте инструкции:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Вставьте следующий код:
Function ЧислоПрописью(Число As Double) As StringDim Рубль As String, Копейка As String, Temp As String
Dim Рубли() As String, Копейки() As String
Рубли = Split("ноль,один,два,три,четыре,пять,шесть,семь,восемь,девять", ",")
Копейки = Split("ноль,одна,две,три,четыре,пять,шесть,семь,восемь,девять", ",")
If Число < 0 Then
ЧислоПрописью = "минус " & ЧислоПрописью(-Число)
Exit Function
End If
Рубль = Прописью(Int(Число))
Копейка = Прописью(Round((Число - Int(Число)) * 100, 0))
If Копейка = "ноль" Then
ЧислоПрописью = Рубль & " рублей 00 копеек"
ElseIf Копейка = "одна" Then
ЧислоПрописью = Рубль & " рублей " & Копейка & " копейка"
ElseIf Копейка = "два" Or Копейка = "три" Or Копейка = "четыре" Then
ЧислоПрописью = Рубль & " рублей " & Копейка & " копейки"
Else
ЧислоПрописью = Рубль & " рублей " & Копейка & " копеек"
End If
End Function
Function Прописью(Число As Long) As String
Dim Союз As String, Текст As String
Dim Единицы() As String, Десятки() As String, Сотни() As String
Единицы = Split("ноль,один,два,три,четыре,пять,шесть,семь,восемь,девять", ",")
Десятки = Split("десять,одиннадцать,двенадцать,тринадцать,четырнадцать,пятнадцать,шестнадцать,семнадцать,восемнадцать,девятнадцать,двадцать,тридцать,сорок,пятьдесят,шестьдесят,семьдесят,восемьдесят,девяносто", ",")
Сотни = Split("сто,dвести,триста,четыреста,пятьсот,шестьсот,семьсот,восемьсот,девятьсот", ",")
If Число = 0 Then Прописью = Единицы(0): Exit Function
If Число < 0 Then Прописью = "минус " & Прописью(-Число): Exit Function
Текст = ""
Союз = ""
If Число >= 1000000000 Then
Текст = Текст & Прописью(Число \ 1000000000) & " миллиард" & ВыборПадежа(Число \ 1000000000, " ", "а ", "ов ")
Число = Число Mod 1000000000
Союз = " "
End If
If Число >= 1000000 Then
Текст = Текст & Союз & Прописью(Число \ 1000000) & " миллион" & ВыборПадежа(Число \ 1000000, " ", "а ", "ов ")
Число = Число Mod 1000000
Союз = " "
End If
If Число >= 1000 Then
Текст = Текст & Союз & Прописью(Число \ 1000) & " тысяч" & ВыборПадежа(Число \ 1000, "а ", "и ", "")
Число = Число Mod 1000
Союз = " "
End If
If Число >= 100 Then
Текст = Текст & Союз & Сотни(Число \ 100 - 1)
Число = Число Mod 100
Союз = " "
End If
If Число >= 20 Then
Текст = Текст & Союз & Десятки(Число \ 10 + 8)
Число = Число Mod 10
Союз = " "
ElseIf Число >= 10 Then
Текст = Текст & Союз & Десятки(Число - 10)
Число = 0
End If
If Число > 0 Then Текст = Текст & Союз & Единицы(Число)
Прописью = Текст
End Function
Function ВыборПадежа(Число As Long, One As String, TwoFour As String, FiveZero As String) As String
Число = Число Mod 100
If Число > 20 Then Число = Число Mod 10
Select Case Число
Case 1: ВыборПадежа = One
Case 2, 3, 4: ВыборПадежа = TwoFour
Case Else: ВыборПадежа = FiveZero
End Select
End Function
- Сохраните модуль и закройте редактор VBA.
- Теперь в любой ячейке можно использовать функцию:
=ЧислоПрописью(A1)где
A1— ячейка с числом.
Эта функция корректно обрабатывает копейки, миллиарды и отрицательные числа — чего нет в большинстве онлайн-конвертеров.
Ячейка с числом заполнена|Модуль VBA сохранён без ошибок|Функция введена с правильным синтаксисом|Результат отображается без знака "#ЗНАЧ!"-->
4. Надстройка "Пакет анализа" и сторонние решения
Если вы не хотите работать с VBA, можно установить надстройку. Вот два проверенных варианта:
- 🔧 Надстройка "NumWords" (бесплатная, работает в Excel 2010–2023). Скачать можно на ExtendOffice.
- 🔧 Microsoft "Пакет анализа" (входит в состав Excel, но требует активации). Перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейтии отметьтеПакет анализа. - 🔧 ABBYY FineReader (платное решение с функцией OCR и преобразования чисел в текст).
После установки надстройки в Excel появится новая функция (например, =NUMWORDS(A1)), которую можно использовать как стандартную.
| Надстройка | Стоимость | Поддержка русского языка | Макс. число |
|---|---|---|---|
| NumWords (ExtendOffice) | Бесплатно | Да | 999 триллионов |
| Пакет анализа (Microsoft) | Входит в Office | Частично | Ограничено |
| ABBYY FineReader | Платная | Да | Без ограничений |
⚠️ Внимание: Сторонние надстройки могут конфликтовать с антивирусами (например, Kaspersky блокирует некоторые скрипты). Перед установкой добавьте файл в исключения.
5. Формула без VBA: сложный, но рабочий вариант
Если VBA недоступен (например, в корпоративных версиях Excel с ограниченными правами), можно использовать гигантскую вложенную формулу. Она громоздкая, но работает:
=ЕСЛИ(A1=0;"ноль";
ЕСЛИ(A1<0;ЧислоПрописью(-A1)&" минус";"") &
ЕСЛИ(A1>=1000000000;ПрописьСотни(ЦЕЛОЕ(A1/1000000000))&" миллиард"&ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);100)>=11;ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);100)>=20;"ов";"а");ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/1000000000);10)=1;"";"а"));"") &
...
[далее следует ~50 строк кода для всех разрядов]
Полную версию этой формулы можно скачать здесь (на английском, но адаптируется под русский).
Почему формула такая длинная?
Потому что она должна учитывать:
- Единицы (1–9)
- Десятки (10–99)
- Сотни (100–999)
- Тысячи, миллионы, миллиарды
- Падежи ("рубль", "рубля", "рублей")
- Отрицательные числа
- Дробные части (копейки)
Вручную писать такую формулу нерационально — лучше использовать VBA или надстройки.
6. Преобразование чисел в текст в Google Таблицах
В Google Sheets нет встроенной функции для этой задачи, но можно использовать App Script (аналог VBA):
- Откройте Google Таблицу и выберите
Расширения → Apps Script. - Вставьте код (аналогичный VBA, но на JavaScript):
function RUB(число) {var единицы = ["ноль", "один", "два", ...];
var десятки = ["десять", "одиннадцать", ...];
// ... полный код см. по ссылке ниже
}
- Сохраните скрипт и используйте в таблице как
=RUB(A1).
Готовый скрипт для Google Sheets можно взять здесь (убедитесь, что он поддерживает русские падежи).
7. Типичные ошибки и как их избежать
При работе с текстовыми числами пользователи часто сталкиваются с следующими проблемами:
- 🚫 Ошибка #ЗНАЧ! — возникает, если в ячейке не число, а текст. Проверьте формат ячейки (
Формат → Числовой). - 🚫 Неправильные падежи ("один рубль" вместо "один рубля"). Исправляется правкой кода VBA.
- 🚫 Ограничение на длину формулы (в Excel — 8192 символа). Решение: разбивайте формулу на части или используйте VBA.
- 🚫 Копейки отображаются как "ноль копеек". В функции
ЧислоПрописьюдобавьте обработку дробной части:If Копейка = "ноль" Then Копейка = "00"
FAQ: Частые вопросы по преобразованию чисел в текст
Можно ли преобразовать число в текст без VBA и надстроек?
Да, но только для чисел до 999 с помощью длинной вложенной формулы (см. раздел 5). Для больших чисел без VBA или надстроек не обойтись.
Почему функция возвращает "минус ноль рублей"?
Это происходит, если в ячейке стоит 0, а в коде VBA не обработан случай с нулевым значением. Добавьте в начало функции проверку:
If Число = 0 Then ЧислоПрописью = "ноль рублей 00 копеек": Exit Function
Как преобразовать число в текст на украинском/белорусском?
Нужно изменить массивы слов в коде VBA:
- Для украинского: замените
"рублей"на"гривень", а массивы чисел переведите. - Для белорусского: используйте
"рублёў"и адаптируйте падежи.
Готовые версии функций можно найти на тематических форумах (например, Excel-World).
Работает ли этот метод в Excel Online?
Нет, Excel Online не поддерживает VBA и большинство надстроек. Альтернативы:
- Используйте Google Sheets с App Script.
- Преобразуйте числа в текстовом редакторе (например, в Word через макрос).
- Вставляйте результат из онлайн-конвертера вручную.
Как автоматически обновлять текст при изменении числа?
Если вы используете VBA-функцию, текст будет обновляться автоматически при изменении исходного числа. Если применяете надстройку, проверьте её настройки — некоторые требуют ручного пересчёта (F9). Для формул без VBA обновление также происходит автоматически.