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

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

В этой статье мы разберём 5 рабочих методов: от ручного ввода с использованием формул до полностью автоматизированных решений на базе VBA и сторонних надстроек. Вы узнаете, как адаптировать вывод под разные валюты (рубли, доллары, евро), учитывать копейки/центы, и избежать типичных ошибок при работе с большими числами. Особое внимание уделим скорости выполнения и совместимости с разными версиями Excel (2010–2023).

Если вам нужно срочно оформить один-два документа, подойдёт простой способ с формулами. Для регулярной работы лучше настроить пользовательскую функцию или установить надстройку. А если вы работаете с Excel Online или Google Sheets — мы тоже предусмотрели решения для этих платформ.

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

1. Способ: Использование стандартных функций Excel (без VBA)

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

Для начала разберём базовую структуру формулы:

=ЕСЛИ(A1=0;"ноль";ТЕКСТ(ЦЕЛОЕ(A1);"[<=999]0 \"рубль,рубля,рублей\";[>999]0\,000 \"рубль,рубля,рублей\"") & " " & ЕСЛИ(ОСТАТ(A1;1)<>0;ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0);"00") & " копеек";"00 копеек"))

Эта формула:

  • 🔹 Преобразует целую часть числа в текст с правильным склонением слова "рубль"
  • 🔹 Добавляет копейки (если они есть) или проставляет "00 копеек"
  • 🔹 Работает с числами до 999 999 рублей

Для чисел свыше 1 миллиона формулу придётся усложнить, добавив обработку миллионов:

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

ЕСЛИ(A1>=1000000;

ТЕКСТ(ЦЕЛОЕ(A1/1000000);"0 \"миллион,миллиона,миллионов\"") & " " &

ТЕКСТ(ОСТАТ(ЦЕЛОЕ(A1);1000000);"[<=999]0 \"рубль,рубля,рублей\";[>999]0\,000 \"рубль,рубля,рублей\"") &

" " & ЕСЛИ(ОСТАТ(A1;1)<>0;ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0);"00") & " копеек";"00 копеек");

ТЕКСТ(ЦЕЛОЕ(A1);"[<=999]0 \"рубль,рубля,рублей\";[>999]0\,000 \"рубль,рубля,рублей\"") &

" " & ЕСЛИ(ОСТАТ(A1;1)<>0;ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0);"00") & " копеек";"00 копеек")))

⚠️ Внимание: Формула не учитывает падежи для чисел типа "одна тысяча рублей" или "два миллиона рублей". Для полной грамматической корректности потребуется VBA-решение.

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

Если вам нужно 100% грамматическое соответствие русскому языку (включая правильные падежи для "один рубль", "два рубля", "пять рублей"), единственный надёжный способ — создать пользовательскую функцию на Visual Basic for Applications. Этот метод требует разового настройки, но потом работает мгновенно для любых чисел.

