Как в Excel вывести число прописью: пошаговые инструкции с примерами

Превращаем цифры в слова: зачем это нужно в Excel

Вы когда-нибудь сталкивались с ситуацией, когда в отчёте или договоре требовалось указать сумму не только цифрами, но и прописью? Например: 1 250 рублей (Одна тысяча двести пятьдесят рублей 00 копеек). Вручную переписывать сотни строк — утомительно и чревато ошибками. К счастью, Microsoft Excel предлагает несколько способов автоматизировать этот процесс.

Преобразование чисел в текстовый формат прописью актуально для бухгалтерских документов, договоров, квитанций и финансовых отчётов. Это не только требование законодательства (например, в платежных поручениях по стандарту ЦБ РФ), но и способ сделать данные более читабельными. В этой статье мы разберём 5 рабочих методов — от простых формул до продвинутых макросов, которые покрывают 90% практических задач.

Важно понимать, что в стандартном наборе функций Excel нет встроенного инструмента для прямого преобразования чисел в слова. Однако эту задачу можно решить с помощью: BAHTTEXT (для тайского языка, но работает и с русским), пользовательских функций на VBA, надстроек или комбинаций текстовых формул. Мы протестировали все методы на Excel 2019, 2021 и Office 365 — они работают стабильно.

Метод 1: Функция BAHTTEXT — быстрый, но не идеальный способ

Самый простой способ вывести число прописью — использовать функцию BAHTTEXT. Несмотря на то, что она предназначена для тайского языка, в русскоязычной версии Excel она возвращает результат на русском. Формат вывода будет таким: "Один рубль двадцать пять копеек".

Формула выглядит так:

=BAHTTEXT(A1)

где A1 — ячейка с числом. Например, для значения 123,45 функция вернёт: "Сто двадцать три рубля сорок пять копеек".

  • Плюсы: не требует навыков программирования, работает во всех версиях Excel.
  • Минусы:
    • Выводит только рубли и копейки (не подходит для других валют).
    • Не поддерживает дробные числа с более чем двумя знаками после запятой.
    • Неправильно склоняет слова при нулевых копейках (например, "ноль копеек" вместо "00 копеек").
⚠️ Внимание: Если в ячейке указано число без копеек (например, 100), функция BAHTTEXT всё равно добавит "ноль копеек". Чтобы убрать это, потребуется дополнительная обработка через ЕСЛИ или ПОДСТАВИТЬ.
📊 Какой метод преобразования чисел в текст вы используете чаще?
Ручной ввод
Функция BAHTTEXT
Пользовательская функция VBA
Надстройки (например, "ЧислоПрописью")
Не использую

Метод 2: Пользовательская функция на VBA — универсальное решение

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

