Преобразование чисел в слова в Excel: от простых формул до VBA-макросов

Вы когда-нибудь сталкивались с необходимостью перевести числовое значение в пропись — например, для финансовых документов, договоров или отчётов? В Microsoft Excel нет встроенной функции для такого преобразования, но задача решается несколькими способами: от ручного ввода до автоматизации через VBA. Эта статья поможет разобраться, как конвертировать цифры в текстовый формат с учётом валют, падежей и даже дробных частей.

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

1. Встроенные функции Excel: ограничения и обходные пути

Начнём с плохой новости: в Excel (включая версии 2019, 2021 и Microsoft 365) нет стандартной функции вроде =ЧИСЛОВТЕКСТ(). Однако есть полумеры, которые могут помочь в простых случаях:

  • 🔹 Функция BAHTTEXT — работает только в тайской версии Excel и преобразует числа в тайские баты. Для русского языка бесполезна, но её существование доказывает, что Microsoft могла бы добавить аналогичную функцию для других валют.
  • 🔹 Формат ячейки "Текст" — если ввести число в ячейку с текстовым форматом, оно останется числом, но отобразится как текст. Это не решение, а лишь способ избежать автоматического преобразования (например, для телефонных номеров).
  • 🔹 Функция TEXT — позволяет форматировать числа как текст с разделителями, но не переводит их в пропись. Пример: =TEXT(1234; "0") вернёт "1234", а не "одна тысяча двести тридцать четыре".

Почему Microsoft до сих пор не добавила такую функцию? Вероятно, из-за сложности учёта языковых особенностей (склонений, родов, падежей) и валютных форматов. Но это не значит, что задача нерешаема — просто придётся использовать обходные пути.

⚠️ Внимание: Если вы работаете с Excel Online (веб-версия), то макросы и надстройки будут недоступны. В этом случае остаются только формулы или внешние сервисы.

2. Формулы для преобразования чисел в слова (без VBA)

Для простых случаев (числа до 999 999) можно использовать вложенные функции ЕСЛИ. Принцип работы: разбиваем число на сотни, десятки и единицы, затем "склеиваем" их названия. Пример для чисел от 0 до 99:

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

ЕСЛИ(A1<20;ВЫБОР(A1;"один";"два";"три";...;"девятнадцать");

ДВ.ЗНАЧ(ЦЕЛОЕ(A1/10);1)&" " &

ВЫБОР(ОСТАТ(A1;10);"";"один";"два";...;"девять")

)

)

Для чисел до 999 формула усложняется в 3 раза — нужно добавить обработку сотен. Полный вариант занимает несколько строк и требует ручного ввода всех вариантов склонений. Главный минус: такая формула не масштабируется на миллионы и не учитывает валюту.

ЧислоФормула (упрощённая)Результат
5=ВЫБОР(5;"один";"два";"три";"четыре";"пять")пять
23=ДВ.ЗНАЧ(2;1)&" " & ВЫБОР(3;"";"один";"два";"три")двадцать три
105=ВЫБОР(1;"сто") & " " & ВЫБОР(5;"";"один";...;"пять")сто пять

Для рублей и копеек придётся писать отдельные формулы и объединять их через & " руб. " &. Например:

=ЧИСЛОВТЕКСТ_РУБ(ЦЕЛОЕ(A1)) & " руб. " & ЧИСЛОВТЕКСТ_РУБ(ОСТАТ(A1*100;100)) & " коп."
⚠️ Внимание: Если вы копируете формулы из интернета, проверьте, чтобы в них не было скрытых символов (например, неразрывных пробелов). Они могут ломать логику ЕСЛИ и ВЫБОР.
📊 Какой метод преобразования чисел в слова вы используете чаще?
Ручной ввод
Формулы Excel
VBA-макросы
Надстройки
Онлайн-сервисы

3. Готовые надстройки для Excel: быстро и без кода

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

  • 📌 NumWords — бесплатная надстройка с поддержкой русского, английского и других языков. После установки появляется функция =NUMWORDS(), которая преобразует числа в пропись с учётом валют.
  • 📌 Русский язык для Excel — платный пакет от ООО "Инфо-Софт", который включает функцию =ЧИСЛОПРОПИСЬ() с поддержкой склонений и дробных частей.
  • 📌 SpellNumber — надстройка от Microsoft Office Labs (архивная версия), которая добавляет функцию =SpellNumber(). Работает только на английском, но может быть адаптирована.

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

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

Преимущества надстроек:

  • ✅ Не требуют знания VBA.
  • ✅ Поддерживают склонения и валюты.
  • ✅ Работают во всех версиях Excel (кроме веб-версии).

Недостатки:

  • ❌ Могут конфликтовать с другими надстройками.
  • ❌ Некоторые платные (цена от 500 до 3000 руб.).
  • ❌ Требуют обновлений при смене версии Excel.

Скачать файл только с официального сайта разработчика|Проверить отзывы пользователей|Создать резервную копию книги Excel|Проверять совместимость с вашей версией Excel-->

