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

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

В этой статье вы найдете пошаговые инструкции для разных версий Excel (включая Excel 365, 2019, 2016 и более ранние), а также узнаете, как адаптировать решения под русский, украинский или другие языки. Мы рассмотрим не только стандартные методы, но и малоизвестные приемы, которые сэкономят вам часы работы. Например, вы научитесь преобразовывать 1 234,56 ₽ в текст вида "Одна тысяча двести тридцать четыре рубля 56 копеек" — и все это без ручного ввода!

Почему нельзя просто ввести сумму прописью вручную?

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

  • 🔄 Ошибки при копировании: даже опытные пользователи иногда ошибаются, особенно при работе с большими числами (например, 1 000 005 легко превращается в "один миллион пять рублей" вместо "один миллион пять рублей").
  • 📊 Потеря динамичности: если исходная сумма изменится (например, из-за корректировки цены или количества), пропись придется переписывать заново.
  • ⚖️ Юридические риски: в бухгалтерских документах расхождение между цифровым и текстовым значением может стать основанием для признания документа недействительным.
  • Потеря времени: в крупных таблицах с сотнями строк ручной ввод превращается в многочасовую рутину.

Автоматизация этого процесса не только избавляет от рутинной работы, но и гарантирует 100% совпадение между числовым и текстовым представлением суммы. Далее мы рассмотрим все доступные способы — от самых простых до самых гибких.

📊 Как часто вам нужно преобразовывать числа в текст прописью?
Ежедневно
Несколько раз в неделю
Рядом
Очень редко

Способ 1: Использование функции ЧИСЛОТЕКСТ (для русскоязычных версий Excel)

Если у вас установлена русскоязычная версия Excel (или добавлен пакет языковой поддержки для русского), то самый простой способ — воспользоваться встроенной функцией =ЧИСЛОТЕКСТ(). Она преобразует числа в текстовое представление на русском языке, включая валюту.

Формат функции:

=ЧИСЛОТЕКСТ(число; [формат])

Где формат — необязательный аргумент, который определяет стиль отображения. Для рублей и копеек подходит значение 1 (по умолчанию) или "Р".

  • 💰 Пример 1: =ЧИСЛОТЕКСТ(1234,56; "Р") → вернет "Одна тысяча двести тридцать четыре рубля 56 копеек".
  • 💵 Пример 2: =ЧИСЛОТЕКСТ(1000; "Д") → вернет "Одна тысяча долларов" (для долларов США).
  • 📌 Пример 3: =ЧИСЛОТЕКСТ(500; 0) → вернет "Пятьсот" (без указания валюты).

Обратите внимание, что функция ЧИСЛОТЕКСТ доступна только в русскоязычных версиях Excel. Если у вас англоязычная версия, этот метод не сработает — переходите к следующему способу.

⚠️ Внимание: Функция ЧИСЛОТЕКСТ может неправильно склонять некоторые числительные (например, "два рубля" вместо "два рубля" для сумм от 2 до 4). Всегда проверяйте результат для критически важных документов!

☑️ Подготовка к использованию ЧИСЛОТЕКСТ

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

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

Если функция ЧИСЛОТЕКСТ недоступна (например, в англоязычной версии Excel), можно создать собственную функцию с помощью VBA (Visual Basic for Applications). Этот метод работает во всех версиях Excel и позволяет гибко настраивать формат вывода.

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

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

Dim RUB As Variant, Kop As Variant, Temp As String

RUB = Application.WorksheetFunction.Floor(MyNumber, 1)

Kop = (MyNumber - RUB) * 100

Temp = Propis(RUB) & " рубль"

' Склонение слова "рубль"

If RUB Mod 100 >= 11 And RUB Mod 100 <= 19 Then

Temp = Temp & "ей"

Else

Select Case RUB Mod 10

Case 1: Temp = Temp & "ь"

Case 2, 3, 4: Temp = Temp & "я"