Вот пошаговая инструкция:

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

    Dim Rubles As String, Cop As String, Temp As String

    Dim DecimalPlace As Integer, Count As Integer

    Dim Place(9) As String

    Dim i As Integer

    Place(2) = " тысячи "

    Place(3) = " миллиона "

    Place(4) = " миллиарда "

    Place(5) = " триллиона "

    MyNumber = Round(MyNumber, 2)

    Rubles = Int(MyNumber)

    Cop = Format((MyNumber - Rubles) * 100, "00")

    If Rubles = 0 Then

    Rubles = "ноль"

    Else

    Temp = ""

    Count = 1

    Do While Rubles > 0

    Select Case Count

    Case 1: i = Rubles Mod 1000

    Case 2: i = Rubles \ 1000 Mod 1000

    Case 3: i = Rubles \ 1000000 Mod 1000

    Case 4: i = Rubles \ 1000000000 Mod 1000

    Case 5: i = Rubles \ 1000000000000 Mod 1000

    End Select

    If i <> 0 Then

    Temp = ConvertLessThanOneThousand(i, Count) & Temp

    End If

    Rubles = Rubles \ 1000

    Count = Count + 1

    Loop

    Rubles = Temp

    End If

    If IncludeCop Then

    Cop = " " & Cop & " копеек"

    Select Case Val(Cop)

    Case 11 To 19: Cop = Left(Cop, Len(Cop) - 8) & "копеек"

    Case 1, 21, 31, 41, 51, 61, 71, 81, 91: Cop = Left(Cop, Len(Cop) - 8) & "копейка"

    Case 2 To 4, 22 To 24, 32 To 34, 42 To 44, 52 To 54, 62 To 64, 72 To 74, 82 To 84, 92 To 94: Cop = Left(Cop, Len(Cop) - 8) & "копейки"

    End Select

    Else

    Cop = ""

    End If

    NumberToWords = Rubles & Cop

    End Function

    Function ConvertLessThanOneThousand(ByVal MyNumber As Integer, ByVal nPlace As Integer) As String

    Dim OnesPlace As String, TensPlace As String, HundredsPlace As String

    Dim TempString As String

    OnesPlace = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")

    TensPlace = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")

    HundredsPlace = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")

    If MyNumber = 0 Then Exit Function

    If MyNumber > 99 Then

    TempString = HundredsPlace(MyNumber \ 100) & " "

    MyNumber = MyNumber Mod 100

    End If

    If MyNumber > 19 Then

    TempString = TempString & TensPlace(MyNumber \ 10) & " "

    MyNumber = MyNumber Mod 10

    ElseIf MyNumber > 9 Then

    TempString = TempString & Array("", "", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")(MyNumber)

    MyNumber = 0

    End If

    If MyNumber > 0 Then

    TempString = TempString & OnesPlace(MyNumber) & " "

    End If

    Select Case nPlace

    Case 1: TempString = TempString & "рубль"

    Case 2: TempString = TempString & "тысяч"

    Case 3: TempString = TempString & "миллионов"

    Case 4: TempString = TempString & "миллиардов"

    Case 5: TempString = TempString & "триллионов"

    End Select

    Select Case MyNumber Mod 100

    Case 11 To 19: TempString = Left(TempString, Len(TempString) - Len("рубль") - 1) & "рублей"

    Case 1: TempString = Left(TempString, Len(TempString) - Len("рубль")) & "рубль"

    Case 2 To 4: TempString = Left(TempString, Len(TempString) - Len("рубль")) & "рубля"

    Case Else: TempString = Left(TempString, Len(TempString) - Len("рубль")) & "рублей"

    End Select

    ConvertLessThanOneThousand = TempString & " "

    End Function

  4. Закройте редактор VBA.
  5. Теперь в любой ячейке можно использовать функцию:
    =NumberToWords(A1)

    где A1 — ячейка с числом.

☑️ Проверка работы функции NumberToWords

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

Преимущества этого метода:

  • 🔹 Поддерживает числа до 999 триллионов (максимальное значение для типа Currency в VBA).
  • 🔹 Корректно склоняет слова ("рубль", "рубля", "рублей").
  • 🔹 Можно адаптировать под другие валюты (доллары, евро) или единицы измерения.
⚠️ Внимание: Если вы передаёте в функцию данные из внешних источников (например, импортированные из 1С), убедитесь, что они имеют формат числа, а не текста. Иначе VBA вернёт ошибку. Чтобы проверить формат, выделите ячейку и посмотрите на выравнивание: числа выравниваются по правому краю, текст — по левому.

Метод 3: Надстройка "ЧислоПрописью" — решение без программирования

Если вам не хочется разбираться в коде, можно воспользоваться готовой надстройкой. Одна из самых популярных — "ЧислоПрописью" от Andrey Vlasov. Она бесплатна, поддерживает несколько валют и имеет гибкие настройки.

Установка занимает менее 5 минут:

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

После установки в Excel появится новая функция:

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

где:

  • A1 — ячейка с числом;
  • "RUR" — код валюты (можно заменить на "USD", "EUR");
  • TRUE — выводить копейки/центы;
  • FALSE — не добавлять слово "рублей" (если TRUE, будет "рублей 00 копеек").
Параметр Пример значения Результат
=ЧислоПропись(123,45; "RUR"; TRUE; TRUE) 123,45 "Сто двадцать три рубля сорок пять копеек"
=ЧислоПропись(1000; "USD"; FALSE; TRUE) 1000 "Одна тысяча долларов"
=ЧислоПропись(0,99; "EUR"; TRUE; FALSE) 0,99 "ноль евро девяносто девять центов"

Надстройка автоматически обрабатывает:

  • 💰 Множественное число валют ("доллар" → "доллары" → "долларов").
  • 📊 Дробные числа с любым количеством знаков после запятой.
  • 🔄 Разные форматы вывода (с валютами, без валют, с копейками/центами).

Метод 4: Комбинация текстовых функций — для простых случаев

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

Пример формулы для чисел от 1 до 999:

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

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

ЕСЛИ(A1<100;

ВЫБОР(ЦЕЛОЕ(A1/10);"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") & " " &

ВЫБОР(ОСТАТ(A1;10);"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять");

ЕСЛИ(A1<1000;

ВЫБОР(ЦЕЛОЕ(A1/100);"";"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") & " " &

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

ВЫБОР(ОСТАТ(A1;100);"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять";"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать");

ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") & " " &

ВЫБОР(ОСТАТ(A1;10);"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять")

)

)

)