Откройте редактор VBA сочетанием клавиш Alt + F11, затем:

  1. В меню выберите Insert → Module
  2. Вставьте следующий код:
    Function SumProp(ByVal MyNumber As Currency) As String
    

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

    Dim DecimalPlace As Integer, Cnt As Integer

    Dim Place(9) As String

    Dim Rubles As Variant, Kopecks As Variant

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

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

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

    ' Массивы разрядов

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

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

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

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

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

    MyNumber = Round(MyNumber, 2)

    DecimalPlace = InStr(MyNumber, ",")

    If DecimalPlace > 0 Then

    Kop = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))

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

    Else

    Kop = "00"

    Temp = Trim(Str(MyNumber))

    End If

    Cnt = 1

    Do While Temp <> ""

    If Cnt = 1 Then

    RUB = GetHundreds(Right(Temp, 3))

    If RUB <> "" Then RUB = RUB & GetCurrency(Right(Temp, 3), Rubles)

    Else

    RUB = GetHundreds(Right(Temp, 3)) & Place(Cnt) & RUB

    End If

    If Len(Temp) > 3 Then

    Temp = Left(Temp, Len(Temp) - 3)

    Else

    Temp = ""

    End If

    Cnt = Cnt + 1

    Loop

    ' Обработка копеек

    Select Case Right(Kop, 1)

    Case "1": Kop = Kop & " " & Kopecks(0)

    Case "2", "3", "4": Kop = Kop & " " & Kopecks(1)

    Case Else: Kop = Kop & " " & Kopecks(2)

    End Select

    ' Итоговая сборка

    If RUB = "" Then RUB = "ноль " & Rubles(2) & " "

    SumProp = Application.WorksheetFunction.Trim(RUB & Kop)

    End Function

    ' Вспомогательные функции

    Function GetHundreds(ByVal MyNumber) As String

    Dim Result As String

    If Val(MyNumber) = 0 Then Exit Function

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

    If Mid(MyNumber, 1, 1) <> "0" Then

    Result = GetDigit(Mid(MyNumber, 1, 1)) & "сот "

    End If

    If Mid(MyNumber, 2, 1) <> "0" Then

    Result = Result & GetTens(Mid(MyNumber, 2))

    Else

    Result = Result & GetDigit(Mid(MyNumber, 3))

    End If

    GetHundreds = Result

    End Function

    Function GetTens(TensText) As String

    Dim Result As String

    Result = ""

    If Val(Left(TensText, 1)) = 1 Then

    Select Case Val(TensText)

    Case 10: Result = "десять"

    Case 11: Result = "одиннадцать"

    Case 12: Result = "двенадцать"

    Case 13: Result = "тринадцать"

    Case 14: Result = "четырнадцать"

    Case 15: Result = "пятнадцать"

    Case 16: Result = "шестнадцать"

    Case 17: Result = "семнадцать"

    Case 18: Result = "восемнадцать"

    Case 19: Result = "девятнадцать"

    End Select

    Else

    Select Case Val(Left(TensText, 1))

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

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

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

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

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

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

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

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

    End Select

    Result = Result & GetDigit(Right(TensText, 1))

    End If

    GetTens = Result

    End Function

    Function GetDigit(Digit) As String

    Select Case Val(Digit)

    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 GetCurrency(Number, CurrencyPart) As String

    Dim Temp As String

    Temp = Trim(Number)

    If Temp = "" Then Temp = "0"

    Select Case Right(Temp, 1)

    Case "1": GetCurrency = " " & CurrencyPart(0)

    Case "2", "3", "4": GetCurrency = " " & CurrencyPart(1)

    Case Else: GetCurrency = " " & CurrencyPart(2)

    End Select

    End Function

  3. Сохраните модуль и закройте редактор

Теперь в любой ячейке можно использовать функцию =SumProp(A1), где A1 — ячейка с числом. Например:

  • 💰 =SumProp(1234,56) → "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек"
  • 💰 =SumProp(1000001) → "один миллион один рубль 00 копеек"
⚠️ Внимание: При первом использовании VBA-функций Excel может показать предупреждение о безопасности. Разрешите выполнение макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов (выберите "Включить все макросы").

Убедитесь, что макросы разрешены в Excel|Сохраните файл как .xlsm (с поддержкой макросов)|Проверьте правильность валютных массивов в коде|Протестируйте функцию на небольших суммах-->

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

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

Вот TOP-3 проверенных надстройки:

Название Тип Особенности Ссылка
Рубль Бесплатная Поддерживает рубли, доллары, евро. Работает с Excel 2007–2023 ruble.excel-vba.ru
NumToText Условно-бесплатная Многовалютная, поддерживает 15 языков. Есть версия для Google Sheets numtotext.com
Акцент Сумма Прописью Платная (от 500₽) Интеграция с 1С, поддержка бухгалтерских форматов, облачная синхронизация accent.excel-addins.ru

Установка надстроек стандартная:

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

Надстройки типа NumToText или Рубль автоматически добавляют новые функции в Excel, которые можно использовать как стандартные (например, =RUB(A1) или =NUMTOTEXT(A1;"RUB")). Это избавляет от необходимостиremember формулы или код VBA.

4. Способ: Онлайн-конвертеры и Google Sheets