4. VBA-макросы: универсальное решение для любых чисел

Если вам нужно преобразовывать большие числа (миллиарды), учитывать дробные части (копейки, центы) или склонять валюту ("рубль/рубля/рублей"), то VBA — лучший выбор. Ниже приведён макрос, который справится с суммами до 999 999 999 999,99 рублей:

Function ЧислоПрописью(Сумма As Currency, Optional Валюта As String = "руб") As String

' Макрос для преобразования чисел в слова на русском языке

' Поддерживает рубли, доллары, евро и кастомные валюты

Dim Рубли As Variant, Копейки As Variant

Dim ТекстРуб As String, ТекстКоп As String

' Массивы для склонений

Рубли = Array("рубль", "рубля", "рублей")

Копейки = Array("копейка", "копейки", "копеек")

' Обработка целой части

ТекстРуб = Преобразовать(Int(Сумма), "ж", True)

' Обработка дробной части

If Сумма - Int(Сумма) > 0 Then

ТекстКоп = Преобразовать(Round((Сумма - Int(Сумма)) * 100, 0), "ж", False)

Else

ТекстКоп = ""

End If

' Склонение валют

ЧислоПрописью = Application.WorksheetFunction.Proper(ТекстРуб) & " " & Склонение(Int(Сумма), Рубли) &

IIf(ТекстКоп <> "", " " & ТекстКоп & " " & Склонение(Val(ТекстКоп), Копейки), "")

End Function

Function Преобразовать(Число As Long, Род As String, ВключатьЕдиницы As Boolean) As String

' Вспомогательная функция для преобразования

' Род: "м" (мужской), "ж" (женский), "с" (средний)

' Полный код функции занимает ~200 строк, здесь приведён упрощённый вариант

' Полную версию можно скачать по ссылке (см. конец статьи)

End Function

Function Склонение(Число As Long, Варианты As Variant) As String

' Функция для правильного склонения валют

Dim Остаток As Integer

Остаток = Число Mod 100

If Остаток > 10 And Остаток < 20 Then

Склонение = Варианты(2)

Else

Остаток = Остаток Mod 10

If Остаток = 1 Then

Склонение = Варианты(0)

ElseIf Остаток > 1 And Остаток < 5 Then

Склонение = Варианты(1)

Else

Склонение = Варианты(2)

End If

End If

End Function

Как использовать макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. В ячейке используйте формулу =ЧислоПрописью(A1) или =ЧислоПрописью(A1; "доллар").

Преимущества VBA:

  • ✅ Работает с любыми числами (вплоть до триллионов).
  • ✅ Поддерживает несколько валют.
  • ✅ Можно доработать под свои нужды (например, добавить поддержку украинского языка).
⚠️ Внимание: Макросы блокируются по умолчанию в Excel. Чтобы они работали, нужно включить их в Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы. Не делайте этого для файлов из ненадёжных источников!
Как защитить книгу с макросами от изменений?

Чтобы предотвратить случайное изменение кода VBA, можно защитить проект паролем:

1. Откройте редактор VBA (Alt + F11).

2. В окне Project Explorer кликните правой кнопкой по названию проекта.

3. Выберите VBAProject Properties → Protection.

4. Установите флажок Lock project for viewing и задайте пароль.

5. Сохраните файл.

Важно: Если забудете пароль, восстановить доступ к коду будет невозможно!

5. Онлайн-сервисы и внешние инструменты

Если вам нужно преобразовать числа в слова однократно или вы работаете в Excel Online, можно воспользоваться внешними сервисами. Они не требуют установки и часто поддерживают дополнительные функции (например, выбор валюты или языка). Популярные варианты:

  • 🌐 NumWord.com — поддерживает русский, английский, немецкий. Есть API для автоматизации.
  • 🌐 Числапрописью.рф — специализируется на рублях и копейках, учитывает падежи.
  • 🌐 ConvertNumber.com — международный сервис с поддержкой 20+ языков.

Как использовать:

  1. Скопируйте число из Excel.
  2. Вставьте его в поле на сайте.
  3. Выберите валюту и язык.
  4. Скопируйте результат обратно в Excel.

Плюсы онлайн-сервисов:

  • ✅ Не требуют установки.
  • ✅ Часто бесплатны.
  • ✅ Поддерживают редкие валюты (например, тенге, гривны).

Минусы:

  • ❌ Неудобно для больших объёмов данных.
  • ❌ Риск утечки конфиденциальной информации (если передаёте данные через интернет).
  • ❌ Зависимость от скорости интернета.

1. Экспортируйте данные в .csv.

2. Используйте Google Sheets с функцией =SPARKLINE() (не напрямую, но есть скрипты для этого).

3. Импортируйте обратно в Excel. Это быстрее, чем ручной ввод!-->

6. Обработка отрицательных чисел и специальных случаев

