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

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

Многие пользователи ошибочно полагают, что в Excel нет инструментов для такой задачи, и прибегают к сторонним программам. Однако даже базовые версии программы (начиная с Excel 2010) поддерживают преобразование чисел в текст с помощью формул или надстроек. Главное — выбрать метод, который соответствует вашим навыкам и требованиям к формату вывода (например, с копейками или без, с заглавной буквы или строчными).

В этой статье мы разберём 5 рабочих способов — от простейших формул для начинающих до продвинутых макросов, которые справятся даже с миллиардами. Вы узнаете, как настроить вывод сумм с учётом рублёвых копеек, избежать ошибок при работе с отрицательными числами и адаптировать решения под корпоративные шаблоны. А в конце — FAQ с ответами на типичные вопросы и лайфхаки для ускорения работы.

Способ 1: Встроенная функция БАТЕКСТ (для англоязычных версий Excel)

Если у вас установлена англоязычная версия Excel (или региональные настройки системы настроены на английский), вы можете использовать функцию =SPELLNUMBER() из надстройки EuroTools. Эта функция преобразует числа в текст на выбранном языке, включая русский.

Чтобы активировать её:

  1. Перейдите в Файл → Параметры → Надстройки.
  2. Внизу окна выберите Управление: Надстройки Excel и нажмите «Перейти».
  3. В списке отметьте EuroTools Add-in и нажмите «OK».

После активации используйте формулу:

=БАТЕКСТ(A1; 2)

где A1 — ячейка с числом, а 2 — код для русского языка. Для вывода суммы с копейками (например, «один рубль 50 копеек») добавьте третий аргумент: =БАТЕКСТ(A1; 2; "RUR").

⚠️ Внимание: В русскоязычных версиях Excel функция БАТЕКСТ может отсутствовать. В этом случае используйте альтернативные способы из следующих разделов.

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