Если вы работаете в Excel Online или Google Sheets, где нет возможности использовать VBA, можно воспользоваться онлайн-конвертерами или встроенными функциями Google Таблиц.

Для Google Sheets подойдёт следующая формула (аналог первого способа, но с учётом синтаксиса Google):

=IF(A1=0;"ноль";

IF(A1>=1000000;

TEXT(FLOOR(A1/1000000);"0") & " " &

CHOOSE(MOD(FLOOR(A1/1000000);100);"миллион";"миллиона";"миллионов") & " " &

TEXT(MOD(FLOOR(A1;1000000);1000000);"[<=999]0 \"рубль,рубля,рублей\";[>999]0\,000 \"рубль,рубля,рублей\"") &

" " & IF(MOD(A1;1)<>0;TEXT(ROUND((A1-FLOOR(A1;1))*100;0);"00") & " копеек";"00 копеек");

TEXT(FLOOR(A1;1);"[<=999]0 \"рубль,рубля,рублей\";[>999]0\,000 \"рубль,рубля,рублей\"") &

" " & IF(MOD(A1;1)<>0;TEXT(ROUND((A1-FLOOR(A1;1))*100;0);"00") & " копеек";"00 копеек")))

Для онлайн-конвертации можно использовать сервисы:

  • 🌐 summa-propisyu.ru — поддерживает рубли, доллары, евро, гривны
  • 🌐 calculator888.ru — с возможностью копирования результата в Excel
  • 🌐 b-kontur.ru — от компании Контур, интеграция с бухгалтерскими программами
⚠️ Внимание: Онлайн-сервисы не подходят для работы с конфиденциальными данными (NDA, коммерческая тайна). Для таких случаев используйте офлайн-методы (VBA или надстройки).
Rubles = Array("доллар", "доллара", "долларов") или Rubles = Array("евро", "евро", "евро") (для евро склонение не меняется).-->

5. Способ: Power Query для массовой обработки

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

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

  1. Выделите таблицу с суммами и нажмите Данные → Из таблицы/диапазона (в Excel 2016+) или Power Query → Из таблицы (в Excel 2013)
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
    = Number.ToText([Сумма], "ru-RU") & " рублей"

    Где [Сумма] — название столбца с числовыми данными.

  3. Нажмите Закрыть и загрузить — в Excel появится новая таблица с текстовыми суммами.

Минус этого метода — Power Query преобразует числа в текст по стандарту ISO (например, "1 234,56"), но не добавляет склонения валют. Чтобы получить полноценный результат, комбинируйте Power Query с VBA или надстройками.

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

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

  1. Округление копеек: Excel может неправильно обрабатывать дробные числа из-за настроек отображения. Решение: используйте =ОКРУГЛ(A1;2) перед преобразованием.
  2. Отрицательные числа: Формулы и скрипты часто не учитывают знак "минус". Решение: добавьте проверку:
    =ЕСЛИ(A1<0;"минус ";"") & SumProp(ABS(A1))
  3. Слишком большие числа: Числа свыше 999 999 999 могут некорректно обрабатываться. Решение: используйте надстройки или доработайте VBA-код для поддержки триллионов.
  4. Некорректные региональные настройки: Если в системе установлен английский язык, функции типа ТЕКСТ могут выдавать ошибки. Решение: измените язык Excel в Файл → Параметры → Язык.
  5. Потеря форматирования при копировании: При экспорте в Word или PDF текстовые суммы могут "съезжать". Решение: используйте Перенос текста (вкладка Главная) для ячеек с прописными суммами.

Самая критичная ошибка — игнорирование копеек/центов. Например, сумма 100.99 без обработки дробной части преобразуется в "сто рублей", хотя должно быть "сто рублей 99 копеек". Все приведённые в статье методы учитывают эту особенность.

Как проверить правильность склонений?

Чтобы убедиться, что ваша формула или скрипт правильно склоняет валюту, протестируйте её на следующих суммах:

- 1.00 → "один рубль"

- 2.00 → "два рубля"

- 5.00 → "пять рублей"

- 21.00 → "двадцать один рубль"

- 101.00 → "сто один рубль"

- 102.00 → "сто два рубля"

