Преобразование чисел в пропись в Excel: от «1» до «один миллион»

Введение: зачем Excelу «говорить» числами?

Вы когда-нибудь сталкивались с задачей автоматически сгенерировать в Excel текстовый вариант числа? Например, превратить 1 256 в «одна тысяча двести пятьдесят шесть»? Это не просто прихоть — такие преобразования требуются в бухгалтерских документах (пропись сумм в договорах), чеках, отчётах для госорганов и даже при создании персонализированных сертификатов. Вручную переписывать сотни строк? Неэффективно. К счастью, Excel предлагает несколько способов автоматизировать этот процесс — от встроенных функций до пользовательских скриптов.

Главная сложность кроется в русской морфологии: числа изменяются по родам («один рубль», но «одна копейка»), падежам («пятью тысячами») и имеют исключения («сорок, девяносто»). Готовых функций для такого преобразования в Excel нет — но есть обходные пути. В этой статье разберём 5 рабочих методов с примерами для русского языка, включая формулы, VBA-макросы и сторонние надстройки. Вы узнаете, какой способ выбрать в зависимости от объёма данных и требуемой точности.

Способ 1: Функция ПРОПНАЧ (для английского) и её ограничения

Начнём с очевидного: в Excel есть встроенная функция ПРОПНАЧ() (англ. SPELLNUMBER), которая преобразует числа в текст. Но тут есть подвох: она работает только для английского языка. Если вы попробуете применить её к русскоязычной версии Excel, получите ошибку #ИМЯ? или английский вариант числа («one thousand» вместо «одна тысяча»).

Чтобы функция заработала на английском, выполните:

  1. Переключите язык интерфейса Excel на английский в Файл → Параметры → Язык.
  2. Введите формулу:
    =SPELLNUMBER(1256)
  3. Получите результат: «one thousand, two hundred fifty-six».
⚠️ Внимание: Даже если вы используете английскую версию функции, она не учитывает валюту (рубли/доллары) и падежи. Для русских документов этот метод бесполезен без дополнительных доработок.

Если вам срочно нужно преобразовать числа на английском, этот способ сработает. Для русского языка читайте дальше — там интереснее!

📊 Как часто вам нужно преобразовывать числа в текст?
Ежедневно
Раз в неделю
Редко
Никогда

Способ 2: Пользовательская функция на VBA для русского языка

Самый гибкий и точный метод — создать пользовательскую функцию на VBA, которая будет учитывать все нюансы русского языка. Ниже приведён код, который преобразует числа от 0 до 999 999 999 с правильными окончаниями для рублей и копеек.

Как установить:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Скопируйте туда этот код:
    Function NumToText(ByVal n As Currency, Optional valuta As String = "руб") As String
    

    Dim RUB(3) As String, COP(3) As String, temp As String

    Dim i As Integer, k As Integer

    RUB(0) = "рубль": RUB(1) = "рубля": RUB(2) = "рублей"

    COP(0) = "копейка": COP(1) = "копейки": COP(2) = "копеек"

    If n = 0 Then NumToText = "ноль " & RUB(2): Exit Function

    temp = ""

    k = Int(n / 1000000)

    If k > 0 Then temp = Million(k, True) & " "

    k = Int((n - k * 1000000) / 1000)

    If k > 0 Then temp = temp & Thousand(k, True) & " "

    k = Int(n - Int(n / 1000) * 1000)

    If k > 0 Then temp = temp & Thousand(k, False)

    If valuta = "руб" Then

    k = k Mod 100

    If k >= 11 And k <= 19 Then i = 2 Else i = k Mod 10

    Select Case i

    Case 1: temp = temp & " " & RUB(0)

    Case 2, 3, 4: temp = temp & " " & RUB(1)

    Case Else: temp = temp & " " & RUB(2)

    End Select

    Else

    k = k Mod 100

    If k >= 11 And k <= 19 Then i = 2 Else i = k Mod 10

    Select Case i

    Case 1: temp = temp & " " & COP(0)

    Case 2, 3, 4: temp = temp & " " & COP(1)

    Case Else: temp = temp & " " & COP(2)

    End Select

    End If

    NumToText = Application.WorksheetFunction.Proper(temp)

    End Function

    Function Million(ByVal n As Integer, ByVal male As Boolean) As String

    Million = Thousand(n, male) & " миллион" & Choose(n Mod 100 > 10 And n Mod 100 < 20 Or n Mod 10 <> 1, "ов", "")

    End Function

    Function Thousand(ByVal n As Integer, ByVal male As Boolean) As String

    Dim temp As String, i As Integer

    temp = ""

    i = Int(n / 100)

    If i > 0 Then temp = Hundred(i, male) & " "

    i = n Mod 100

    If i > 0 Then temp = temp & Tens(i, male)

    If n Mod 100 > 10 And n Mod 100 < 20 Then

    temp = temp & " тысяч"

    Else

    Select Case n Mod 10

    Case 1: temp = temp & " тысяча"

    Case 2, 3, 4: temp = temp & " тысячи"

    Case Else: temp = temp & " тысяч"

    End Select

    End If

    Thousand = temp

    End Function

    Function Hundred(ByVal n As Integer, ByVal male As Boolean) As String

    Hundred = Choose(n, "", "сто", "двести", "триста", "четыреста", _

    "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")

    End Function

    Function Tens(ByVal n As Integer, ByVal male As Boolean) As String

    Dim temp As String

    If n < 10 Then

    temp = Choose(n, "", "один", "два", "три", "четыре", "пять", _

    "шесть", "семь", "восемь", "девять")

    ElseIf n < 20 Then

    temp = Choose(n, "", "десять", "одиннадцать", "двенадцать", _

    "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", _

    "семнадцать", "восемнадцать", "девятнадцать")

    Else

    temp = Choose(Int(n / 10), "", "десять", "двадцать", "тридцать", _

    "сорок", "пятьдесят", "шестьдесят", "семьдесят", _

    "восемьдесят", "девяносто")

    If n Mod 10 > 0 Then temp = temp & " " & Tens(n Mod 10, male)

    End If

    Tens = temp

    End Function

  4. Закройте редактор VBA и сохраните файл как .xlsm (с поддержкой макросов).

