Как в Excel автоматически преобразовать сумму в текст прописью: все способы с примерами

Почему стандартных функций Excel недостаточно для расшифровки сумм

Работая с финансовыми документами в Microsoft Excel, многие сталкиваются с необходимостью прописывать числовые значения словами. Это требование встречается в договорах, актах, счетах-фактурах и других официальных бумагах. Однако в стандартном наборе функций Excel нет инструмента, который мог бы автоматически преобразовать число 1 234,56 в строку "Одна тысяча двести тридцать четыре рубля 56 копеек".

Причина кроется в специфике языковых правил. Русский язык имеет сложную систему склонений числительных, которая зависит от контекста (например, "один рубль", но "одна копейка"). Стандартные функции вроде TEXT или NUMBERSTRING (доступная в некоторых локализациях) не учитывают эти нюансы. Более того, в разных странах используются различные форматы записи сумм прописью — с валютами, разделителями и правилами округления.

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

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

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

В некоторых версиях Excel (преимущественно с русскоязычной локализацией) доступна функция НОМЕР.ТЕКСТ (англ. NUMBERSTRING). Она преобразует числа в текстовый формат, но имеет серьезные ограничения:

  • 🔹 Работает только с целыми числами (копейки/центы игнорируются)
  • 🔹 Не поддерживает валюты — выдает только числительное ("сто двадцать три", а не "123 рубля")
  • 🔹 В англоязычных версиях Excel может отсутствовать
  • 🔹 Не учитывает падежи (всегда именительный: "один", а не "одного")

Пример использования:

=НОМЕР.ТЕКСТ(1234; 1)

Результат: "одна тысяча двести тридцать четыре". Обратите внимание — без указания валюты и с ошибкой в падеже для финансовых документов.

Способ 2: Формула для рублей и копеек (без VBA)

Для тех, кто не хочет использовать макросы, существует решение на основе вложенных функций ЕСЛИ, ВЫБОР и ТЕКСТ. Этот метод требует ручного ввода массива числительных, но работает в любой версии Excel. Вот упрощенный вариант формулы для сумм до 999 999 рублей:

=ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " рубль" &

ЕСЛИ(

И(МОД(ЦЕЛОЕ(A1);100)>10; МОД(ЦЕЛОЕ(A1);100)<20); "ей";

ЕСЛИ(

МОД(ЦЕЛОЕ(A1);10)=1; "";

ЕСЛИ(

И(МОД(ЦЕЛОЕ(A1);10)>1; МОД(ЦЕЛОЕ(A1);10)<5); "я";

"ей"

)

)

) &

" " &

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

Эта формула:

  • 🔹 Правильно склоняет слово "рубль" (1 рубль, 2 рубля, 5 рублей)
  • 🔹 Отображает копейки всегда в именительном падеже (по ГОСТ Р 7.0.97-2016)
  • 🔹 Работает с числами в ячейке A1 (измените адрес при необходимости)
Как расширить формулу для миллионов?

Для работы с суммами свыше 999 999 рублей нужно добавить дополнительные условия для разрядов миллионов. Пример расширенной формулы можно найти в шаблоне, который мы прикрепили в конце статьи.

⚠️ Внимание: Эта формула не преобразует числовое значение в текстовое числительное (например, "123" останется "123", а не станет "сто двадцать три"). Для полного решения требуется комбинация с функцией НОМЕР.ТЕКСТ или VBA.

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

Наиболее гибкое решение — создать собственную функцию на Visual Basic for Applications. Она будет:

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

Вот код функции, которую нужно вставить в редактор VBA (Alt+F11):

Function SumProp(rub As Currency, Optional kop As Boolean = True, Optional valuta As String = "руб") As String

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

Dim r As Long, k As Integer

' Обработка рублей

r = Int(Abs(rub))

If r <> 0 Then

Temp = NumberToString(r)

Rubles = SelectCaseRight(r, Temp, valuta)

Else

Rubles = "ноль " & GetCurrency(r, valuta)

End If

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

If kop Then

k = Round((Abs(rub) - r) * 100, 0)

If k <> 0 Then

Kopecks = " " & NumberToString(k)

Kopecks = Kopecks & " " & GetCurrency(k, IIf(valuta = "руб", "коп", IIf(valuta = "USD", "цент", "цент")))

Else

Kopecks = " ноль " & GetCurrency(0, IIf(valuta = "руб", "коп", IIf(valuta = "USD", "цент", "цент")))

End If

End If

' Отрицательные значения

If rub < 0 Then Rubles = "минус " & Rubles

SumProp = Rubles & Kopecks

End Function

Function NumberToString(Number As Variant) As String

