Преобразование числовых значений в текстовый формат — одна из самых востребованных задач при работе с финансовой документацией в 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, затем:
- В меню выберите
Insert → Module - Вставьте следующий код:
Function SumProp(ByVal MyNumber As Currency) As StringDim 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
- Сохраните модуль и закройте редактор
Теперь в любой ячейке можно использовать функцию =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 |
Установка надстроек стандартная:
- Скачайте файл надстройки (
.xlamили.xlsm) - В Excel перейдите в
Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти - Нажмите "Обзор" и выберите скачанный файл
- Активируйте надстройку и следуйте инструкциям
Надстройки типа 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 и новее.
Алгоритм действий:
- Выделите таблицу с суммами и нажмите
Данные → Из таблицы/диапазона(в Excel 2016+) илиPower Query → Из таблицы(в Excel 2013) - В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
= Number.ToText([Сумма], "ru-RU") & " рублей"Где
[Сумма]— название столбца с числовыми данными. - Нажмите
Закрыть и загрузить— в Excel появится новая таблица с текстовыми суммами.
Минус этого метода — Power Query преобразует числа в текст по стандарту ISO (например, "1 234,56"), но не добавляет склонения валют. Чтобы получить полноценный результат, комбинируйте Power Query с VBA или надстройками.
6. Типичные ошибки и как их избежать
При преобразовании чисел в текстовые суммы пользователи часто сталкиваются с 5 распространёнными проблемами:
- Округление копеек: Excel может неправильно обрабатывать дробные числа из-за настроек отображения. Решение: используйте
=ОКРУГЛ(A1;2)перед преобразованием. - Отрицательные числа: Формулы и скрипты часто не учитывают знак "минус". Решение: добавьте проверку:
=ЕСЛИ(A1<0;"минус ";"") & SumProp(ABS(A1)) - Слишком большие числа: Числа свыше
999 999 999могут некорректно обрабатываться. Решение: используйте надстройки или доработайте VBA-код для поддержки триллионов. - Некорректные региональные настройки: Если в системе установлен английский язык, функции типа
ТЕКСТмогут выдавать ошибки. Решение: измените язык Excel вФайл → Параметры → Язык. - Потеря форматирования при копировании: При экспорте в Word или PDF текстовые суммы могут "съезжать". Решение: используйте
Перенос текста(вкладкаГлавная) для ячеек с прописными суммами.
Самая критичная ошибка — игнорирование копеек/центов. Например, сумма
Чтобы убедиться, что ваша формула или скрипт правильно склоняет валюту, протестируйте её на следующих суммах: - 1.00 → "один рубль" - 2.00 → "два рубля" - 5.00 → "пять рублей" - 21.00 → "двадцать один рубль" - 101.00 → "сто один рубль" - 102.00 → "сто два рубля" - 105.00 → "сто пять рублей" Если хотя бы одно из этих значений отображается некорректно, доработайте код или используйте надстройку.100.99 без обработки дробной части преобразуется в "сто рублей", хотя должно быть "сто рублей 99 копеек". Все приведённые в статье методы учитывают эту особенность.
Как проверить правильность склонений?
7. Автоматизация для бухгалтеров: интеграция с 1С и Word
В корпоративной среде часто требуется автоматическое формирование документов (счета, акты, договоры) с прописными суммами. Для этого можно настроить связку Excel + 1С или Excel + Word.
Пример для 1С:
- 📊 Экспортируйте данные из 1С в Excel через
Внешние отчётыилиОбработки. - 📊 В Excel используйте VBA-функцию
SumProp(из второго способа) для преобразования сумм. - 📊 Импортируйте обратно в 1С через
Загрузку данныхили сохраняйте в формате.csvдля дальнейшей обработки.
Пример для Word:
- В Excel подготовьте таблицу с суммами и их текстовыми аналогами (используя любой из описанных методов).
- В Word создайте шаблон документа с закладками (например,
SumText). - Напишите 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").
Почему вместо суммы прописью отображается ошибка #ИМЯ?
Ошибка #ИМЯ? возникает по трём причинам:
- 🔍 Опечатка в названии функции: Проверьте регистр и название (например,
SumProp, а неsumprop). - 🔍 Макросы отключены: Включите их в настройках безопасности Excel.
- 🔍 Файл не сохранён как .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, обработайте данные и загрузите обратно.