- 105.00 → "сто пять рублей"

Если хотя бы одно из этих значений отображается некорректно, доработайте код или используйте надстройку.

7. Автоматизация для бухгалтеров: интеграция с 1С и Word

В корпоративной среде часто требуется автоматическое формирование документов (счета, акты, договоры) с прописными суммами. Для этого можно настроить связку Excel + 1С или Excel + Word.

Пример для :

  • 📊 Экспортируйте данные из 1С в Excel через Внешние отчёты или Обработки.
  • 📊 В Excel используйте VBA-функцию SumProp (из второго способа) для преобразования сумм.
  • 📊 Импортируйте обратно в 1С через Загрузку данных или сохраняйте в формате .csv для дальнейшей обработки.

Пример для Word:

  1. В Excel подготовьте таблицу с суммами и их текстовыми аналогами (используя любой из описанных методов).
  2. В Word создайте шаблон документа с закладками (например, SumText).
  3. Напишите VBA-макрос в Word для импорта данных из Excel:
    Sub ImportFromExcel()
    

    Dim xlApp As Object, xlBook As Object

    Dim SumText As String

    Set xlApp = CreateObject("Excel.Application")

    Set xlBook = xlApp.Workbooks.Open("C:\Путь\к\файлу.xlsx")

    SumText = xlBook.Sheets(1).Range("B2").Value ' Ячейка с прописной суммой

    xlBook.Close False

    xlApp.Quit

    ActiveDocument.Bookmarks("SumText").Range.Text = SumText

    End Sub

Для периодических отчётов можно настроить автоматическое обновление через Power Automate (бывший Microsoft Flow):

  • 🤖 Создайте поток, который запускается по расписанию (например, каждый понедельник).
  • 🤖 Добавьте действие Excel Online → Обновить таблицу.
  • 🤖 Используйте действие Word Online → Заполнить шаблон для генерации документов.

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

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

Да, все описанные методы работают и в Excel для Mac, за исключением:

  • 🍎 Для VBA потребуется включить поддержку макросов в Excel → Preferences → Security & Privacy → Enable all macros.
  • 🍎 Некоторые надстройки могут не иметь версии для Mac — уточняйте на сайте разработчика.

Рекомендуем использовать способ 1 (формулы) или способ 4 (Google Sheets), если у вас возникают проблемы с VBA.

Как преобразовать сумму в долларах или евро?

Для этого нужно изменить массивы склонений в VBA-коде или формулах:

  • 💵 Для долларов:
    Rubles = Array("доллар", "доллара", "долларов")
  • 💶 Для евро (склонение не меняется):
    Rubles = Array("евро", "евро", "евро")

В надстройках (например, NumToText) выберите нужную валюту в параметрах функции: =NUMTOTEXT(A1;"USD").

Почему вместо суммы прописью отображается ошибка #ИМЯ?

Ошибка #ИМЯ? возникает по трём причинам:

  1. 🔍 Опечатка в названии функции: Проверьте регистр и название (например, SumProp, а не sumprop).
  2. 🔍 Макросы отключены: Включите их в настройках безопасности Excel.
  3. 🔍 Файл не сохранён как .xlsm: Сохраните файл с поддержкой макросов (Файл → Сохранить как → Тип файла: Книга Excel с поддержкой макросов (*.xlsm)).
Можно ли использовать эту функцию в Google Sheets?

В Google Sheets нет встроенной функции для преобразования чисел в сумму прописью на русском, но есть обходные пути:

  • 📊 Используйте способ 4 с адаптированной формулой (приведён в статье).
  • 📊 Установите надстройку NumToText для Google Sheets.
  • 📊 Напишите кастомную функцию на Google Apps Script (аналог VBA для Google Sheets).
Как преобразовать сумму прописью в Excel Online?

В Excel Online доступны только формулы (способ 1) и надстройки (способ 3). VBA и Power Query в онлайн-версии не работают. Рекомендации:

  • ☁️ Используйте упрощённую формулу из способа 1 (без VBA).
  • ☁️ Для сложных задач экспортируйте файл в настольную версию Excel, обработайте данные и загрузите обратно.