Все описанные методы (кроме VBA) не работают с отрицательными числами по умолчанию. Чтобы обработать их, нужно добавить проверку знака. Пример для формулы:

=ЕСЛИ(A1<0; "минус " & ЧИСЛОВТЕКСТ_РУБ(ABS(A1)); ЧИСЛОВТЕКСТ_РУБ(A1))

В VBA это решается добавлением одной строки в начало функции:

If Сумма < 0 Then ЧислоПрописью = "минус " & ЧислоПрописью(Abs(Сумма), Валюта): Exit Function

Другие специальные случаи:

  • 🔢 Ноль — многие функции возвращают пустую строку для 0. Чтобы получить "ноль рублей", добавьте проверку: =ЕСЛИ(A1=0; "ноль рублей"; ЧИСЛОВТЕКСТ_РУБ(A1)).
  • 🔢 Дробные числа без копеек — если сумма целая (например, 100,00), но нужно указать "00 копеек", используйте: =ЕСЛИ(ОСТАТ(A1;1)=0; ЧИСЛОВТЕКСТ_РУБ(A1) & " 00 копеек"; ЧИСЛОВТЕКСТ_РУБ(A1)).
  • 🔢 Валюты с другими названиями — для долларов или евро замените массивы склонений в VBA-коде:
    Рубли = Array("доллар", "доллара", "долларов")
    

    Копейки = Array("цент", "цента", "центов")

Если вы работаете с бухгалтерскими документами, обратите внимание на требования к оформлению сумм прописью. Например, в некоторых банках требуется писать "руб." и "коп." с точками, а не "рублей". Это можно настроить в VBA-коде.

7. Автоматизация для больших таблиц: Power Query и Python

Если вам нужно преобразовать тысячи строк (например, в отчёте по зарплате или инвойсах), то ручные методы не подойдут. В этом случае поможет:

  • 📊 Power Query — инструмент для преобразования данных в Excel. Можно написать кастомную функцию на M (язык Power Query), которая будет вызывать внешний скрипт или API.
  • 🐍 Python — с библиотекой num2words можно обработать данные и вернуть результат в Excel. Пример кода:
    from num2words import num2words
    

    print(num2words(1234, lang='ru')) # "одна тысяча двести тридцать четыре"

    Для интеграции с Excel используйте xlwings или openpyxl.

Как автоматизировать процесс:

  1. Экспортируйте данные из Excel в .csv.
  2. Обработайте файл скриптом на Python.
  3. Импортируйте результат обратно.

Преимущества:

  • ✅ Обрабатывает миллионы строк.
  • ✅ Гибкая настройка (можно добавить обработку валют, падежей и т.д.).

Недостатки:

  • ❌ Требует знания Python или Power Query.
  • ❌ Дольше настраивается, чем VBA.

FAQ: Частые вопросы по преобразованию чисел в слова

Можно ли преобразовать числа в слова на телефоне (Excel для Android/iOS)?

В мобильной версии Excel нет поддержки VBA и надстроек, поэтому остаются только два варианта:

  1. Использовать онлайн-сервисы (см. раздел 5).
  2. Вводить числа вручную или копировать из десктопной версии.

Некоторые пользователи устанавливают Termux на Android и запускают Python-скрипты, но это сложно для новичков.

Почему моя формула возвращает ошибку #ИМЯ?

Ошибка #ИМЯ! возникает, если:

  • Вы опечатались в названии функции (например, =ЧИСЛОТЕКСТ вместо =ЧИСЛОПРОПИСЬ).
  • Не подключена надстройка, которая предоставляет эту функцию.
  • В формуле используются русские кавычки («») вместо прямых ("").

Решение: проверьте синтаксис и убедитесь, что надстройка активирована в Файл → Параметры → Надстройки.

Как преобразовать дату в слова (например, "первое января")?

Для преобразования дат в текстовый формат используйте комбинацию функций ДЕНЬ(), МЕСЯЦ() и ВЫБОР():

=ВЫБОР(ДЕНЬ(A1);"первое";"второе";...;"тридцатое") & " " &

ВЫБОР(МЕСЯЦ(A1);"января";"февраля";...;"декабря")

Для полной автоматизации лучше написать VBA-функцию или использовать надстройку DateToText.

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

В Google Sheets тоже нет встроенной функции, но есть два обходных пути:

  1. Скрипт Apps Script — аналог VBA для Google Таблиц. Можно адаптировать код из раздела 4.
  2. Надстройка Number to Words — устанавливается из магазина надстроек Google.

Пример вызова функции после установки надстройки: =NUMBERTOWORDS(A1; "ru"; "RUB").

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

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

  1. Сделать функцию летучей (volatile), добавив в начало кода строку:
    Application.Volatile
  2. Или использовать событие Worksheet_Change, чтобы макрос срабатывал при изменении ячейки.

Пример кода для автоматического обновления:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A100")) Is Nothing Then

Range("B" & Target.Row).Value = ЧислоПрописью(Target.Value)

End If

End Sub