Вы устали вручную переписывать числовые значения в текстовый формат? В Microsoft Excel нет встроенной функции для автоматического преобразования цифр в пропись на русском языке, но это не означает, что задача невыполнима. Существует как минимум 5 рабочих способов решить эту проблему — от простых формул до продвинутых макросов. В зависимости от версии программы (Excel 2010, 2016, 2019 или Microsoft 365) и ваших навыков работы с таблицами можно выбрать оптимальный метод.
В этой статье мы разберём:
- 🔹 Встроенные функции Excel (с ограничениями для русского языка)
- 🔹 Пользовательские формулы с поддержкой копеек и валюты
- 🔹 Готовые надстройки для быстрого преобразования
- 🔹 VBA-скрипты для автоматизации (включая код для новичков)
- 🔹 Онлайн-конвертеры и внешние инструменты
Особое внимание уделим обработке дробных чисел (копеек/центов) и правильному склонению существительных ("рубль", "рубля", "рублей"). Все примеры адаптированы под российские стандарты оформления документов.
1. Почему в Excel нет стандартной функции для русского языка?
В отличие от английской версии, где есть функция =SPELLNUMBER(), в русскоязычном Excel аналогичного инструмента нет. Это связано с:
- 📌 Сложностью склонений в русском языке (например, "один рубль" vs "два рубля")
- 📌 Отсутствием унифицированных стандартов для финансовой документации в разных странах
- 📌 Техническими ограничениями ранних версий программы (до Excel 2013)
Однако это не означает, что задача нерешаема. Microsoft предлагает обходные пути через:
- Надстройки от сторонних разработчиков (например, NumToText или Русский числительный)
- Пользовательские функции на VBA (Visual Basic for Applications)
- Формулы массивов (для опытных пользователей)
⚠️ Внимание: В Excel Online (веб-версия) возможности по работе с VBA ограничены. Если вам нужно преобразовывать числа прописью в браузере, рассмотрите онлайн-конвертеры или десктопную версию программы.
2. Способ 1: Пользовательская функция на VBA (самый надёжный метод)
Для тех, кто готов немного погрузиться в программирование, VBA-скрипт — это универсальное решение. Оно работает во всех версиях Excel (начиная с 2007) и поддерживает:
- 💰 Правильное склонение валют ("рубль/доллар/евро")
- 📊 Обработку дробных чисел (копейки, центы)
- 🔢 Поддержку отрицательных значений
Чтобы добавить функцию, выполните шаги:
Откройте редактор VBA (Alt + F11)|
Вставьте новый модуль (Insert → Module)|
Скопируйте код функции (см. ниже)|
Сохраните файл как .xlsm (с поддержкой макросов)|
Используйте функцию =РублиПрописью(A1) в ячейках-->
Вот готовый код для вставки:
Function РублиПрописью(Число As Double) As String
Dim Рубли As Variant, Копейки As Variant
Dim ТекстРублей As String, ТекстКопеек As String
' Разделяем рубли и копейки
Рубли = Int(Число)
Копейки = Round((Число - Рубли) * 100, 0)
' Преобразуем рубли
ТекстРублей = ПреобразоватьЧисло(Рубли, True)
' Преобразуем копейки
If Копейки > 0 Then
ТекстКопеек = ПреобразоватьЧисло(Копейки, False)
РублиПрописью = ТекстРублей & " рублей " & Копейки & " копеек"
Else
РублиПрописью = ТекстРублей & " рублей"
End If
End Function
Function ПреобразоватьЧисло(Число As Double, Склонять As Boolean) As String
Dim Единицы As Variant, Десятки As Variant
Dim Сотни As Variant, Текст As String
' Массивы для преобразования
Единицы = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
Десятки = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Сотни = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _
"шестьсот", "семьсот", "восемьсот", "девятьсот")
' Обработка чисел от 0 до 999
If Число = 0 Then
ПреобразоватьЧисло = "ноль"
Exit Function
End If
' Сотни
Текст = Сотни(Int(Число / 100)) & " "
' Десятки и единицы
Число = Число Mod 100
If Число >= 20 Then
Текст = Текст & Десятки(Int(Число / 10)) & " "
Число = Число Mod 10
ElseIf Число >= 10 Then
Select Case Число
Case 10: Текст = Текст & "десять "
Case 11: Текст = Текст & "одиннадцать "
Case 12: Текст = Текст & "двенадцать "
Case 13: Текст = Текст & "тринадцать "
Case 14: Текст = Текст & "четырнадцать "
Case 15: Текст = Текст & "пятнадцать "
Case 16: Текст = Текст & "шестнадцать "
Case 17: Текст = Текст & "семнадцать "
Case 18: Текст = Текст & "восемнадцать "
Case 19: Текст = Текст & "девятнадцать "
End Select
Число = 0
End If
' Единицы
If Число > 0 Then
Текст = Текст & Единицы(Число) & " "
End If
' Склонение для рублей
If Склонять Then
Число = Int(Число)
Select Case Число Mod 100
Case 11 To 19: Текст = Текст & "рублей"
Case Else
Select Case Число Mod 10
Case 1: Текст = Текст & "рубль"
Case 2, 3, 4: Текст = Текст & "рубля"
Case Else: Текст = Текст & "рублей"
End Select
End Select
End If
ПреобразоватьЧисло = Trim(Текст)
End Function
3. Способ 2: Готовые надстройки для Excel
Если работа с кодом вам не подходит, можно воспользоваться бесплатными или платными надстройками. Они устанавливаются за несколько кликов и добавляют в Excel новые функции. Вот топ-3 решения:
| Надстройка | Стоимость | Особенности | Ссылка |
|---|---|---|---|
| NumToText | Бесплатно | Поддерживает рубли, доллары, евро. Работает в Excel 2010-2019 | Скачать |
| Русский числительный | 490 ₽ | Полная поддержка склонений, работа с отрицательными числами | Купить |
| NumberToWords | Бесплатно | Английская версия, но есть русификатор. Требует .NET Framework | Скачать |
Как установить надстройку:
- Скачайте файл с расширением
.xlamили.xlsm. - Откройте Excel и перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Перейти...(илиGo...в английской версии). - Нажмите
Обзор, выберите скачанный файл и подтвердите установку.
⚠️ Внимание: Надстройки от сторонних разработчиков могут содержать вредоносный код. Скачивайте файлы только с официальных сайтов или проверенных источников (например, GitHub). Перед установкой проверьте файл антивирусом.
4. Способ 3: Формулы без VBA (для опытных пользователей)
Если вам нужно одноразовое преобразование или вы работаете в Excel Online, где VBA недоступен, можно использовать комбинацию текстовых функций. Этот метод требует ручной настройки, но не требует программирования.
Пример формулы для числа 1234,56:
=ТЕКСТ(ЦЕЛОЕ(A1);"[ДБЧР] # рубль [ДБЧР] # рубля [ДБЧР] # рублей;") &
ЕСЛИ(ОСТАТ(A1;1)>0,4;"") &
ЕСЛИ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)>0; " " & ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0) & " копеек";"")
Как это работает:
- 🔢
ЦЕЛОЕ(A1)— отделяет целую часть числа (рубли). - 🔢
ТЕКСТ(..., "[ДБЧР] ...")— преобразует число в текст прописью (только для целых чисел!). - 🔢
ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)— вычисляет копейки.
Ограничения метода:
- ❌ Не поддерживает числа больше 999 999.
- ❌ Некорректно склоняет некоторые числительные (например, "два рубля" вместо "два рубля").
- ❌ Не работает с отрицательными значениями.
Как адаптировать формулу для долларов или евро
Замените в формуле слова "рубль"/"рубля"/"рублей" на "доллар"/"доллара"/"долларов" или "евро" (склонение не меняется).
Для евро используйте конструкцию:
=ТЕКСТ(ЦЕЛОЕ(A1);"[ДБЧР] # евро;") & ЕСЛИ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0)>0; " " & ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0) & " центов";"")5. Способ 4: Онлайн-конвертеры (для разовых задач)
Если вам нужно преобразовать цифры в пропись один раз (например, для договора или счёта), проще воспользоваться онлайн-сервисами. Они не требуют установки и работают в любом браузере. Вот проверенные инструменты:
- 🌐 NumToWords.ru — поддерживает рубли, доллары, евро и гривны. Есть API для автоматизации.
- 🌐 Числительное.рф — удобный интерфейс с копированием результата в один клик.
- 🌐 Прописью.онлайн — сохраняет историю преобразований (требуется регистрация).
Как пользоваться:
- Скопируйте число из Excel (например,
15432,78). - Вставьте его в поле на сайте.
- Выберите валюту ("рубли") и нажмите
Преобразовать. - Скопируйте результат обратно в Excel.
⚠️ Внимание: Онлайн-сервисы не подходят для конфиденциальных данных (номера счетов, суммы контрактов). Для работы с финансовой информацией используйте оффлайн-методы (VBA или надстройки).
6. Способ 5: Power Query (для Excel 2016 и новее)
Power Query — это мощный инструмент для преобразования данных, доступный в Excel 2016 и новее (а также в Power BI). С его помощью можно создать пользовательскую функцию для конвертации чисел в текст.
Алгоритм действий:
- Перейдите на вкладку
Данныеи выберитеПолучить данные → Из других источников → Пустой запрос. - В открывшемся редакторе Power Query введите код на языке M:
let
NumberToWords = (number as number) as text =>
let
units = {"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},
teens = {"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"},
tens = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдесят", "восемьдесят", "девяносто"},
hundreds = {"", "сто", "двести", "триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"},
// Функция для преобразования чисел от 0 до 999
ConvertLessThanOneThousand = (n as number) as text =>
let
result =
if n = 0 then "ноль" else
let
hundredPart = Number.IntegerDivide(n, 100),
remainder = n mod 100,
text =
(if hundredPart > 0 then hundreds{hundredPart} & " " else "") &
(if remainder >= 20 then
tens{Number.IntegerDivide(remainder, 10)} & " " &
(if remainder mod 10 > 0 then units{remainder mod 10} else "")
else if remainder >= 10 then
teens{remainder - 10}
else if remainder > 0 then
units{remainder}
else "")
in
Text.Trim(text)
in
result,
// Основная логика
rubles = Number.IntegerDivide(number, 1),
kop = Number.Round((number - rubles) * 100, 0),
rublesText = ConvertLessThanOneThousand(rubles),
kopText = if kop > 0 then ConvertLessThanOneThousand(kop) & " копеек" else "",
// Склонение рублей
rublesEnding =
if rubles mod 100 >= 11 and rubles mod 100 <= 19 then "рублей"
else if rubles mod 10 = 1 then "рубль"
else if rubles mod 10 >= 2 and rubles mod 10 <= 4 then "рубля"
else "рублей",
fullText = rublesText & " " & rublesEnding & (if kop > 0 then " " & kopText else "")
in
fullText
in
NumberToWords
После вставки кода:
- 📌 Нажмите
Готовои закройте редактор. - 📌 В основной таблице используйте формулу
=NumberToWords([@Сумма]), гдеСумма— имя столбца с числом.
7. Частые ошибки и как их избежать
При преобразовании чисел в пропись пользователи часто сталкиваются с типичными проблемами. Вот ТОП-5 ошибок и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Функция возвращает #ИМЯ? |
Опечатка в названии функции или отсутствует модуль VBA | Проверьте регистр (например, =РублиПрописью, а не =рублипрописью) |
| Некорректное склонение ("два рубля" вместо "два рубля") | Ошибка в коде VBA или формуле | Используйте готовые надстройки или проверенный код из этой статьи |
| Не работает с отрицательными числами | Функция не учитывает знак "-" | Добавьте в код проверку: If Число < 0 Then Текст = "минус " & ПреобразоватьЧисло(Abs(Число)) |
| Округление копеек (например, 99,995 → 100,00) | Неточная формула для дробной части | Используйте ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0) вместо простого умножения |
| Медленная работа при большом объёме данных | Сложные формулы или неоптимизированный VBA-код | Для массовой обработки используйте Power Query или надстройки |
Если вы столкнулись с другой ошибкой, проверьте:
- 🔍 Региональные настройки Windows (должен быть выбран русский язык).
- 🔍 Версию Excel — в Excel 2007 некоторые функции могут не поддерживаться.
- 🔍 Формат ячейки — она должна быть
ОбщийилиТекстовый, а неЧисловой.
FAQ: Ответы на популярные вопросы
Можно ли преобразовать числа в пропись в Google Таблицах?
Да, но с ограничениями. В Google Sheets нет встроенной функции для русского языка, но можно:
- Использовать App Script (аналог VBA). Пример кода есть на этом сайте.
- Установить надстройку NumToText for Google Sheets (платно, ~300 ₽).
- Вручную скопировать данные в онлайн-конвертер и вставить результат обратно.
Обратите внимание: в Google Таблицах нет поддержки Power Query, поэтому метод из Способа 5 не подойдёт.
Как преобразовать дату прописью (например, "первое января")?
Для преобразования дат в текстовый формат (например, 01.01.2023 → "первое января две тысячи двадцать третьего года") нужна отдельная функция. Вот базовый код на VBA:
Function ДатаПрописью(Дата As Date) As String
Dim Дни() As String, Месяцы() As String
Дни = Array("первое", "второе", "третье", "четвёртое", "пятое", _
"шестое", "седьмое", "восьмое", "девятое", "десятое", _
"одиннадцатое", "двенадцатое", ..., "тридцатое", "тридцать первое")
Месяцы = Array("января", "февраля", "марта", "апреля", "мая", "июня", _
"июля", "августа", "сентября", "октября", "ноября", "декабря")
ДатаПрописью = Дни(Day(Дата) - 1) & " " & Месяцы(Month(Дата) - 1) & " " & _
ГодПрописью(Year(Дата)) & " года"
End Function
Function ГодПрописью(Год As Integer) As String
' Здесь реализуйте логику преобразования года (аналогично функции для чисел)
' Например: 2023 → "две тысячи двадцать третьего"
End Function
Полную версию кода с обработкой всех случаев (включая 2000–2099 годы) можно найти на этом ресурсе.
Почему в результатах появляются опечатки (например, "триста пятьдесят пять рублей")?
Это типичная проблема при использовании формул без VBA (см. Способ 4). Причины:
- 📌 Формула не учитывает пробелы между словами (используйте
ТРИМ()для их удаления). - 📌 Некорректная обработка чисел от 1000 до 9999 (требуется разбиение на тысячи, миллионы и т.д.).
- 📌 Ошибка в массивах склонений (например, пропущено слово "тысяча").
Решение: используйте VBA или готовые надстройки — они учитывают все нюансы русского языка.
Как автоматически обновлять пропись при изменении числа?
Если вы используете:
- 🔹 VBA-функцию — она обновляется автоматически при изменении исходных данных (как любая формула).
- 🔹 Надстройку — проверьте настройки: обычно обновление происходит в реальном времени.
- 🔹 Power Query — нажмите
Обновитьна вкладкеДанныеили настройте автоматическое обновление (Свойства связи → Обновить каждые N минут).
Если пропись не обновляется:
- Проверьте, не стоит ли в настройках
Автоматический пересчёт → Вручную(Формулы → Параметры вычислений). - Для VBA: убедитесь, что файл сохранён как
.xlsm(с поддержкой макросов).
Можно ли использовать это в 1С или Word?
Да, но способы будут другими:
- 📌 В 1С: Используйте встроенную функцию
ЧислоПрописью(). Пример:ЧислоПрописью(1234.56, "рубль,рубля,рублей,копейка,копейки,копеек")Подробнее в документации 1С.
- 📌 В Word:
- Создайте поле с формулой: нажмите
Ctrl + F9, введите{=1234.56 \* MERGEFORMAT}, затемF9. - Используйте макрос VBA (аналогично Excel).
- Установите надстройку NumToText for Office.
- Создайте поле с формулой: нажмите