Преобразование числовых значений в текстовый формат прописью — задача, с которой сталкиваются бухгалтеры, финансовые аналитики и менеджеры при оформлении договоров, счетов или отчетов. Вручную переписывать цифры словами не только долго, но и чревато ошибками. К счастью, Microsoft Excel предлагает несколько способов автоматизации этого процесса — от встроенных функций до пользовательских решений на VBA.
Многие пользователи ошибочно считают, что в Excel нет инструментов для такой конвертации. На самом деле стандартные функции программы (например, ТЕКСТ или ЧИСЛОТЕКСТ в некоторых локализациях) не справляются с задачей полностью, но их можно комбинировать с дополнительными надстройками или писать собственные формулы. В этой статье мы разберем 5 рабочих методов — от простейших до продвинутых, включая обработку копеек, долларов и валюты с учетом падежей.
Особое внимание уделим нюансам: как правильно оформить сумму с копейками (например, "пятьсот рублей 30 копеек"), почему стандартная функция BAHTTEXT работает только с тайским языком, и как обойти ограничения Excel без программирования. Если вам нужно срочно сгенерировать прописную сумму для документа — воспользуйтесь готовыми шаблонами из статьи.
1. Стандартные функции Excel: ограничения и лайфхаки
В базовой комплектации Excel нет универсальной функции для преобразования чисел в текст прописью на русском языке. Однако в некоторых локализованных версиях (например, тайской) есть встроенная функция BAHTTEXT, которая конвертирует числа в слова на тайском. Для русского языка придется использовать обходные пути.
Единственная "полурабочая" функция — ТЕКСТ (TEXT в английской версии), но она преобразует числа в текстовый формат с сохранением цифр, а не прописью. Например, формула =ТЕКСТ(123;"0") вернет "123", а не "сто двадцать три". Тем не менее, эту функцию можно использовать в комбинации с другими методами для форматирования результата.
Вот что можно сделать со стандартными инструментами:
- 🔹 Форматирование ячеек: измените формат на "Текстовый" (
Ctrl+1 → Числовой формат → Текстовый), чтобы Excel не округлял большие числа. - 🔹 Функция
РУБЛЬ: в некоторых версиях Excel для России есть скрытая функцияРУБЛЬ.ДЕНЬГИ(доступна черезФормулы → Финансовые), но она возвращает сумму в формате "123,00 р.", а не прописью. - 🔹 Конкатенация: объедините число с текстовым постфиксом через
&, например:=A1 & " руб.".
⚠️ Внимание: Если вы работаете с Excel Online или мобильной версией, часть функций (например, пользовательские надстройки) могут быть недоступны. В этом случае используйте методы на основе формул или VBA.
2. Пользовательская функция на VBA: универсальное решение
Самый гибкий способ — создать собственную функцию на VBA (Visual Basic for Applications). Этот метод работает во всех версиях Excel (кроме онлайн) и позволяет настроить вывод под любые требования: рубли/доллары, копейки/центы, падежи и даже диалекты (например, "гривны" вместо "рублей").
Чтобы добавить функцию:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Вставьте код функции (пример ниже).
- Сохраните файл как .xlsm (с поддержкой макросов).
Пример кода для функции NumToText, которая преобразует число в текст прописью с рублями и копейками:
Function NumToText(ByVal n As Currency, Optional valuta As String = "руб.") As String
Dim rub As String, kop As String, temp As String
Dim kopecks As Integer
' Обработка рублей
rub = ConvertLessThanThousand(Int(n))
n = n - Int(n)
kopecks = Round(n * 100, 0)
' Обработка копеек
If kopecks > 0 Then
kop = ConvertLessThanThousand(kopecks)
NumToText = rub & " " & valuta & " " & kop & " коп."
Else
NumToText = rub & " " & valuta
End If
' Вспомогательная функция для чисел < 1000
Function ConvertLessThanThousand(ByVal n As Integer) As String
Dim units, tens, hundreds As String
Dim res As String
units = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
tens = Array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
If n = 0 Then
ConvertLessThanThousand = "ноль"
Exit Function
End If
res = hundreds(Int(n / 100)) & " "
If (n Mod 100) < 20 Then
Select Case n Mod 100
Case 1: res = res & "одна"
Case 2: res = res & "две"
Case 3 To 19: res = res & Array("", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")(Int((n Mod 100) / 10)) & " " & units(n Mod 10)
End Select
Else
res = res & tens(Int((n Mod 100) / 10)) & " " & units(n Mod 10)
End If
ConvertLessThanThousand = Trim(res)
End Function
End Function
После добавления кода функцию можно использовать в Excel как стандартную:
=NumToText(A1; "руб.")
где A1 — ячейка с числом, а "руб." — валюта (можно заменить на "долл." или "евро").
Включены макросы в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы)
Файл сохранен в формате .xlsm (не .xlsx)
Открыт редактор VBA (Alt+F11)
Код вставлен в новый модуль (Insert → Module)
-->
3. Надстройка "ЧислоПрописью": готовое решение без программирования
Если VBA кажется сложным, воспользуйтесь бесплатной надстройкой "ЧислоПрописью" от Microsoft AppSource. Она добавляет в Excel новую функцию =ЧИСЛОПРОПИСЬЮ(), которая поддерживает:
- 💰 Рубли, доллары, евро и другие валюты.
- 📝 Копейки/центы с правильным склонением ("1 копейка", "2 копейки", "5 копеек").
- 🌍 Русский, английский, украинский и казахский языки.
Установка надстройки:
- Перейдите в
Вставка → Надстройки(илиInsert → Add-insв английской версии). - В строке поиска введите "ЧислоПрописью" и нажмите
Добавить. - Подтвердите установку и перезагрузите Excel.
Пример использования:
=ЧИСЛОПРОПИСЬЮ(A1; "RUR"; TRUE)
где:
A1— ячейка с числом;"RUR"— код валюты (для долларов используйте"USD");TRUE— флаг для вывода копеек.
⚠️ Внимание: Надстройки из AppSource могут запрашивать доступ к данным в вашей книге. Перед установкой проверьте отзывы и рейтинг разработчика. Для корпоративных пользователей рекомендуется использовать сертифицированные решения.
4. Формулы без VBA: сложный, но рабочий метод
Если макросы отключены или вы работаете в Excel Online, можно обойтись сложной комбинацией функций ЕСЛИ, ВЫБОР и ТЕКСТ. Этот способ требует много времени на настройку, но не зависит от внешних инструментов.
Пример формулы для чисел от 0 до 999 (без копеек):
=ЕСЛИ(A1=0;"ноль";
ВЫБОР(ЦЕЛОЕ(A1/100);
"";
"сто ";
"двести ";
"триста ";
"четыреста ";
"пятьсот ";
"шестьсот ";
"семьсот ";
"восемьсот ";
"девятьсот ")
&
ЕСЛИ(И(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/100)*100)/10)=1;A1-ЦЕЛОЕ(A1/10)*10<>11);
ВЫБОР(A1-ЦЕЛОЕ(A1/10)*10;
"десять ";
"одиннадцать ";
"двенадцать ";
"тринадцать ";
"четырнадцать ";
"пятнадцать ";
"шестнадцать ";
"семнадцать ";
"восемнадцать ";
"девятнадцать ");
ВЫБОР(ЦЕЛОЕ((A1-ЦЕЛОЕ(A1/100)*100)/10);
"";
"десять ";
"двадцать ";
"тридцать ";
"сорок ";
"пятьдесят ";
"шестьдесят ";
"семьдесят ";
"восемьдесят ";
"девяносто ")
&
ВЫБОР(A1-ЦЕЛОЕ(A1/10)*10;
"";
"один";
"два";
"три";
"четыре";
"пять";
"шесть";
"семь";
"восемь";
"девять")
)
)
Для обработки тысяч и миллионов формулу придется расширять, что делает ее громоздкой. Этот метод подходит только для разовых задач с ограниченным диапазоном чисел (например, до 10 000).
| Метод | Сложность | Поддержка копеек | Работает в Excel Online |
|---|---|---|---|
| Стандартные функции | Низкая | ❌ Нет | ✅ Да |
| VBA (NumToText) | Средняя | ✅ Да | ❌ Нет |
| Надстройка "ЧислоПрописью" | Низкая | ✅ Да | ✅ Да* |
| Сложные формулы | Высокая | ❌ Нет | ✅ Да |
| Power Query | Средняя | ✅ Да | ✅ Да |
* В Excel Online надстройки работают только при наличии подписки Microsoft 365.
5. Power Query: альтернатива для больших данных
Если вам нужно преобразовать тысячи строк (например, в отчете), удобнее использовать Power Query — инструмент для обработки данных, встроенный в Excel 2016 и новее. Он позволяет создать пользовательскую функцию и применить ее ко всему столбцу.
Алгоритм действий:
- Выделите исходные данные и перейдите на вкладку
Данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите
Добавить столбец → Пользовательский столбец. - Введите формулу на языке M (пример ниже) и назовите новый столбец.
- Нажмите
Закрыть и загрузить.
Пример кода для функции на M (упрощенный вариант для чисел до 999):
(number as number) =>
let
units = {"ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},
teens = {"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"},
tens = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"},
hundreds = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"},
convertLessThanThousand = (n) =>
if n = 0 then "ноль" else
let
h = Number.IntegerDivide(n, 100),
t = Number.Mod(Number.IntegerDivide(n, 10), 10),
u = Number.Mod(n, 10),
result = hundreds{h} & " " &
(if t = 1 then teens{u} else tens{t} & " " & units{u})
in
Text.Trim(result),
result = convertLessThanThousand(Number.IntegerDivide(number, 1))
in
result
⚠️ Внимание: Power Query не поддерживает кириллицу в названиях функций и переменных. Все имена в коде должны быть на латинице (например,units, а неединицы).
Как обработать копейки в Power Query?
Добавьте второй пользовательский столбец с формулой для копеек, используя функцию Number.Mod(number, 1) * 100 для извлечения дробной части. Затем объедините результаты через Text.Combine с разделителем "руб. ".
6. Онлайн-конвертеры: быстрый, но неавтоматизированный способ
Если Excel недоступен или нужно срочно преобразовать одно-два числа, воспользуйтесь онлайн-сервисами:
- 🌐 NumWord — поддерживает 20+ языков, включая русский с правильным склонением валют.
- 💱 Calculat.org — простой интерфейс с копированием результата.
- 📄 RapidTables — конвертация чисел до 999 триллионов.
Как перенести результат в Excel:
- Скопируйте прописную сумму из онлайн-сервиса.
- В Excel вставьте данные как
Текст(черезСпециальная вставка → Текст). - При необходимости используйте
ТРИМ(TRIM) для удаления лишних пробелов.
Минусы метода:
- ❌ Нет автоматизации — каждое число приходится конвертировать вручную.
- ❌ Риск ошибок при копировании больших объемов данных.
- ❌ Некоторые сервисы ограничивают количество запросов.
7. Ошибки и их решения
При преобразовании чисел в текст прописью пользователи часто сталкиваются с типичными проблемами. Вот как их избежать или исправить:
Проблема 1: Функция VBA возвращает "#ИМЯ?" (#NAME?).
- 🔧 Решение: Убедитесь, что:
- 📌 Файл сохранен как .xlsm (с поддержкой макросов).
- 📌 Макросы разрешены в настройках Excel (
Файл → Параметры → Центр управления безопасностью). - 📌 Код вставлен в
Module, а не вSheetилиThisWorkbook.
Проблема 2: Неправильное склонение валют (например, "1 рублей" вместо "1 рубль").
- 🔧 Решение: Модифицируйте функцию VBA или используйте надстройку с поддержкой падежей. Пример кода для правильного склонения:
Function RublesCase(n As Integer) As StringSelect Case n Mod 100
Case 11 To 19: RublesCase = "рублей"
Case Else
Select Case n Mod 10
Case 1: RublesCase = "рубль"
Case 2 To 4: RublesCase = "рубля"
Case 0, 5 To 9: RublesCase = "рублей"
End Select
End Select
End Function
Проблема 3: В Excel Online не работают макросы или надстройки.
- 🔧 Решение: Используйте:
- 📌 Сложные формулы (раздел 4).
- 📌 Power Query (раздел 5).
- 📌 Онлайн-конвертеры (раздел 6) с последующим импортом данных.
Проблема 4: Числа больше 999 999 отображаются некорректно.
- 🔧 Решение: Расширьте функцию VBA или Power Query для поддержки миллионов/миллиардов. Пример для миллионов:
Function NumToTextMillions(n As Currency) As StringDim millions As String, rest As String
millions = ConvertLessThanThousand(Int(n / 1000000))
rest = NumToText(n Mod 1000000)
If millions <> "ноль" Then
NumToTextMillions = millions & " миллионов " & rest
Else
NumToTextMillions = rest
End If
End Function
FAQ: Частые вопросы
Можно ли преобразовать числа в текст прописью в Google Таблицах?
Да, в Google Sheets для этого есть функция =СУММПРОПИСЬЮ(). Пример:
=СУММПРОПИСЬЮ(A1; 2)
где A1 — ячейка с числом, а 2 — количество знаков после запятой. Функция поддерживает рубли, доллары и евро с правильным склонением.
Как добавить копейки в результат функции NumToText?
Модифицируйте функцию VBA, добавив обработку дробной части. Пример кода для копеек:
kopecks = Round((n - Int(n)) * 100, 0)
If kopecks > 0 Then
NumToText = rub & " руб. " & ConvertLessThanThousand(kopecks) & " коп."
Else
NumToText = rub & " руб."
End If
Для правильного склонения копеек используйте ту же логику, что и для рублей.
Почему в результате появляются лишние пробелы?
Это происходит из-за особенностей функции ВЫБОР или конкатенации строк. Чтобы убрать пробелы, оберните результат в функцию ТРИМ:
=ТРИМ(ЧИСЛОПРОПИСЬЮ(A1))
В VBA используйте Trim() для очистки строк.
Можно ли конвертировать отрицательные числа?
Да, для этого добавьте в начало функции VBA проверку на знак:
If n < 0 Then
NumToText = "минус " & NumToText(Abs(n))
Exit Function
End If
Для формул используйте ЕСЛИ с проверкой A1<0.
Как автоматически обновлять прописные суммы при изменении чисел?
Если вы используете:
- 🔄 VBA: Функция обновляется автоматически при изменении данных в ячейке.
- 🔄 Надстройки: Также обновляются в реальном времени.
- 🔄 Power Query: Нажмите
Обновить всена вкладкеДанныеили настройте автоматическое обновление черезСвойства соединения. - 🔄 Формулы: Работают динамически, но могут тормозить при большом объеме данных.