Теперь в любой ячейке можно использовать функцию:

  • 📌 =NumToText(A1) — преобразует число из ячейки A1 в рубли («одна тысяча двадцать пять рублей»).
  • 📌 =NumToText(A1; "коп") — преобразует в копейки («пятьдесят шесть копеек»).

Убедитесь, что файл сохранён как .xlsm|

Включите макросы при открытии файла|

Проверьте функцию на числах 0, 1, 5, 11, 21, 100, 101, 999|

Протестируйте с дробными числами (например, 1256.78)

-->

⚠️ Внимание: Функция не обрабатывает отрицательные числа и числа больше 999 999 999. Для расширенной версии добавьте в код обработку минуса и миллиардов.

Способ 3: Формулы без VBA (для чисел до 9999)

Если VBA вам не знаком или макросы отключены, можно обойтись формулами. Этот метод подходит для чисел до 9 999 и требует предварительной настройки таблицы с «словами». Создайте на листе Слова следующий справочник:

ТипЗначениеТекст
Единицы1один
2два
3три
4четыре
5пять
6шесть
7семь
8восемь
9девять
Десятки10десять
20двадцать
30тридцать
40сорок
50пятьдесят
60шестьдесят
70семьдесят
80восемьдесят
90девяносто

Затем используйте эту формулу (для числа в ячейке A1):

