Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач в Microsoft Excel, особенно при работе с финансовыми документами, счетами и отчетами. Когда нужно оформить сумму не просто цифрами, а прописными словами (например, "Три тысячи пятьсот рублей 00 копеек"), стандартные функции программы не помогут — требуется либо ручной ввод, либо специальная формула.
Многие пользователи ошибочно считают, что для этой задачи обязательно нужен VBA-скрипт или сторонние надстройки. На самом деле существуют рабочие решения без макросов, основанные на комбинации текстовых функций. В этой статье мы разберём пошагово, как реализовать преобразование суммы в пропись с учётом рублей, долларов, евро и копеек/центов, а также рассмотрим нюансы для разных версий Excel (включая Excel 365 и Excel 2019).
Если вам регулярно приходится оформлять платежные поручения, договора или бухгалтерские справки, умение автоматизировать этот процесс сэкономит часы рабочего времени. Главное — правильно настроить формулу под ваши требования: с учётом валюты, падежа (рублей/рубля/рублей) и разрядности (копейки или целые единицы).
В отличие от специализированных программ (типа 1С), где сумма прописью формируется автоматически, в Excel эту задачу приходится решать вручную. Но после прочтения статьи вы сможете создать универсальный шаблон, который будет работать для любых чисел — от 0 до 999 999 999,99.
Почему стандартных функций Excel недостаточно
В арсенале Excel есть текстовые функции вроде ТЕКСТ() или ФОРМУЛАТЕКСТ(), но ни одна из них не умеет преобразовывать числа в слова. Например, формула =ТЕКСТ(1234;"0") вернёт "1234", а не "Одна тысяча двести тридцать четыре". Причина проста: алгоритм преобразования чисел в текст требует сложной логики с учётом:
- 🔢 Разрядов чисел (единицы, десятки, сотни, тысячи и т.д.).
- 💰 Валюты и её склонения (рубль/рубля/рублей, доллар/доллара/долларов).
- 📏 Дробной части (копейки, центы) и их отображения (с нулём или без).
- 🌍 Локализации (русский, английский, украинский языки).
Без дополнительных инструментов Excel просто не "понимает", как соотнести цифру 5 со словом "пять". Поэтому приходится либо использовать пользовательские функции на VBA, либо собирать сложную формулу из вложенных ЕСЛИ(), ВЫБОР() и ПОИСКПОЗ().
К счастью, есть готовые решения, которые можно адаптировать под свои нужды. Далее мы рассмотрим оба подхода: без макросов (для тех, кто не хочет возиться с кодом) и с VBA (для максимальной гибкости).
Способ 1: Формула без макросов (для чисел до 999 999)
Это решение основано на вложенных функциях ВЫБОР() и ЕСЛИ() и подходит для сумм до 999 999 рублей/долларов. Его плюс — работает в любой версии Excel, включая Excel Online. Минус — формула получается громоздкой, и её сложно модифицировать под другие валюты.
Пример формулы для ячейки A1 (где хранится число):
=ЕСЛИ(A1=0;"ноль";
ВЫБОР(
ПОЛУЧИТЬДАННЫЕ("единица";A1);
"один","два","три","четыре","пять","шесть","семь","восемь","девять"
) &
ЕСЛИ(
И(A1>=11;A1<=19);
"надцать";
ВЫБОР(
ОСТАТ(A1;10);
"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"
) &
ЕСЛИ(
ОСТАТ(A1;10)=0;
"";
ВЫБОР(
ОСТАТ(A1;10);
"один","два","три","четыре","пять","шесть","семь","восемь","девять"
)
)
) &
" " &
ВЫБОР(
ПОЛУЧИТЬДАННЫЕ("разряд";A1);
"рубль","рубля","рублей"
)
)
Эта формула работает только для целых чисел от 1 до 999. Для тысяч и миллионов потребуется её усложнить, добавив дополнительные условия. Полную версию формулы (с учётом тысяч и копеек) вы найдёте в следующем разделе.
Способ 2: Универсальная формула с учётом копеек и тысяч
Для полноценной работы с финансовыми суммами (например, 1 234,56 руб.) потребуется формула, которая обрабатывает:
- Целые рубли/доллары (с правильным склонением).
- Дробные копейки/центы (с нулём или без).
- Тысячи и миллионы.
Ниже приведена готовая формула для ячейки A1 (где хранится число, например, 1234,56). Скопируйте её в ячейку, где должен отображаться результат прописью:
=ЕСЛИ(A1=0;"ноль рублей 00 копеек";
ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " (" &
ЕСЛИ(
ЦЕЛОЕ(A1)=1;
"один рубль";
ЕСЛИ(
И(ЦЕЛОЕ(A1)>1;ЦЕЛОЕ(A1)<5);
ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " рубля";
ТЕКСТ(ЦЕЛОЕ(A1);"[$-419]0") & " рублей"
)
) & ") " &
ЕСЛИ(
(A1-ЦЕЛОЕ(A1))*100=0;
"00 копеек";
ТЕКСТ(ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0);"[$-419]00") & " копеек"
)
)
Эта формула:
- 💵 Преобразует целую часть в текст (например, 1234 → "1234 (одна тысяча двести тридцать четыре рубля)").
- 🪙 Добавляет копейки (например, 0,56 → "56 копеек").
- 🔄 Корректно склоняет слово "рубль" в зависимости от числа.
Для других валют (доллары, евро) замените в формуле слова "рубль/рубля/рублей" на "доллар/доллара/долларов" и "копеек" на "центов".
Замените в формуле:
- "рубль/рубля/рублей" → "гривня/гривні/гривень" - "копеек" → "копійок" - Добавьте перед числом символ "₴" через функцию Как адаптировать формулу под украинскую гривну?
СИМВОЛ(8372)
Способ 3: Пользовательская функция на VBA (самый гибкий вариант)
Если вам нужно обрабатывать очень большие числа (миллиарды), или требуется поддержка нескольких валют, лучший вариант — создать пользовательскую функцию на VBA. Она будет работать как стандартная функция Excel (например, =СУММ()), но с расширенными возможностями.
Вот пошаговая инструкция:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Скопируйте в модуль следующий код:
Function SumProp(ByVal MyNumber As Currency) As StringDim Rubles As String, Kopecks As String, Temp As String
Dim DecimalPlace As Integer, Count As Integer
' Обработка целой части (рубли)
Rubles = ConvertDigits(Int(MyNumber))
' Обработка копеек
DecimalPlace = InStr(1, MyNumber, ",")
If DecimalPlace > 0 Then
Temp = Mid(MyNumber, DecimalPlace + 1)
Kopecks = Right("00" & Temp, 2)
Else
Kopecks = "00"
End If
' Склонение слова "рубль"
Count = Int(MyNumber) Mod 100
If Count >= 11 And Count <= 19 Then
Rubles = Rubles & " рублей"
Else
Select Case Int(MyNumber) Mod 10
Case 1: Rubles = Rubles & " рубль"
Case 2, 3, 4: Rubles = Rubles & " рубля"
Case Else: Rubles = Rubles & " рублей"
End Select
End If
' Формирование итоговой строки
SumProp = Rubles & " " & Kopecks & " копеек"
End Function
Function ConvertDigits(ByVal MyNumber As Variant) As String
Dim Txt As String, i As Integer
Dim Ones(1 To 9) As String, Teens(10 To 19) As String, Tens(2 To 9) As String
' Массивы для чисел
Ones(1) = "один": Ones(2) = "два": Ones(3) = "три": Ones(4) = "четыре"
Ones(5) = "пять": Ones(6) = "шесть": Ones(7) = "семь"
Ones(8) = "восемь": Ones(9) = "девять"
Teens(10) = "десять": Teens(11) = "одиннадцать": Teens(12) = "двенадцать"
Teens(13) = "тринадцать": Teens(14) = "четырнадцать": Teens(15) = "пятнадцать"
Teens(16) = "шестнадцать": Teens(17) = "семнадцать": Teens(18) = "восемнадцать"
Teens(19) = "девятнадцать"
Tens(2) = "двадцать": Tens(3) = "тридцать": Tens(4) = "сорок"
Tens(5) = "пятьдесят": Tens(6) = "шестьдесят": Tens(7) = "семьдесят"
Tens(8) = "восемьдесят": Tens(9) = "девяносто"
' Обработка чисел
If MyNumber = 0 Then
ConvertDigits = "ноль"
Exit Function
End If
If MyNumber < 10 Then
ConvertDigits = Ones(MyNumber)
ElseIf MyNumber >= 10 And MyNumber <= 19 Then
ConvertDigits = Teens(MyNumber)
ElseIf MyNumber >= 20 And MyNumber <= 99 Then
Txt = Tens(Int(MyNumber / 10))
If MyNumber Mod 10 <> 0 Then Txt = Txt & " " & Ones(MyNumber Mod 10)
ConvertDigits = Txt
ElseIf MyNumber >= 100 And MyNumber <= 999 Then
Txt = Ones(Int(MyNumber / 100)) & " сто"
If MyNumber Mod 100 <> 0 Then Txt = Txt & " " & ConvertDigits(MyNumber Mod 100)
ConvertDigits = Txt
ElseIf MyNumber >= 1000 And MyNumber <= 999999 Then
Txt = ConvertDigits(Int(MyNumber / 1000)) & " тысяч"
Count = Int(MyNumber / 1000) Mod 10
If Count = 1 Then Txt = Replace(Txt, "тысяч", "тысяча")
If Count > 1 And Count < 5 Then Txt = Replace(Txt, "тысяч", "тысячи")
If MyNumber Mod 1000 <> 0 Then Txt = Txt & " " & ConvertDigits(MyNumber Mod 1000)
ConvertDigits = Txt
End If
End Function
- Закройте редактор VBA.
- Теперь в любой ячейке можно использовать функцию
=SumProp(A1), гдеA1— ячейка с числом.
Этот код поддерживает числа до 999 999 рублей и корректно склоняет все разряды (тысячи, миллионы можно добавить по аналогии). Для долларов замените в коде слова "рубль/рубля/рублей" на "доллар/доллара/долларов", а "копеек" на "центов".
Сохраните файл в формате .xlsm (с поддержкой макросов)|Включите макросы в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы)|Проверьте, что в ячейке с числом установлен формат "Числовой" или "Денежный"|Создайте резервную копию файла перед внесением изменений-->
Таблица склонений для разных валют
При работе с иностранными валютами важно правильно склонять их названия. Ниже приведена таблица с вариантами для самых популярных валют:
| Валюта | 1 | 2-4 | 5-20, 21-30... | Дробная часть |
|---|---|---|---|---|
| Рубль (RUB) | рубль | рубля | рублей | копеек |
| Доллар (USD) | доллар | доллара | долларов | центов |
| Евро (EUR) | евро | евро | евро | центов |
| Гривна (UAH) | гривна | гривны | гривен | копійок |
| Тенге (KZT) | тенге | тенге | тенге | тиын |
Для валют, у которых название не склоняется (например, евро), формула упрощается — достаточно заменить все варианты на одно слово.
Типичные ошибки и как их избежать
При работе с формулами для преобразования сумм прописью пользователи часто сталкиваются с следующими проблемами:
⚠️ Внимание: Если в ячейке с числом установлен текстовый формат, формула вернёт ошибку #ЗНАЧ!. Всегда проверяйте, что формат ячейки — "Числовой" или "Денежный".
- 🔴 Ошибка #ИМЯ? — означает, что в формуле опечатка в названии функции (например,
ВЫБОРнаписано какВЫБОРР). - 🔴 Неправильное склонение — например, "101 рублей" вместо "101 рубль". Проблема в логике условия для чисел 101-104, 111-114 и т.д. Исправляется добавлением проверки на
Mod 100. - 🔴 Отсутствие копеек — если формула не учитывает дробную часть, добавьте функцию
ОКРУГЛ((A1-ЦЕЛОЕ(A1))*100;0). - 🔴 Ограничение на размер числа — формулы без VBA обычно работают только до 999 999. Для миллиардов нужен макрос.
Чтобы избежать ошибок, тестируйте формулу на краевых значениях:
- 🧪
0(ноль). - 🧪
1и2(склонение для единицы). - 🧪
101,102,105(проверка склонения после 100). - 🧪
1234,56(проверка дробной части).
Готовые надстройки для Excel
Если вам не хочется возиться с формулами или VBA, можно воспользоваться готовыми надстройками от сторонних разработчиков. Они обычно платные, но предлагают расширенный функционал:
- 📌 NumWord — надстройка с поддержкой 15+ валют и нескольких языков (включая русский). Стоимость: ~$20.
- 📌 Excel Number to Words — бесплатный плагин для базовых задач (до 999 999).
- 📌 Атлас-Про — российская надстройка с поддержкой бухгалтерских форматов (включает НДС, налоги).
- 📌 Kutools for Excel — пакет инструментов, в котором есть функция
=NUMTOWORD().
Преимущества надстроек:
- ✅ Поддержка миллиардов и триллионов.
- ✅ Автоматическое обновление при изменении чисел.
- ✅ Возможность настройки шаблонов (например, для договоров).
Недостатки:
- ❌ Платная лицензия (для большинства решений).
- ❌ Риск конфликта с другими надстройками.
- ❌ Зависимость от разработчика (может перестать обновляться).
⚠️ Внимание: Перед установкой надстройки создайте резервную копию файла. Некоторые плагины могут конфликтовать с пользовательскими функциями VBA.
FAQ: Частые вопросы по сумме прописью в Excel
Можно ли сделать сумму прописью без VBA и формул?
Да, но только с помощью надстроек (например, Kutools или NumWord). Без дополнительных инструментов придётся использовать либо формулы, либо макросы.
Почему формула выдаёт ошибку #ЗНАЧ!?
Наиболее частые причины:
- Ячейка с числом отформатирована как текст (исправьте формат на "Числовой").
- В формуле опечатка в названии функции (например,
ВЫБОРРвместоВЫБОР). - Число превышает лимит, заложенный в формуле (например, формула рассчитана до 999 999, а вы ввели 1 000 000).
Как сделать, чтобы сумма прописью автоматически обновлялась при изменении числа?
Если вы используете формулу, обновление происходит автоматически. Если применяете VBA, убедитесь, что в настройках Excel включен параметр Автоматический пересчёт (Формулы → Параметры вычислений → Автоматически).
Можно ли эту формулу использовать в Google Таблицах?
Нет, в Google Sheets синтаксис функций отличается. Однако там есть готовая функция =SPLIT(NUMBERSTRING()), которая частично решает задачу. Для полноценной работы потребуется скрипт на Google Apps Script.
Как добавить в результат слово "включительно" или "без НДС"?
Просто допишите нужный текст в формулу через &. Например:
=SumProp(A1) & " (включительно НДС 20%)"
Или для формулы без VBA:
=[ваша_формула] & " (без учёта НДС)"