Case Else: Temp = Temp & "ей"

End Select

End If

' Добавление копеек

If Kop > 0 Then

Temp = Temp & " " & Propis(Kop) & " копеек"

' Склонение слова "копейка"

If Kop Mod 100 >= 11 And Kop Mod 100 <= 19 Then

Temp = Temp & "ек"

Else

Select Case Kop Mod 10

Case 1: Temp = Temp & "а"

Case 2, 3, 4: Temp = Temp & "и"

Case Else: Temp = Temp & "ек"

End Select

End If

End If

RublesProp = Application.WorksheetFunction.Proper(Temp)

End Function

Function Propis(ByVal MyNumber As Variant) As String

Dim StrNum As String, Num As Integer, Txt As String, i As Integer

Dim Ones(1 To 9) As String, Teens(1 To 9) As String, Tens(1 To 9) As String

Dim Hundreds(1 To 9) As String, Scales(1 To 4) As String

' Массивы для числительных

Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "четыре"

Ones(5) = "пять": Ones(6) = "шесть": Ones(7) = "семь"

Ones(8) = "восемь": Ones(9) = "девять"

Teens(1) = "десять": Teens(2) = "одиннадцать": Teens(3) = "двенадцать"

Teens(4) = "тринадцать": Teens(5) = "четырнадцать": Teens(6) = "пятнадцать"

Teens(7) = "шестнадцать": Teens(8) = "семнадцать": Teens(9) = "восемнадцать"

Tens(1) = "десять": Tens(2) = "двадцать": Tens(3) = "тридцать"

Tens(4) = "сорок": Tens(5) = "пятьдесят": Tens(6) = "шестьдесят"

Tens(7) = "семьдесят": Tens(8) = "восемьдесят": Tens(9) = "девяносто"

Hundreds(1) = "сто": Hundreds(2) = "двести": Hundreds(3) = "триста"

Hundreds(4) = "четыреста": Hundreds(5) = "пятьсот"

Hundreds(6) = "шестьсот": Hundreds(7) = "семьсот"

Hundreds(8) = "восемьсот": Hundreds(9) = "девятьсот"

Scales(1) = "тысяч": Scales(2) = "миллион": Scales(3) = "миллиард"

Scales(4) = "триллион"

StrNum = CStr(Int(MyNumber))

If MyNumber = 0 Then Propis = "ноль": Exit Function

' Обработка чисел по разрядам

For i = 1 To Len(StrNum) Step 3

Num = Val(Mid(StrNum, i, 3))

If Num > 0 Then

Txt = ConvertLessThanOneThousand(Num, Ones, Teens, Tens, Hundreds) & " "

If (Len(StrNum) - i) \ 3 + 1 >= 2 Then

Txt = Txt & Choose((Len(StrNum) - i) \ 3 + 1, Scales(1), Scales(2), Scales(3), Scales(4)) & " "

End If

Propis = Txt & Propis

End If

Next i

Propis = Trim(Propis)

End Function

Function ConvertLessThanOneThousand(ByVal Num As Integer, Ones() As String, Teens() As String, Tens() As String, Hundreds() As String) As String

Dim Txt As String

If Num >= 100 Then

Txt = Hundreds(Num \ 100) & " "

Num = Num Mod 100

End If

If Num >= 20 Then

Txt = Txt & Tens(Num \ 10)

If Num Mod 10 > 0 Then Txt = Txt & " " & Ones(Num Mod 10)

ElseIf Num >= 10 Then

Txt = Txt & Teens(Num - 9)

ElseIf Num > 0 Then

Txt = Txt & Ones(Num)

End If

ConvertLessThanOneThousand = Txt

End Function

После вставки кода:

  1. Закройте редактор VBA.
  2. Теперь в любой ячейке можно использовать функцию =RublesProp(А1), где А1 — ячейка с числом.

Пример: если в ячейке A1 указано 1234,56, то формула =RublesProp(A1) вернет "Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".