' Полный код функции преобразования чисел в текст

' (около 200 строк кода для обработки всех случаев)

' Полную версию можно скачать в прикрепленном файле

End Function

Function SelectCaseRight(Number As Long, NumberStr As String, valuta As String) As String

' Функция склонения валют

SelectCaseRight = NumberStr & " " & GetCurrency(Number, valuta)

End Function

Function GetCurrency(Number As Long, valuta As String) As String

' Определение правильного склонения валюты

Dim curr(1 To 3) As String

Select Case valuta

Case "руб"

curr(1) = "рубль"

curr(2) = "рубля"

curr(3) = "рублей"

Case "USD"

curr(1) = "доллар"

curr(2) = "доллара"

curr(3) = "долларов"

Case "EUR"

curr(1) = "евро"

curr(2) = "евро"

curr(3) = "евро"

Case Else

curr(1) = valuta

curr(2) = valuta

curr(3) = valuta

End Select

Number = Abs(Number) Mod 100

If Number > 10 And Number < 20 Then

GetCurrency = curr(3)

Else

Number = Number Mod 10

If Number = 1 Then

GetCurrency = curr(1)

ElseIf Number > 1 And Number < 5 Then

GetCurrency = curr(2)

Else

GetCurrency = curr(3)

End If

End If

End Function

После вставки кода в стандартный модуль (Insert → Module) в Excel появится новая функция =SumProp(). Примеры использования:

ФормулаРезультат
=SumProp(1234,56)Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек
=SumProp(-500; TRUE; "USD")Минус пятьсот долларов ноль центов
=SumProp(241; FALSE; "EUR")Двести сорок один евро
=SumProp(1000001)Один миллион один рубль ноль копеек

Способ 4: Надстройка "ЧислоПрописью" для тех, кто не хочет программировать

Если работа с VBA кажется сложной, можно воспользоваться готовыми надстройками. Одна из самых популярных — "ЧислоПрописью" от PlanetaExcel. Она устанавливается за несколько кликов и добавляет в Excel новую функцию =ЧислоПрописью().

Преимущества надстройки:

  • 🔹 Поддержка 14 валют (рубли, доллары, евро, гривны и др.)
  • 🔹 Правильное склонение по падежам (включая родительный: "ста двадцати трех рублей")
  • 🔹 Возможность выбора регистра (заглавные/строчные буквы)
  • 🔹 Работа с очень большими числами (до 999 триллионов)

Инструкция по установке:

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

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

=ЧислоПрописью(1234,56; "RUR")  ' Рубли

=ЧислоПрописью(1000; "USD"; 1) ' Доллары в родительном падеже

⚠️ Внимание: Надстройки из ненадежных источников могут содержать вредоносный код. Всегда скачивайте файлы .xlam только с официальных сайтов или проверенных репозиториев.

Способ 5: Онлайн-конвертеры для разовых задач

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

СервисОсобенностиСсылка
num2word.ruПоддержка 7 валют, выбор падежа, API для разработчиковnum2word.ru
text.ru/num-to-txtПростой интерфейс, экспорт в Word/Exceltext.ru
calc.ru/chislo-propisyu.htmlРасширенные настройки формата, история расчетовcalc.ru

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

  1. Перейдите на выбранный сервис
  2. Введите сумму в числовом формате
  3. Выберите валюту и падеж (если требуется)
  4. Скопируйте полученный текст прописью
  5. Вставьте результат в Excel как значение (Ctrl+V)

Минусы онлайн-конвертеров:

  • 🔸 Требуется ручной ввод для каждой суммы
  • 🔸 Нет автоматизации (не подходит для больших таблиц)
  • 🔸 Риск утечки конфиденциальных данных при работе с финансовыми документами

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

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

  • 🔹 Неверное склонение валют: "1 рубль" vs "1 рублей". Решение: Используйте функции с проверкой остатка от деления на 100 (как в примере VBA выше).
  • 🔹 Округление копеек: 0,999 становится 1,00. Решение: Применяйте ОКРУГЛ с двумя знаками после запятой перед преобразованием.
  • 🔹 Отрицательные значения: "-100" превращается в "минус сто", что некорректно для бухгалтерии. Решение: Используйте формулу =ЕСЛИ(A1<0; "Минус "&ЧислоПрописью(ABS(A1)); ЧислоПрописью(A1)).
  • 🔹 Дробные числа: 123,456 преобразуется как 123, игнорируя дробную часть. Решение: Разделяйте рубли и копейки на две отдельные ячейки.