Для полной автоматизации без зависимости от надстроек создайте пользовательскую функцию на VBA. Этот метод работает во всех версиях Excel и поддерживает правильное склонение рубля/копейки.

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  3. Вставьте следующий код:
    Function RublesProp(ByVal MyNumber As Currency, Optional IncludeKopecks As Boolean = True) As String
    

    Dim Rubles As String, Kopecks As String, Temp As String

    Dim DecimalPlace As Integer, Count As Integer

    MyNumber = Round(MyNumber, 2)

    DecimalPlace = InStr(MyNumber, ".")

    If DecimalPlace > 0 Then

    Rubles = Trim(Left(MyNumber, DecimalPlace - 1))

    Temp = Mid(MyNumber, DecimalPlace + 1) & "00"

    Kopecks = Left(Temp, 2)

    Else

    Rubles = Trim(MyNumber)

    Kopecks = "00"

    End If

    Count = 1

    Do While Rubles <> ""

    Select Case Count

    Case 1: Temp = NumberToText(Right(Rubles, 3), "рубль", "рубля", "рублей", True)

    Case 2: Temp = NumberToText(Right(Rubles, 3), "тысяча", "тысячи", "тысяч", True) & Temp

    Case 3: Temp = NumberToText(Right(Rubles, 3), "миллион", "миллиона", "миллионов", True) & Temp

    Case 4: Temp = NumberToText(Right(Rubles, 3), "миллиард", "миллиарда", "миллиардов", True) & Temp

    Case 5: Temp = NumberToText(Right(Rubles, 3), "триллион", "триллиона", "триллионов", True) & Temp

    End Select

    If Rubles <> "" Then Rubles = Left(Rubles, Len(Rubles) - 3)

    Count = Count + 1

    Loop

    RublesProp = Application.WorksheetFunction.Trim(Temp)

    If IncludeKopecks Then

    RublesProp = RublesProp & " " & Kopecks & " " & NumberToText(Kopecks, "копейка", "копейки", "копеек", False)

    End If

    End Function

    Function NumberToText(ByVal MyNumber As String, ByVal Unit1 As String, ByVal Unit2 As String, ByVal Unit5 As String, ByVal IsMale As Boolean) As String

    Dim Temp As String, Num As Integer

    MyNumber = Right("000" & MyNumber, 3)

    Num = Val(MyNumber)

    If Num = 0 Then Exit Function

    Select Case Right(MyNumber, 2)

    Case 11 To 19: Temp = " " & GetDigit(Left(MyNumber, 1)) & "надцать"

    Case Else

    Temp = IIf(Val(Right(MyNumber, 1)) > 0, " " & GetDigit(Right(MyNumber, 1)), "")

    Select Case Val(Right(MyNumber, 2))

    Case 10 To 19: Temp = " десять" & Temp

    Case 20 To 99: Temp = " " & GetTens(Left(Right(MyNumber, 2), 1)) & Temp

    End Select

    End Select

    Temp = IIf(Val(Left(MyNumber, 1)) > 0, GetHundreds(Left(MyNumber, 1)) & Temp, Temp)

    Temp = Application.WorksheetFunction.Trim(Temp)

    Select Case Num Mod 100

    Case 1: Temp = Temp & " " & IIf(IsMale, Unit1, Unit1)

    Case 2 To 4: Temp = Temp & " " & IIf(IsMale, Unit2, Unit2)

    Case Else: Temp = Temp & " " & Unit5

    End Select

    NumberToText = Temp

    End Function

    Function GetDigit(ByVal MyDigit As String) As String

    Select Case Val(MyDigit)

    Case 1: GetDigit = "один"

    Case 2: GetDigit = "два"

    Case 3: GetDigit = "три"

    Case 4: GetDigit = "четыре"

    Case 5: GetDigit = "пять"

    Case 6: GetDigit = "шесть"

    Case 7: GetDigit = "семь"

    Case 8: GetDigit = "восемь"

    Case 9: GetDigit = "девять"

    Case Else: GetDigit = ""

    End Select

    End Function

    Function GetTens(ByVal MyTens As String) As String

    Select Case Val(MyTens)

    Case 2: GetTens = "двадцать"

    Case 3: GetTens = "тридцать"

    Case 4: GetTens = "сорок"

    Case 5: GetTens = "пятьдесят"

    Case 6: GetTens = "шестьдесят"

    Case 7: GetTens = "семьдесят"

    Case 8: GetTens = "восемьдесят"

    Case 9: GetTens = "девяносто"

    Case Else: GetTens = ""

    End Select

    End Function

    Function GetHundreds(ByVal MyHundreds As String) As String

    Select Case Val(MyHundreds)

    Case 1: GetHundreds = "сто"

    Case 2: GetHundreds = "двести"

    Case 3: GetHundreds = "триста"

    Case 4: GetHundreds = "четыреста"

    Case 5: GetHundreds = "пятьсот"

    Case 6: GetHundreds = "шестьсот"

    Case 7: GetHundreds = "семьсот"

    Case 8: GetHundreds = "восемьсот"

    Case 9: GetHundreds = "девятьсот"

    Case Else: GetHundreds = ""

    End Select

    End Function

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

    =RublesProp(A1)

    где A1 — ячейка с числом. Для вывода без копеек укажите второй аргумент:

    =RublesProp(A1; FALSE)

    ☑️ Проверка работы макроса

    Выполнено: 0 / 4

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

    Если вам нужно преобразовать числа до 999 999 и вы не хотите использовать VBA, можно обойтись комбинацией функций ВЫБОР(), ЦЕЛОЕ() и ОСТАТ(). Этот метод требует ручной настройки, но подходит для разовых задач.

    Пример формулы для числа в ячейке A1 (до 999):

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

    ВЫБОР(ЦЕЛОЕ(A1/100);

    "сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") &

    ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/10);10)>1;

    ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);

    " десять";" двадцать";" тридцать";" сорок";" пятьдесят";" шестьдесят";" семьдесят";" восемьдесят";" девяносто");

    "") &

    ЕСЛИ(ОСТАТ(A1;100)<20;

    ВЫБОР(ОСТАТ(A1;100);

    "";" один";" два";" три";" четыре";" пять";" шесть";" семь";" восемь";" девять";" десять";" одиннадцать";" двенадцать";" тринадцать";" четырнадцать";" пятнадцать";" шестнадцать";" семнадцать";" восемнадцать";" девятнадцать");

    ВЫБОР(ОСТАТ(A1;10);

    "";" один";" два";" три";" четыре";" пять";" шесть";" семь";" восемь";" девять")) &

    " рубль" &

    ЕСЛИ(И(ОСТАТ(A1;100)>10;ОСТАТ(A1;100)<20);"ей";

    ЕСЛИ(ОСТАТ(A1;10)=1;"ь";ЕСЛИ(ОСТАТ(A1;10)>1;ОСТАТ(A1;10)<5;"я";"ей")))

    Для чисел до 999 999 формула усложняется в 3–4 раза, поэтому рекомендуем использовать её только для ограниченного диапазона значений или как временное решение.

    ⚠️ Внимание: Формулы без VBA не учитывают копейки и могут давать сбой при обновлении версий Excel. Для стабильной работы сохраняйте файл в формате .xlsb (двоичный).
    📊 Какой способ вам ближе?
    Формулы без VBA
    Пользовательская функция на VBA
    Надстройка от Microsoft
    Сторонние программы

    Способ 4: Надстройка «ЧислоПрописью» для Excel

    Если вы не хотите разбираться в коде, воспользуйтесь бесплатной надстройкой «ЧислоПрописью» от российских разработчиков. Она поддерживает:

    • 📌 Правильное склонение рубля/копейки/доллара/евро.
    • 📌 Работу с отрицательными числами («минус пятьсот рублей»).
    • 📌 Вывод суммы с заглавной буквы («Пятьсот рублей»).
    • 📌 Форматы для Украины, Беларуси, Казахстана.