⚠️ Внимание: При первом использовании макросов Excel может заблокировать их выполнение по соображениям безопасности. Чтобы разрешить макросы, перейдите в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов и выберите "Включить все макросы" (не рекомендуется для файлов из ненадежных источников).

Способ 3: Использование надстройки "Прописью" (для тех, кто не хочет кодировать)

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

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

  • 📥 Скачайте надстройку с официального сайта (например, plug-in-team.ru).
  • 🔧 Установите файлы .xlam или .xlsm (следуйте инструкции установщика).
  • 🔄 Активируйте надстройку в Excel: перейдите в Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти и поставьте галочку рядом с "Прописью".
  • ✏️ Используйте функцию =PROPIS(A1; "RUR"), где A1 — ячейка с числом, а "RUR" — код валюты (доступны также "USD", "EUR", "UAH").

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

  • ✅ Не требует знания VBA.
  • ✅ Поддерживает несколько валют и языков.
  • ✅ Автоматически склоняет числительные (например, "один рубль", "два рубля", "пять рублей").
  • ✅ Регулярно обновляется (исправляются ошибки склонения).
Валюта Код в функции Пример вывода
Рубли "RUR" "Одна тысяча рублей"
Доллары "USD" "One thousand dollars"
Евро "EUR" "Eintausend Euro"
Гривны "UAH" "Одна тисяча гривень"

Если надстройка не подходит (например, из-за корпоративных ограничений), рассмотрите альтернативы: "NumToText" или "SpellNumber" — они работают по схожему принципу.

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

Чтобы удалить надстройку, перейдите в Файл → Параметры → Надстройки, выберите ненужную надстройку и нажмите "Перейти". В открывшемся окне снимите галочку рядом с названием надстройки и подтвердите удаление. После этого можно удалить файлы надстройки с жесткого диска.

Способ 4: Формулы без VBA (для англоязычного Excel)

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

Пример формулы для преобразования числа в текст (до 999 999):

=CHOSE(MID(TEXT(A1,"000000"),1,1)+1,"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот") &

" " &

CHOSE(MID(TEXT(A1,"000000"),2,1)+1,"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто") &

" " &

CHOSE(MID(TEXT(A1,"000000"),3,1)+1,"","один","два","три","четыре","пять","шесть","семь","восемь","девять") &

" тысяча " &

CHOSE(MID(TEXT(A1,"000000"),4,1)+1,"","","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот") &

" " &

CHOSE(MID(TEXT(A1,"000000"),5,1)+1,"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто") &

" " &

CHOSE(MID(TEXT(A1,"000000"),6,1)+1,"","один","два","три","четыре","пять","шесть","семь","восемь","девять")

Эта формула работает только для целых чисел от 1 до 999 999 и не учитывает копейки или доллары. Для более сложных случаев потребуется расширять ее или комбинировать с другими функциями (например, =LEFT() и =RIGHT() для отделения рублей и копеек).

⚠️ Внимание: Такие формулы сложно поддерживать — при изменении логики (например, добавлении новой валюты) придется переписывать всю конструкцию. Используйте их только для разовых задач!

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

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

Популярные сервисы:

  • 🌐 Num2Word — поддерживает рубли, доллары, евро и гривны, а также склонение по падежам.
  • 🌐 Calc.ru — простой интерфейс с возможностью копирования результата.
  • 🌐 TextFromNumber — англоязычный сервис, но поддерживает русский язык.

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

  1. Откройте сервис в браузере.
  2. Введите сумму в числовом формате (например, 1234.56).
  3. Выберите валюту (рубли, доллары и т. д.).
  4. Скопируйте полученный текст прописью и вставьте в Excel.

Преимущества онлайн-сервисов:

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

Недостатки:

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

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

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

