Бухгалтерам, финансовым аналитикам и предпринимателям регулярно приходится оформлять документы, где числовые значения дублируются прописью. Вручную переписывать суммы долго и чревато ошибками — особенно когда речь идёт о сотнях строк в отчётах или счетах. К счастью, Excel позволяет автоматизировать этот процесс с помощью встроенных функций, пользовательских формул и даже VBA-скриптов.
Но как выбрать оптимальный метод? Всё зависит от версии программы, требуемого формата вывода (рубли, доллары, копейки/центы) и уровня ваших навыков. В этой статье мы разберём 5 рабочих способов — от простейших для новичков до продвинутых для опытных пользователей. А ещё вы узнаете, как избежать типичных ошибок при конвертации и адаптировать решение под специфические задачи.
Сразу отметим: универсального решения "из коробки" в Excel нет. Стандартные функции вроде TEXT или NUMBERSTRING (доступна только в новых версиях Excel 365) не покрывают все случаи. Поэтому чаще всего приходится комбинировать инструменты или подключать сторонние надстройки. Но не пугайтесь — мы подробно разберём каждый этап.
═══
1. Встроенная функция NUMBERSTRING (Excel 365 и Excel 2021)
Если вы используете Microsoft 365 или Excel 2021, у вас есть доступ к новой функции NUMBERSTRING, которая упрощает преобразование чисел в текстовый формат. Она поддерживает несколько языков, включая русский, и позволяет настраивать отображение валюты.
Формат функции:
=NUMBERSTRING(число; [формат]; [язык])
Где:
- 📌 число — ячейка или значение для конвертации (например,
A1или1234,56); - 📌 формат (необязательно) — способ отображения:
0— стандартный (например, "одна тысяча двести тридцать четыре");1— с валютами (например, "одна тысяча двести тридцать четыре рубля 56 копеек");2— для чеков (с заглавной буквы).
- 📌 язык (необязательно) — код языка (для русского —
"ru-RU").
Пример для суммы в рублях:
=NUMBERSTRING(B2; 1; "ru-RU")
Если в ячейке B2 указано 1234,56, результат будет: "одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".
⚠️ Внимание: Функция NUMBERSTRING работает только в Excel 365 и Excel 2021. В более старых версиях (2019, 2016 и ранее) она недоступна — используйте альтернативные методы из следующих разделов.
═══
2. Пользовательская функция на VBA для старых версий Excel
Для пользователей Excel 2019, 2016, 2013 и более ранних версий единственный надёжный способ — создать пользовательскую функцию на VBA. Этот метод требует минимальных навыков программирования, но зато работает стабильно и поддерживает рубли, доллары, евро и другие валюты.
Следуйте пошаговой инструкции:
- Откройте редактор VBA: нажмите
Alt + F11или перейдите вРазработчик → Visual Basic(если вкладкиРазработчикнет, включите её вФайл → Параметры → Настройка ленты). - В редакторе выберите
Insert → Module(Вставка → Модуль). - Скопируйте и вставьте в модуль следующий код:
Function SumProp(ByVal Summa As Currency, Optional Valuta As String = "руб") As StringDim Rubl As String, Kop As String, Temp As String
Dim RubNol As String, KopNol As String, StrSum As String
Dim kopeiki As Integer
' Массивы для преобразования чисел в слова
Dim Ed(1 To 9) As String, Des(1 To 9) As String, Sotni(1 To 9) As String
Dim i As Integer, j As Integer, Sum As String
Ed(1) = "один": Ed(2) = "два": Ed(3) = "три": Ed(4) = "четыре": Ed(5) = "пять"
Ed(6) = "шесть": Ed(7) = "семь": Ed(8) = "восемь": Ed(9) = "девять"
Des(1) = "десять": Des(2) = "двадцать": Des(3) = "тридцать": Des(4) = "сорок"
Des(5) = "пятьдесят": Des(6) = "шестьдесят": Des(7) = "семьдесят"
Des(8) = "восемьдесят": Des(9) = "девяносто"
Sotni(1) = "сто": Sotni(2) = "двести": Sotni(3) = "триста": Sotni(4) = "четыреста"
Sotni(5) = "пятьсот": Sotni(6) = "шестьсот": Sotni(7) = "семьсот"
Sotni(8) = "восемьсот": Sotni(9) = "девятьсот"
' Округление копеек
kopeiki = Round((Summa - Int(Summa)) * 100, 0)
' Преобразование рублей
If Int(Summa) = 0 Then
Rubl = "ноль"
Else
Temp = Str(Int(Summa))
For i = 1 To Len(Temp)
If Mid(Temp, i, 1) <> " " Then
Sum = Sum & Mid(Temp, i, 1)
End If
Next i
Temp = StrReverse(Sum)
For i = 1 To Len(Temp) Step 3
j = j + 1
Select Case j
Case 1: Rubl = Rubl & Oborot(Mid(Temp, i, 3), 0)
Case 2: Rubl = Rubl & Oborot(Mid(Temp, i, 3), 1)
Case 3: Rubl = Rubl & Oborot(Mid(Temp, i, 3), 2)
End Select
Next i
Temp = StrReverse(Rubl)
If Left(Temp, 1) = " " Then Temp = Mid(Temp, 2)
Rubl = Temp
End If
' Преобразование копеек
If kopeiki = 0 Then
Kop = "00"
Else
Kop = Right("0" & kopeiki, 2)
End If
' Формирование строки с учётом валюты
Select Case Valuta
Case "руб", "RUB"
If kopeiki = 0 Then
SumProp = Rubl & " руб. " & Kop & " коп."
Else
SumProp = Rubl & " руб. " & Kop & " коп."
End If
Case "долл", "USD", "$"
SumProp = Rubl & " долл. " & Kop & " цент."
Case "евро", "EUR", "€"
SumProp = Rubl & " евро " & Kop & " цент."
Case Else
SumProp = Rubl & " " & Valuta & " " & Kop & "/100"
End Select
' Обработка единиц для рублей
If Right(Rubl, 4) = "один" And Valuta = "руб" Then
SumProp = Left(SumProp, Len(SumProp) - 7) & "рубль " & Kop & " коп."
ElseIf (Right(Rubl, 5) = "два " Or Right(Rubl, 5) = "три " Or Right(Rubl, 5) = "четыр") And Valuta = "руб" Then
SumProp = Left(SumProp, Len(SumProp) - 7) & "рубля " & Kop & " коп."
End If
End Function
Function Oborot(Temp As String, Razr As Integer) As String
Dim Ed(1 To 9) As String, Des(1 To 9) As String, Sotni(1 To 9) As String
Dim i As Integer, j As Integer, Sum As String
Ed(1) = "один": Ed(2) = "два": Ed(3) = "три": Ed(4) = "четыре": Ed(5) = "пять"
Ed(6) = "шесть": Ed(7) = "семь": Ed(8) = "восемь": Ed(9) = "девять"
Des(1) = "десять": Des(2) = "двадцать": Des(3) = "тридцать": Des(4) = "сорок"
Des(5) = "пятьдесят": Des(6) = "шестьдесят": Des(7) = "семьдесят"
Des(8) = "восемьдесят": Des(9) = "девяносто"
Sotni(1) = "сто": Sotni(2) = "двести": Sotni(3) = "триста": Sotni(4) = "четыреста"
Sotni(5) = "пятьсот": Sotni(6) = "шестьсот": Sotni(7) = "семьсот"
Sotni(8) = "восемьсот": Sotni(9) = "девятьсот"
Select Case Razr
Case 0: RazrName = " "
Case 1: RazrName = " тысяча "
Case 2: RazrName = " миллион "
End Select
If Len(Temp) = 3 And Mid(Temp, 1, 1) <> "0" Then
Oborot = Sotni(Mid(Temp, 1, 1)) & " "
If Mid(Temp, 2, 1) = "1" Then
Oborot = Oborot & Des(1) & " "
If Mid(Temp, 3, 1) = "0" Then Exit Function
Else
If Mid(Temp, 2, 1) <> "0" Then Oborot = Oborot & Des(Mid(Temp, 2, 1)) & " "
If Mid(Temp, 3, 1) <> "0" Then Oborot = Oborot & Ed(Mid(Temp, 3, 1)) & RazrName
End If
ElseIf Len(Temp) = 3 And Mid(Temp, 1, 1) = "0" Then
If Mid(Temp, 2, 1) = "1" Then
Oborot = Des(1) & " "
If Mid(Temp, 3, 1) = "0" Then Exit Function
Else
If Mid(Temp, 2, 1) <> "0" Then Oborot = Des(Mid(Temp, 2, 1)) & " "
If Mid(Temp, 3, 1) <> "0" Then Oborot = Oborot & Ed(Mid(Temp, 3, 1)) & RazrName
End If
ElseIf Len(Temp) = 2 Then
If Mid(Temp, 1, 1) = "1" Then
Oborot = Des(1) & " "
If Mid(Temp, 2, 1) = "0" Then Exit Function
Else
If Mid(Temp, 1, 1) <> "0" Then Oborot = Des(Mid(Temp, 1, 1)) & " "
If Mid(Temp, 2, 1) <> "0" Then Oborot = Oborot & Ed(Mid(Temp, 2, 1)) & RazrName
End If
ElseIf Len(Temp) = 1 Then
If Mid(Temp, 1, 1) <> "0" Then Oborot = Ed(Mid(Temp, 1, 1)) & RazrName
End If
End Function
- Закройте редактор VBA. Теперь функция
SumPropдоступна в Excel как стандартная.
Пример использования:
=SumProp(B2; "руб")
Где B2 — ячейка с числом. Для долларов используйте =SumProp(B2; "USD").
Убедитесь, что макросы разрешены (Файл → Параметры → Центр управления безопасностью)
Сохраните файл как *.xlsm (с поддержкой макросов)
Проверьте регион ячейки (должен быть "Русский")
Тестируйте функцию на небольших суммах (например, 100, 101, 1500)-->
⚠️ Внимание: Если при вводе функции Excel выдаёт ошибку#ИМЯ?, проверьте:
- 🔹 Правильно ли скопирован код (особенно кавычки и регистр);
- 🔹 Сохранён ли файл в формате .xlsm (не .xlsx);
- 🔹 Разрешены ли макросы в настройках безопасности.
═══
3. Использование надстройки "ЧислоПрописью" (без VBA)
Если вам не хочется возиться с кодом, можно установить готовую надстройку. Одна из самых популярных — "ЧислоПрописью" от Plumsail или аналогичные решения. Они добавляют в Excel новую функцию, которую можно использовать как стандартную.
Плюсы метода:
- 🔹 Не требует знаний VBA;
- 🔹 Работает во всех версиях Excel;
- 🔹 Поддерживает несколько валют и языков;
- 🔹 Обновляется разработчиком.
Минусы:
- 🔸 Некоторые надстройки платные;
- 🔸 Требуется установка (может блокироваться корпоративными политиками безопасности).
Как установить надстройку:
- Скачайте файл надстройки (.xlam) с официального сайта (например, Plumsail).
- В Excel перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Перейти...(управление надстройками Excel). - Нажмите
Обзор, найдите скачанный файл и подтвердите установку.
После установки в списке функций появится =ЧислоПрописью(). Пример:
=ЧислоПрописью(B2; "RUR")
Где скачать бесплатные надстройки?
Бесплатные аналоги можно найти на форумах, например:
🔹 ExcelWorld (раздел "Надстройки")
🔹 Планета Excel (форум, тема "Число прописью")
🔹 GitHub (поиск по запросу "Excel number to words Russian")
Внимание: скачивайте файлы только с проверенных источников, чтобы избежать вирусов!═══
4. Формулы без VBA (для простых случаев)
Если вам нужно преобразовать только целые числа без копеек/центов (например, для номеров или количества), можно обойтись комбинацией стандартных функций Excel: ИНДЕКС, ПОИСКПОЗ и ТЕКСТ. Этот метод не идеален, но подходит для ограниченных задач.
Пример для чисел от 0 до 999:
- Создайте на листе таблицу соответствия чисел и их текстового вида (см. таблицу ниже).
- Используйте формулу:
=ЕСЛИ(B2=0; "ноль";ТЕКСТ(ЦЕЛОЕ(B2/100);) & " " & ИНДЕКС($A$2:$A$10; ПОИСКПОЗ(ОСТАТ(B2;100); $B$2:$B$100; 0)))
| Число (0–9) | Прописью | Число (10–99) | Прописью |
|---|---|---|---|
| 0 | ноль | 10 | десять |
| 1 | один | 20 | двадцать |
| 2 | два | 30 | тридцать |
| 3 | три | 40 | сорок |
| 4 | четыре | 50 | пятьдесят |
Для чисел >999 придётся добавлять вложенные формулы для тысяч, миллионов и т. д., что делает метод громоздким. Поэтому мы рекомендуем его только для ограниченных диапазонов (например, для номеров документов).
⚠️ Внимание: Этот способ не учитывает склонение валют (рубль/рубля/рублей) и не работает с дробными числами. Для финансовых документов используйте VBA или надстройки.
═══
5. Онлайн-конвертеры и Power Query
Если вам нужно одноразово преобразовать список чисел, можно воспользоваться онлайн-конвертерами или инструментом Power Query (доступен в Excel 2016+).
Способ 1: Онлайн-сервисы
- 🌐 Num2Word — поддерживает рубли, доллары, евро;
- 🌐 Calculator888 — с настройкой валюты и падежей;
- 🌐 TextFromNumbers — для английских чисел (dollars, pounds).
Как использовать:
- Скопируйте числа из Excel;
- Вставьте в поле на сайте;
- Выберите валюту и формат;
- Скопируйте результат обратно в Excel.
Способ 2: Power Query
Если у вас Excel 2016 или новее, можно автоматизировать процесс с помощью Power Query:
- Выделите данные и перейдите в
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте пользовательский столбец с формулой на языке M:
= Number.ToText([YourColumn], "ru-RU")(замените
YourColumnна имя вашего столбца). - Загрузите данные обратно в Excel.
(amount as number) as text =>
let
rubles = Number.IntegerDivide(amount, 1),
kopecks = Number.Mod(amount, 1) * 100,
rublesText = Number.ToText(rubles, "ru-RU"),
kopecksText = Number.ToText(Number.Round(kopecks), "ru-RU"),
result = rublesText & " руб. " & kopecksText & " коп."
in
result
Этот код разделит сумму на рубли и копейки и сконвертирует их отдельно.-->
═══
6. Типичные ошибки и как их избежать
Даже с автоматизированными методами пользователи сталкиваются с проблемами. Вот TOP-5 ошибок и способы их решения:
- 🔴 Ошибка #ИМЯ? в VBA
Причина: опечатка в коде или файл не сохранён как .xlsm.
Решение: проверьте регистр в названии функции (
SumProp, а неsumprop) и формат файла. - 🔴 Неправильное склонение валют
Причина: функция не учитывает правила русского языка (1 рубль, 2 рубля, 5 рублей).
Решение: используйте VBA-код из раздела 2 — он корректно обрабатывает склонения.
- 🔴 Копейки отображаются как 00
Причина: число в ячейке целое (например,
100вместо100,50).Решение: форматируйте ячейку как числовой формат с 2 десятичными знаками.
- 🔴 Надстройка не работает
Причина: блокировка макросов или конфликт с другими надстройками.
Решение: временно отключите другие надстройки в
Файл → Параметры → Надстройки. - 🔴 Медленная работа при больших данных
Причина: VBA-функции пересчитываются при каждом изменении листа.
Решение: преобразуйте результаты в значения (
Копировать → Специальная вставка → Значения).
🔹 0 (ноль рублей)
🔹 1,01 (один рубль одна копейка)
🔹 100,50 (сто рублей пятьдесят копеек)
🔹 1234,99 (одна тысяча двести тридцать четыре рубля девяносто девять копеек)
Это поможет выявить ошибки склонения или округления.-->
═══
7. Сравнение методов: какой выбрать?
Чтобы помочь вам определиться, мы составили сравнительную таблицу:
| Метод | Поддерживаемые версии Excel | Требует VBA? | Поддержка валют | Скорость работы | Сложность настройки |
|---|---|---|---|---|---|
NUMBERSTRING |
365, 2021 | ❌ Нет | ✅ Рубли, доллары, евро | ⚡ Мгновенно | ⭐ Очень просто |
| Пользовательская VBA-функция | 2019, 2016, 2013 | ✅ Да | ✅ Любые (настраивается) | 🐢 Медленнее при больших данных | ⭐⭐ Средняя |
| Надстройка | Все версии | ❌ Нет | ✅ Зависит от надстройки | ⚡ Быстро | ⭐ Очень просто |
| Формулы без VBA | Все версии | ❌ Нет | ❌ Только рубли (без копеек) | ⚡ Быстро | ⭐⭐⭐ Сложно (много вложенных функций) |
| Power Query | 2016, 2019, 365 | ❌ Нет | ✅ Настраивается | ⚡ Быстро | ⭐⭐ Средняя |
Наш совет:
- 🔹 Для Excel 365/2021 используйте
NUMBERSTRING— это самый простой и надёжный способ. - 🔹 Для Excel 2019/2016 с небольшими данными подойдёт VBA-функция.
- 🔹 Если нужно одноразовое преобразование, воспользуйтесь онлайн-конвертером.
- 🔹 Для корпоративных решений с большими объёмами данных выбирайте надстройки.
═══
FAQ: Частые вопросы
Можно ли преобразовать сумму прописью на английском в Excel?
Да. В Excel 365 используйте функцию =NUMBERSTRING(число; 1; "en-US"). Для старых версий найдите VBA-код с поддержкой английского (например, на ExcelForum) или используйте надстройки вроде SpellNumber.
Почему функция возвращает "ноль рублей 00 копеек" для пустой ячейки?
Это стандартное поведение. Чтобы избежать этого, оберните функцию в ЕСЛИ:
=ЕСЛИ(B2=""; ""; SumProp(B2; "руб"))
Как преобразовать число прописью в Google Таблицах?
В Google Sheets нет встроенной функции, но можно:
- Использовать App Script (аналог VBA);
- Установить надстройку "Number to Words" из магазина;
- Воспользоваться формулой с
IMPORTRANGEи внешним сервисом.
Можно ли сделать, чтобы первая буква была заглавной?
Да. В VBA-функции добавьте строку:
SumProp = UCase(Left(SumProp, 1)) & Mid(SumProp, 2)
Или используйте формулу:
=ПРОПНАЧ(SumProp(B2; "руб"))
Как преобразовать отрицательные числа?
Добавьте в VBA-функцию проверку знака:
If Summa < 0 Then
SumProp = "минус " & SumProp(Abs(Summa), Valuta)
End If
Или используйте ЕСЛИ в Excel:
=ЕСЛИ(B2<0; "минус " & SumProp(ABS(B2); "руб"); SumProp(B2; "руб"))