Еще одна распространенная ошибка — использование текстового формата для ячеек с суммами до преобразования. Если ячейка отформатирована как текст, Excel воспринимает число "1234" как строку, и функции вроде ЦЕЛОЕ() или ОКРУГЛ() не будут работать корректно. Всегда проверяйте формат ячейки (Числовой или Общий) перед началом расчетов.

Формат ячейки с суммой — числовой|Проверены отрицательные значения|Учтена дробная часть (копейки)|Выбрана правильная валюта|Тестирование на крайних значениях (0, 1, 2, 5, 11, 21 и т.д.)

-->

Продвинутые техники: динамические массивы и Power Query

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

1. Использование Power Query (Get & Transform):

Это решение подходит для обработки больших объемов данных. Алгоритм:

  1. Импортируйте данные в Power Query (Данные → Получить данные → Из таблицы/диапазона)
  2. Добавьте пользовательский столбец с функцией преобразования
  3. Используйте язык M для создания функции склонения
  4. Загрузите результаты обратно в Excel

Пример кода на M:

(number as number) as text =>

let

rub = Number.IntegerDivide(number, 1),

kop = Number.Mod(number, 1) * 100,

rubText = Number.ToText(rub, "ru-RU") & " рубль" &

if rub % 100 > 10 and rub % 100 < 20 then "ей"

else if rub % 10 = 1 then ""

else if rub % 10 > 1 and rub % 10 < 5 then "я"

else "ей",

kopText = if kop = 0 then " ноль копеек"

else " " & Number.ToText(kop) & " копеек" &

if kop % 100 > 10 and kop % 100 < 20 then ""

else if kop % 10 = 1 then "а"

else if kop % 10 > 1 and kop % 10 < 5 then "и"

else ""

in

rubText & kopText

2. Динамические массивы (Excel 365/2021):

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

=ЛЕТ(

сумма; A1;

рубли; ЦЕЛОЕ(сумма);

копейки; ОКРУГЛ((сумма-рубли)*100;0);

рубТекст; ЕСЛИ(рубли=0; "ноль рублей";

ЧислоПрописью(рубли) & ЕСЛИ(

И(МОД(рубли;100)>10; МОД(рубли;100)<20); " рублей";

ЕСЛИ(

МОД(рубли;10)=1; " рубль";

ЕСЛИ(

И(МОД(рубли;10)>1; МОД(рубли;10)<5); " рубля";

" рублей"

)

)

)

);

копТекст; ЕСЛИ(копейки=0; "00 копеек";

ЧислоПрописью(копейки) & " копеек"

);

рубТекст & " " & копТекст

)

Эти методы требуют более глубоких знаний Excel, но дают максимальную гибкость и производительность при работе с большими наборами данных.

FAQ: Часто задаваемые вопросы
Можно ли сделать расшифровку суммы прописью в Google Таблицах?

Да, в Google Таблицах можно использовать аналогичный подход с пользовательскими функциями на Google Apps Script. Вот пример кода:

function numToText(num) {

// Реализация преобразования (около 100 строк кода)

// Полную версию можно найти в документации Google

}

После добавления скрипта в таблице появится функция =numToText().

Почему моя функция VBA выдает ошибку "Несоответствие типов"?

Эта ошибка возникает, когда функция пытается обработать нечисловое значение. Проверьте:

  1. Формат ячейки с исходной суммой (должен быть Числовой)
  2. Отсутствие текстовых символов (например, "$100" вместо "100")
  3. Наличие скрытых непечатаемых символов (используйте =ЧИСТ())

Добавьте в начало функции проверку: If Not IsNumeric(rub) Then Exit Function.

Как сделать расшифровку для иностранных валют (доллары, евро)?

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

=SumProp(100; TRUE; "USD")  ' Доллары

=ЧислоПрописью(200; "EUR") ' Евро

Для долларов и евро склонение проще, чем для рублей (например, "1 доллар", "2 доллара", но "1 евро", "2 евро").

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

Да, если вы используете:

  • Формулы Excel (обновляются автоматически)
  • Функции VBA с объявлением как Volatile (пример: Public Function SumProp(...) As String: Application.Volatile: ...)
  • Динамические массивы в Excel 365

Надстройки и онлайн-конвертеры требуют ручного обновления.

Где можно скачать готовый шаблон Excel с функцией расшифровки?

Готовые шаблоны с функцией преобразования сумм прописью можно найти на следующих ресурсах:

  • ExcelVBA.ru (раздел "Шаблоны")
  • PlanetaExcel.ru (надстройка "ЧислоПрописью")
  • GitHub (поиск по запросу "Excel sum in words Russian")

При загрузке шаблонов всегда проверяйте их на наличие макросов (.xlsm) и запускайте в режиме песочницы (отключив макросы при первом открытии).