Скачайте надстройку с официального сайта (например, excel-vba.ru) и установите её через Файл → Параметры → Надстройки → Управление надстройками Excel. После установки появится новая функция:

=ЧислоПрописью(A1; "RUR"; TRUE)

где:

  • A1 — ячейка с числом;
  • "RUR" — валюта (доступны также "USD", "EUR");
  • TRUE — вывод с заглавной буквы.
  • Преимущество надстройки — поддержка обновлений и совместимость с Excel 2010–2023. Минус — требует установки на каждый компьютер.

    Как удалить надстройку, если она не работает?

    Откройте Файл → Параметры → Надстройки. Внизу окна выберите Управление: Надстройки COM и нажмите «Перейти». Снимите галочку с «ЧислоПрописью» и перезапустите Excel.

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

    Если Excel не подходит для вашей задачи, используйте онлайн-сервисы или десктопные программы:

    Сервис Особенности Ссылка
    NumWord Поддерживает 15 валют, API для интеграции numword.com
    Textify Офлайн-программа для Windows, экспорт в Excel textify.ru
    Excel-Helper Надстройка с расширенными настройками формата excel-helper.ru
    1С:Предприятие Встроенная функция для бухгалтерских отчётов

    Онлайн-сервисы удобны для разовых задач, но не подходят для конфиденциальных данных (суммы договоров, зарплаты и т.п.). Десктопные программы, такие как Textify, позволяют обрабатывать большие объёмы данных офлайн.

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

    При преобразовании чисел в текст пользователи часто сталкиваются с следующими проблемами:

    1. Некорректное склонение валют.

      Пример ошибки: «101 рублей» вместо «101 рубль». Решение: используйте VBA-функцию из Способа 2 или надстройку «ЧислоПрописью», где склонение настроено автоматически.

    2. Отрицательные числа выводятся без знака «минус».

      Решение: добавьте в формулу проверку:

      =ЕСЛИ(A1<0; "минус " & RublesProp(ABS(A1)); RublesProp(A1))
    3. Округление копеек.

      Excel может округлять числа типа 123,456 до 123,46. Чтобы избежать этого, используйте функцию =ОКРУГЛ(A1; 2) перед преобразованием.

Критическая ошибка: если вы работаете с финансовыми документами, никогда не полагайтесь на автоматические преобразования без ручной проверки. Например, сумма «2 000 001 рубль» может быть выведена как «два миллиона один рубль» (правильно) или «два миллиона один рублей» (ошибка).

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

Можно ли преобразовать число в текст прописью в Excel Online?

Нет, Excel Online не поддерживает VBA-макросы и большинство надстроек. Используйте десктопную версию Excel или онлайн-конвертеры (см. Способ 5).

Как сделать, чтобы сумма начиналась с заглавной буквы?

В VBA-функции добавьте строку:

RublesProp = UCase(Left(RublesProp, 1)) & Mid(RublesProp, 2)

Или используйте надстройку «ЧислоПрописью» с параметром TRUE.

Почему функция выдаёт ошибку #ИМЯ?

Ошибка #ИМЯ? означает, что:

  • 🔹 Функция RublesProp не сохранена в модуле VBA.
  • 🔹 Файл сохранён без поддержки макросов (не .xlsm).
  • 🔹 В названии функции есть опечатка.

Проверьте каждый пункт и перезапустите Excel.

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

Замените в VBA-коде (Способ 2) массивы склонений на украинские:

Case 1: GetDigit = "один" → Case 1: GetDigit = "один" (для мужского рода)

Case 1: GetDigit = "одна" (для женского рода, например, "гривня")

Или используйте надстройку «ЧислоПрописью» с параметром "UAH".

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

Да, все описанные методы (кроме онлайн-конвертеров) обновляются автоматически при изменении исходного числа. Если обновление не происходит, проверьте:

  • 🔹 Настройки вычислений: Формулы → Параметры вычислений → Автоматически.
  • 🔹 Отсутствие ошибок в VBA-коде.