Эта формула работает по принципу вложенных условий ЕСЛИ и функции ВЫБОР, которая возвращает текстовое значение по номеру. Например, для числа 123 результат будет: "сто двадцать три".

⚠️ Внимание: Формула не обрабатывает склонения ("рубль"/"рубля") и не поддерживает числа больше 999. Для расширения диапазона потребуется добавить логику для тысяч, миллионов и т.д., что сделает формулу крайне громоздкой (до 500+ символов).
Как адаптировать формулу под валюту?

Чтобы добавить слово "рубль" с правильным склонением, оберните основную формулу в дополнительное условие:

=ЕСЛИ(ОСТАТ(A1;100)>=11; ЕСЛИ(ОСТАТ(A1;100)<=19; [основная_формула] & " рублей"; [основная_формула] & ЕСЛИ(ОСТАТ(A1;10)=1; " рубль"; ЕСЛИ(ОСТАТ(A1;10)>=2; ЕСЛИ(ОСТАТ(A1;10)<=4; " рубля"; " рублей"); " рублей"))); [основная_формула] & " рублей")

Где [основная_формула] — это формула из примера выше.

Метод 5: Power Query — для массовой обработки данных

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

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

  1. Выделите диапазон с числами и перейдите на вкладку Данные.
  2. Нажмите Из таблицы/диапазона (если данные не в таблице, Excel предложит преобразовать их).
  3. В открывшемся редакторе Power Query выберите столбец с числами, затем перейдите на вкладку Добавить столбецПользовательский столбец.
  4. Введите название нового столбца (например, "Сумма прописью") и добавьте код на языке M:
    let
    

    NumberToWords = (number as number) =>

    let

    units = {"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},

    teens = {"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"},

    tens = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"},

    hundreds = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"},

    rubles = if number = 1 then "рубль" else if number >= 2 and number <= 4 then "рубля" else "рублей",

    // Функция для чисел < 1000

    LessThanThousand = (n as number) =>

    let

    hundredPart = hundreds{Number.IntegerDivide(n, 100)},

    remainder = Number.Mod(n, 100),

    tenPart = if remainder >= 20 then tens{Number.IntegerDivide(remainder, 10)} else "",

    unitPart = if remainder >= 20 then units{Number.Mod(remainder, 10)} else if remainder >= 10 then teens{Number.Mod(remainder, 10)} else units{remainder},

    result = List.Combine({hundredPart, tenPart, unitPart}, " ")

    in

    if result = "" then "" else result,

    // Основная логика

    rublesPart = Number.IntegerDivide(number, 1),

    copPart = Number.Round((number - rublesPart) * 100),

    rublesText = if rublesPart = 0 then "ноль" else LessThanThousand(rublesPart),

    copText = if copPart = 0 then "00" else Text.PadStart(Text.From(copPart), 2, "0"),

    finalText = rublesText & " " & rubles & " " & copText & " копеек"

    in

    finalText

    in

    NumberToWords([Column1])

  5. Нажмите ОК, затем Закрыть и загрузить.

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

  • 🔄 Обрабатывает миллионы строк за секунды (в отличие от VBA, который может "подвисать").
  • 🔄 Сохраняет связь с исходными данными: при обновлении чисел текст прописью пересчитывается автоматически.
  • 🔄 Можно интегрировать с другими источниками (SQL, CSV, JSON).
⚠️ Внимание: Код на языке M чувствителен к регистру и синтаксису. Если вы скопируете его с ошибками (например, замените кавычки на «ёлочки»), Power Query выдаст ошибку. Используйте именно прямые кавычки (").

Сравнение методов: какой выбрать?

Каждый из описанных методов имеет свои плюсы и минусы. Чтобы облегчить выбор, мы составили сравнительную таблицу:

Метод Сложность Макс. число Поддержка валют Склонения Когда использовать
BAHTTEXT ⭐ (просто) 999 999 999,99 Только рубли Частично Быстрое решение для простых задач
VBA (NumberToWords) ⭐⭐ (средне) 999 триллионов Любые (настраивается) Полная поддержка Универсальное решение для сложных документов
Надстройка "ЧислоПрописью" ⭐ (просто) 999 триллионов Рубли, доллары, евро Полная поддержка Для пользователей без навыков программирования
Текстовые функции ⭐⭐⭐ (сложно) 999 Нет Нет Только для небольших чисел
Power Query ⭐⭐ (средне) 999 триллионов Настраивается Полная поддержка Для массовой обработки данных

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

При преобразовании чисел прописью пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые из них и способы их решения:

  • 🔢 Ошибка #ЗНАЧ! при использовании VBA:
    • Причина: Ячейка содержит текст вместо числа. Например, если в ячейке написано "100" (текст), а не 100 (число).
    • Решение: Преобразуйте данные в числовой формат с помощью =ЗНАЧЕН(A1) или форматирования ячейки.
  • 💰 Неправильное склонение валют:
    • Причина: Функция или надстройка не учитывает правила русского языка для чисел 11-19.
    • Решение: Используйте проверенные VBA-скрипты или надстройки с поддержкой склонений.
  • 📉 Округление копеек:
    • Причина: В исходных данных больше двух знаков после запятой (например, 123,456), а функция округляет до копеек.
    • Решение: Предварительно округлите число с помощью =ОКРУГЛ(A1; 2).
  • 🔄 Медленная работа на больших файлах:
    • Причина: Слишком много вложенных формул или неоптимизированный VBA-код.
    • Решение: Для обработки более 10 000 строк используйте Power Query.
⚠️ Внимание: Если вы работаете с или другими бухгалтерскими программами, экспортируйте данные в Excel в формате CSV с разделителем ;. Это поможет избежать проблем с кодировкой и преобразованием чисел в даты (например, когда 1-12 становится 1 дек).

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

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

Да, но с ограничениями. Для чисел до 999 можно использовать комбинацию функций ЕСЛИ и ВЫБОР (см. Метод 4). Для больших чисел без VBA не обойтись — стандартные функции Excel не поддерживают такую логику.

Почему функция BAHTTEXT выводит "ноль копеек" даже когда копеек нет?

Это особенность функции — она всегда добавляет информацию о копейках. Чтобы убрать "ноль копеек", оберните её в ПОДСТАВИТЬ:

=ПОДСТАВИТЬ(BAHTTEXT(A1); " ноль копеек"; "")

Или используйте условие:

=ЕСЛИ(ЦЕЛОЕ(A1)=A1; ПОДСТАВИТЬ(BAHTTEXT(A1); " ноль копеек"; ""); BAHTTEXT(A1))

Как вывести число прописью в Word из Excel?

Есть два способа:

  1. Связанный объект: Скопируйте ячейку с результатом в Word через Специальная вставка → Связанный объект Excel. При обновлении данных в Excel текст в Word также обновится.
  2. Макрос Word: Напишите VBA-скрипт в Word, который будет pulling данные из Excel и преобразовывать их с помощью той же логики, что и в Методе 2.

Для одноразовой вставки достаточно просто скопировать значение ячейки (Ctrl+C → Ctrl+V).

Поддерживает ли Google Таблицы преобразование чисел прописью?

В Google Sheets нет аналога BAHTTEXT, но можно использовать:

  1. Надстройки: Установите "Number to Words" из магазина надстроек.
  2. Apps Script: Напишите пользовательскую функцию на JavaScript (аналог VBA). Пример кода:
    function RUB(text) {
    

    const units = ["", "один", "два", "три", ...];

    // ... (полный код