Как в Excel конвертировать цифры в текст прописью: от простых формул до VBA

Преобразование чисел в текстовый формат прописью — задача, с которой сталкиваются бухгалтеры, финансовые аналитики и даже обычные пользователи при оформлении договоров, квитанций или отчётов. В 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, но абсолютно не подходит для обработки больших массивов данных.

Алгоритм прост:

  1. Выделите ячейку рядом с числом (например, если число в A1, результат будет в B1).
  2. Введите текст прописью, используя правила русского языка для числительных.
  3. При необходимости добавьте валюту (рубли/доллары) и копейки/центы.

Пример для числа 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:

  1. Скачайте файл .xlam с официального сайта.
  2. Откройте Файл → Параметры → Надстройки.
  3. Нажмите "Перейти" внизу окна, затем "Обзор" и выберите скачанный файл.
  4. Активируйте надстройку и перезапустите Excel.

После установки появится новая функция =ЧИСЛОПРОПИСЬЮ(A1), которая работает аналогично VBA-решению, но без необходимости писать код.

НадстройкаСтоимостьПоддержка валютМакс. число
NumWordБесплатноРубли, доллары999 999 999
ЧислоПрописьюПлатно (~500 руб.)Рубли, евро, долларыНеограничено
Excel Number to WordsУсловно-бесплатноМультивалютная1018
⚠️ Внимание: Перед установкой надстроек проверьте их совместимость с вашей версией Excel. Некоторые решения (например, ЧислоПрописью) требуют Excel 2013 или новее.

Метод 5: Power Query (для обработки больших данных)

Power Query — мощный инструмент для трансформации данных, который часто упускают из виду при решении подобных задач. Он позволяет создавать пользовательские функции для преобразования чисел в текст прописью и применять их к тысячам строк.

Алгоритм действий:

  1. Импортируйте данные в Power Query (Данные → Получить данные → Из таблицы/диапазона).
  2. Добавьте пользовательский столбец с формулой на языке 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

  3. Загрузите данные обратно в 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 нет функции "ЧИСЛОПРОПИСЬЮ" даже после установки надстройки?

Вероятно, надстройка не активирована. Проверьте:

  1. Файл → Параметры → Надстройки.
  2. Внизу окна нажмите "Перейти" и убедитесь, что галочка стоит рядом с названием надстройки.

Если проблема остаётся — переустановите надстройку.

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

Для этого нужно модифицировать VBA-код или использовать специализированные надстройки (например, NumWord UA для украинского). Основное отличие — правила склонения и названия разрядов (например, "тысяча" vs "тисяча").

Можно ли автоматически добавлять "00 копеек", если число целое?

Да, в VBA-коде добавьте проверку:

If Kop = 0 Then Temp = Temp & " 00 копеек"

Или в формульном методе используйте:

=ЕСЛИ(ОСТАТ(A1;1)=0; ВашаФормула & " 00 копеек"; ВашаФормула)

Почему при копировании ячейки с результатом в другой файл функция перестаёт работать?

Если вы использовали VBA, код остаётся в исходном файле. Чтобы функция работала в новом файле:

  1. Откройте редактор VBA (Alt + F11).
  2. Экспортируйте модуль (ПКМ по модулю → Export File).
  3. Импортируйте его в новый файл (File → Import File).

Для надстроек достаточно установить их в новом файле.