Преобразование чисел в текст в таблицах

Иван Корнев·21.05.2024·4 мин

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

Почему в Excel нет готовой функции

В англоязычной версии программы иногда встречается функция SPELLNUMBER, но она не поддерживает русскую грамматику. Для документов на русском языке (счета, акты, договоры) критически важно правильное склонение слов («рубль», «рубля», «рублей») и согласование числительных. Поэтому пользователям приходится создавать собственные инструменты.

Главное правило: Если вы планируете использовать файл на разных компьютерах или отправлять его партнерам, убедитесь, что у получателей включено выполнение макросов, либо используйте вариант с формулами, чтобы избежать ошибок отображения #ИМЯ?.

Способ 1: Пользовательская функция на VBA (Рекомендуемый)

Этот метод создает новую функцию, которая работает так же, как встроенные СУММ или ВПР. Она автоматически склоняет слова и обрабатывает копейки.

Пошаговая инструкция установки

  1. Откройте книгу Excel и нажмите комбинацию клавиш Alt + F11, чтобы запустить редактор VBA.
  2. В меню выберите Insert > Module (Вставка > Модуль).
  3. Скопируйте приведенный ниже код и вставьте его в открывшееся белое окно.
Function SumPropis(ByVal Number As Double) As String
    Dim Rubles As Long, Kopecks As Integer
    Dim Result As String
    
    ' Разделение на рубли и копейки
    Rubles = Int(Number)
    Kopecks = Round((Number - Rubles) * 100, 0)
    
    ' Здесь должна быть полная логика склонения (сокращенный пример структуры)
    ' Для полноценной работы требуется расширенный код обработки разрядов
    ' Ниже приведен вызов гипотетической внутренней функции конвертации
    Result = ConvertRubles(Rubles) & " рублей " & ConvertKopecks(Kopecks)
    
    SumPropis = Application.Proper(Result) ' Первая буква заглавная
End Function

' Заглушки для примера (в реальном коде здесь тысячи строк логики)
Function ConvertRubles(ByVal N As Long) As String
    ' Логика перевода миллионов, тысяч, единиц с учетом рода и падежа
    ConvertRubles = "Сумма цифрами: " & N 
End Function

Function ConvertKopecks(ByVal K As Integer) As String
    ConvertKopecks = K & " копеек"
End Function

Важно: Приведенный выше код является структурным примером. Для реальной работы вам потребуется полный алгоритм склонения (сотни строк кода), который легко найти по запросу «модуль SumPropis Excel полный код». Вставьте найденный полный код вместо заглушек.

  1. Закройте редактор VBA и вернитесь в таблицу.
  2. Используйте функцию в ячейке: =SumPropis(A1).

Безопасность файлов: Книги с макросами необходимо сохранять в формате .xlsm (Книга Excel с поддержкой макросов). При открытии такого файла на другом компьютере может появиться предупреждение системы безопасности — нужно разрешить выполнение содержимого.

Способ 2: Формулы без макросов

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

Алгоритм реализации

  1. Создайте лист «Словарь», где в столбцах пропишите числа от 0 до 999 и их текстовое соответствие с учетом окончаний.
  2. На основном листе разбейте число из ячейки A1 на разряды (миллионы, тысячи, сотни, единицы) используя функции ЦЕЛОЕ, ОСТАТ, ТЕКСТ.
  3. С помощью функции ВПР (или ПРОСМОТР) подтяните текстовые значения для каждого разряда из словаря.
  4. Объедините части функцией СЦЕПИТЬ или оператором &, добавляя слова «тысяч», «миллионов» с правильным окончанием (реализуется через дополнительные условия ЕСЛИ).

Этот способ сложен в поддержке: формула может занимать несколько экранов, а изменение логики склонения потребует правки множества ячеек.

Сравнение методов вывода чисел

КритерийМакросы (VBA)Сложные формулы
Точность грамматикиВысокая (полное склонение)Средняя (трудно учесть все нюансы)
Удобство использованияОдна функция =SumPropis(A1)Громоздкая конструкция на 20+ строк
СовместимостьТребует формата .xlsm и разрешенийРаботает в любом .xlsx и веб-версии
ПроизводительностьБыстро даже при больших объемахМожет замедлять пересчет книги

Частые ошибки и проблемы

  • Ошибка #ИМЯ?: Возникает, если функция на VBA не найдена. Проверьте, сохранен ли файл как .xlsm и не был ли удален модуль.
  • Неверные окончания: Частая проблема самодельных формул, когда программа пишет «125 тысяч» вместо «125 тысяч» (здесь верно) или ошибается в роде («два миллиона» против «две тысячи»). В макросах это решается проверкой последней цифры числа.
  • Потеря дробной части: При простом преобразовании числа в текст часто пропадают копейки. Необходимо отдельно выделять дробную часть через умножение остатка на 100 и прописывать её словами.

Часто задаваемые вопросы

Можно ли сделать это в онлайн-версии Excel? Стандартные макросы VBA не работают в браузерной версии Excel (Office 365 Online). Для веба придется использовать надстройки JS (Office Scripts) или готовить текст заранее в десктопной версии.

Как прописать сумму в долларах или евро? Логика та же, что и для рублей. В коде макроса нужно заменить слова «рубль/копейка» на «dollar/cent» или «euro/cent» и адаптировать правила склонения под английский язык (где окончания проще).

Где взять готовый надежный макрос? Наиболее стабильным решением считается модуль, разработанный сообществом пользователей (часто упоминается как решение от Михаила Ефимова или аналоги с форумов PlanetaExcel), который бесплатно распространяется в открытом доступе и протестирован годами.