=ЕСЛИ(A1=0;"ноль";

ЕСЛИ(A1<10;ДВССЫЛ("Слова!C"&A1+1);

ЕСЛИ(A1<20;ДВССЫЛ("Слова!C"&A1+10);

ЕСЛИ(A1<100;

ДВССЫЛ("Слова!C"&ЦЕЛОЕ(A1/10)+19) &

ЕСЛИ(ОСТАТ(A1;10)>0;" "&ДВССЫЛ("Слова!C"&ОСТАТ(A1;10)+1);"");

ЕСЛИ(A1<1000;

ДВССЫЛ("Слова!C"&ЦЕЛОЕ(A1/100)+29) & " " &

ЕСЛИ(ОСТАТ(A1;100)>0;NumToText(ОСТАТ(A1;10));"") & " сот";

ЕСЛИ(A1<10000;

NumToText(ЦЕЛОЕ(A1/1000)) &

" тысяча" &

ЕСЛИ(ОСТАТ(A1;1000)>0;" "&NumToText(ОСТАТ(A1;100));"");

"Слишком большое число"

)

)

)

)

)

Эта формула рекурсивна (вызывает саму себя), поэтому в Excel 2019+ её нужно вводить как динамический массив (нажать Ctrl+Shift+Enter). Минус метода — ограничение на 9 999 и необходимость ручной настройки справочника.

Способ 4: Надстройки от сторонних разработчиков

Если не хочется возиться с VBA или формулами, можно воспользоваться готовыми надстройками. Они платные, но часто предлагают расширенный функционал: поддержку валют, падежей, дробных чисел и даже экспорт в Word.

Популярные решения:

  • 💰 «ЧислоПрописью» от Excel-Master — поддерживает рубли, доллары, евро, гривны. Стоимость: ~500 руб.
  • 📊 «Акцент: Числа прописью» — работает с 1С, имеет гибкие настройки склонений. Цена: от 800 руб.
  • 🌍 «NumWord» — мультиязычная надстройка (русский, английский, немецкий). Бесплатная версия с ограничениями.

Как установить надстройку:

  1. Скачайте файл надстройки (.xlam или .xla).
  2. В Excel перейдите в Файл → Параметры → Надстройки.
  3. Нажмите ПерейтиОбзор и выберите скачанный файл.
  4. Активируйте надстройку и используйте новую функцию (например, =ЧислоПрописью(A1)).
⚠️ Внимание: Перед покупкой проверьте совместимость надстройки с вашей версией Excel (32-bit или 64-bit). Некоторые решения не работают в Excel Online.
Как проверить разрядность Excel?

Откройте Excel, перейдите в Файл → Учётная запись → О программе Excel. В строке «Версия» будет указано «32-разрядная» или «64-разрядная».

Способ 5: Онлайн-конвертеры и Power Query

Если вам нужно одноразово преобразовать список чисел, можно воспользоваться онлайн-сервисами или Power Query. Первый вариант подходит для небольших объёмов, второй — для автоматизации в больших таблицах.

Онлайн-сервисы:

  • 🌐 NumWord — поддерживает рубли и копейки, экспорт в Excel.
  • 🌐 Text.ru — простой конвертер чисел в текст (без валют).

Power Query (для Excel 2016+):

  1. Выделите столбец с числами и нажмите Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = Number.ToText([Число], "ru-RU")
    (Эта формула вернёт число словами на русском, но без склонений.)
  3. Нажмите Закрыть и загрузить.

Минус Power Query — отсутствие поддержки валют и падежей. Зато метод бесплатный и не требует VBA.

Сравнение методов: какой выбрать?

Выбор способа зависит от ваших задач. Ниже таблица с сравнением ключевых параметров:

МетодМакс. числоПоддержка валютСклоненияСложностьСтоимость
VBA-функция999 999 999Рубли/копейкиДаСредняяБесплатно
Формулы9 999НетНетВысокаяБесплатно
НадстройкиНеогр.МultipleДаНизкаяОт 500 руб.
Онлайн-сервисыЗависит от сервисаЧастичноЧастичноНизкаяБесплатно
Power QueryНеогр.НетНетСредняяБесплатно

Типичные ошибки и как их избежать

При преобразовании чисел в текст пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые и способы их решения:

  • 🔢 Ошибка #ИМЯ? — возникает, если функция ПРОПНАЧ используется в русскоязычном Excel. Решение: используйте VBA или надстройки.
  • 💰 Неправильные склоненияодин рубль» вместо «одна тысяча рублей») — проверьте код VBA на обработку падежей или обновите надстройку.
  • 📉 Обрезание больших чисел — если число больше 999 999 999, VBA-функция из примера не сработает. Решение: доработайте код или используйте надстройки.
  • 🔄 Циклические ссылки в формулах — при рекурсивных вызовах NumToText в формулах. Решение: включите итеративные вычисления в Файл → Параметры → Формулы.

Ещё одна частая ошибка — неверный формат ячеек. Убедитесь, что исходные данные имеют формат Общий или Числовой, а не Текстовый. Иначе Excel воспримет 1256 как текст, и функции не сработают.

FAQ: Ответы на частые вопросы

Можно ли преобразовать числа с копейками (например, 1256.78)?

Да, но для этого нужно доработать VBA-функцию или использовать надстройки. В приведённом выше коде функция NumToText поддерживает второй параметр: =NumToText(ЦЕЛОЕ(A1); "руб") & " " & NumToText(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0); "коп").

Почему после обновления Excel перестала работать моя VBA-функция?

Вероятно, в новой версии Excel изменились настройки безопасности макросов. Проверьте: Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов и выберите «Включить все макросы» (не рекомендуется для недоверенных файлов).

Как преобразовать числа в текст на украинском или казахском?

Для других языков нужно адаптировать VBA-код: заменить массивы со словами (RUB, COP) и правила склонений. Например, для украинского языка «гривня/гривні/гривень». Готовые решения можно найти на форумах, например, Excel-World.

Можно ли использовать это в Google Таблицах?

В Google Sheets нет аналога VBA, но можно использовать Apps Script. Вот пример функции:

function numToText(n) {

const units = ["", "один", "два", "три", ...];

const tens = ["", "десять", "двадцать", ...];

// Дополните логику склонений

return "реализация функции";

}

Чтобы установить, перейдите в Расширения → Apps Script.

Как автоматически обновлять текст при изменении чисел?

Если вы используете VBA-функцию или формулы, текст обновляется автоматически. Для надстроек проверьте настройки: некоторые требуют ручного обновления (кнопка «Обновить» на панели надстройки).