Ошибка Причина Решение
Неправильное склонение ("два рубля" вместо "два рубля") Ошибка в алгоритме или надстройке Используйте проверенные надстройки (например, "Прописью") или исправляйте код VBA вручную
Функция ЧИСЛОТЕКСТ возвращает #ИМЯ? Англоязычная версия Excel Используйте VBA или надстройки
Сумма прописью отображается с ошибками (например, "одиннадцать" вместо "одиннадцать") Опечатка в коде VBA или формуле Проверьте массивы числительных в коде (см. Способ 2)
Макрос не работает после сохранения файла Файл сохранен в формате .xlsx (без поддержки макросов) Сохраните файл в формате .xlsm (с поддержкой макросов)

Еще одна частая проблема — отсутствие поддержки копеек в некоторых решениях. Например, функция ЧИСЛОТЕКСТ по умолчанию может игнорировать дробную часть. Чтобы этого избежать, используйте формат с указанием валюты:

=ЧИСЛОТЕКСТ(A1; "Р")

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

If MyNumber < 0 Then

RublesProp = "минус " & RublesProp(Abs(MyNumber))

Exit Function

End If

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

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

Да, в Google Таблицах есть аналогичная функция: =NUMBERSTRING(число; "RUR"). Она поддерживает рубли, доллары и евро. Например, =NUMBERSTRING(1234.56; "RUR") вернет "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".

Обратите внимание, что в Google Таблицах числительные пишутся с маленькой буквы и склоняются по-разному (например, "два рубля" вместо "два рубля").

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

Если вы используете формулу (например, =ЧИСЛОТЕКСТ(A1) или пользовательскую функцию VBA), то текст будет обновляться автоматически при изменении исходного числа. Если же вы ввели текст прописью вручную или скопировали из онлайн-сервиса, придется обновлять его самостоятельно.

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

Почему в некоторых случаях выводится "один рубль", а в других — "один рублей"?

Это ошибка склонения, которая возникает из-за несовершенства алгоритмов в стандартных функциях или надстройках. Чтобы исправить это, можно:

  1. Использовать проверенные надстройки (например, "Прописью"), где склонение реализовано корректно.
  2. Исправить код VBA вручную (см. блок склонения в Способе 2).
  3. Добавить дополнительную проверку для чисел 1, 2, 3, 4 и т. д.

Например, в коде VBA можно добавить такое правило:

If RUB Mod 100 >= 11 And RUB Mod 100 <= 19 Then

Temp = Temp & "ей"

Else

Select Case RUB Mod 10

Case 1: Temp = Temp & "ь"

Case 2, 3, 4: Temp = Temp & "я"

Case Else: Temp = Temp & "ей"

End Select

End If

Можно ли преобразовать сумму прописью на украинском или другом языке?

Да, для этого нужно:

  • В VBA: заменить массивы числительных (например, Ones(), Tens()) на украинские эквиваленты и скорректировать правила склонения.
  • В надстройках: выбрать соответствующий язык (например, в "Прописью" поддерживается украинский — код валюты "UAH").
  • В онлайн-сервисах: выбрать нужный язык в настройках.

Пример массива для украинского языка:

Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "чотири"

Ones(5) = "п'ять": Ones(6) = "шість": Ones(7) = "сім"

Ones(8) = "вісім": Ones(9) = "дев'ять"

Как добавить сумму прописью в Word из Excel?

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

  1. Копирование результата: Преобразуйте сумму прописью в Excel (например, с помощью функции =ЧИСЛОТЕКСТ(A1)), скопируйте полученный текст и вставьте его в Word.
  2. Связывание документов:
    1. В Excel выделите ячейку с текстом прописью и скопируйте ее (Ctrl+C).
    2. В Word выберите Главная → Вставить → Специальная вставка → Связать → Текст.
    3. Теперь при изменении суммы в Excel текст в Word будет обновляться автоматически (при открытии файла).

Для автоматизации этого процесса можно также использовать макросы в Word, которые будут pulling данные из Excel.