Превращаем числа в слова: зачем это нужно в Excel
Вы когда-нибудь сталкивались с задачей оформить финансовый документ, где сумма должна быть указана не только цифрами, но и прописью? Например: 1 250 рублей 30 копеек → Одна тысяча двести пятьдесят рублей 30 копеек. Вручную переписывать сотни строк — утомительно, а ошибки в таких документах недопустимы.
Excel предлагает несколько способов автоматизации этого процесса — от встроенных функций до пользовательских макросов. В этой статье разберём три основных метода с примерами для разных версий программы (2010–2023), включая нюансы работы с рублями, долларами и евро. Особое внимание уделим единственному встроенному инструменту Excel, который умеет конвертировать числа в текст без VBA — функции БАТЕКСТ(), скрытой в надстройках.
Важно: методы отличаются по сложности и гибкости. Если вам нужно одноразово оформить 5–10 ячеек, подойдёт простая формула. Для массовой обработки данных (например, в бухгалтерских отчётах) лучше использовать макросы или специализированные надстройки.
Способ 1: Функция БАТЕКСТ() — скрытая возможность Excel
Мало кто знает, но в Excel есть встроенная функция БАТЕКСТ() (англ. DOLLARDE), которая преобразует числа в текстовый формат. Проблема в том, что по умолчанию она отключена и доступна только после подключения надстройки «Пакет анализа» (в английской версии — Analysis ToolPak).
Как её активировать:
- Перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Управление: Надстройки Excelи нажмитеПерейти. - Отметьте галочкой
Пакет анализаи подтвердитеОК.
Теперь функция БАТЕКСТ() появится в списке. Синтаксис простой:
=БАТЕКСТ(число; [число_знаков_после_запятой])
Пример: =БАТЕКСТ(1250,3; 2) вернёт «1250.30», но не прописью! Здесь кроется подвох: функция выводит число в текстовом формате с разделителями, но не конвертирует в слова. Для полноценной прописи потребуется комбинировать её с другими методами.
Способ 2: Пользовательская функция на VBA — гибкость и русская морфология
Для полноценного преобразования чисел в пропись (с учётом падежей, валют и копеек) придётся использовать макрос на VBA. Этот метод требует минимальных знаний программирования, но даёт максимальную гибкость. Ниже приведён готовый код, который работает с рублями, долларами и евро, а также корректно склоняет числительные (например, «1 рубль» vs «2 рубля»).
Как добавить макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module. - Скопируйте код ниже и вставьте в окно модуля:
Function NumToText(ByVal n As Double, Optional Currency As String = "руб") As String
Dim Rubles As Variant, Cents As Variant, Temp As String
Dim DecimalPart As Integer, IntegerPart As Long
' Массивы для склонения валют
If Currency = "руб" Then
Rubles = Array("рубль", "рубля", "рублей")
Cents = Array("копейка", "копейки", "копеек")
ElseIf Currency = "долл" Then
Rubles = Array("доллар", "доллара", "долларов")
Cents = Array("цент", "цента", "центов")
ElseIf Currency = "евро" Then
Rubles = Array("евро", "евро", "евро")
Cents = Array("цент", "цента", "центов")
End If
IntegerPart = Int(n)
DecimalPart = Round((n - IntegerPart) * 100, 0)
' Преобразование целой части
If IntegerPart = 0 Then
Temp = "ноль " & ChooseCase(IntegerPart, Rubles)
Else
Temp = ConvertLessThanThousand(IntegerPart, Currency)
IntegerPart = IntegerPart \ 1000
If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " тысячи " & Temp
IntegerPart = IntegerPart \ 1000
If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " миллиона " & Temp
IntegerPart = IntegerPart \ 1000
If IntegerPart > 0 Then Temp = ConvertLessThanThousand(IntegerPart, Currency) & " миллиарда " & Temp
End If
' Преобразование дробной части
If DecimalPart > 0 Then
Temp = Temp & " " & DecimalPart & " " & ChooseCase(DecimalPart, Cents)
End If
NumToText = Application.WorksheetFunction.Proper(Temp)
End Function
Function ConvertLessThanThousand(ByVal n As Long, Currency As String) As String
Dim Units As Variant, Tens As Variant, Hundreds As Variant
Dim Result As String
Units = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", _
"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", _
"шестнадцать", "семнадцать", "восемнадцать", "девятьнадцать")
Tens = Array("", "", "двадцать", "тридцать", "сорок", "пятьдесят", _
"шестьдесят", "семьдесят", "восемьдесят", "девяносто")
Hundreds = Array("", "сто", "двести", "триста", "четыреста", "пятьсот", _
"шестьсот", "семьсот", "восемьсот", "девятьсот")
If n = 0 Then Exit Function
If n >= 100 Then
Result = Hundreds(n \ 100)
n = n Mod 100
If n > 0 Then Result = Result & " "
End If
If n >= 20 Then
Result = Result & Tens(n \ 10)
n = n Mod 10
If n > 0 Then Result = Result & " " & Units(n)
ElseIf n > 0 Then
Result = Result & Units(n)
End If
ConvertLessThanThousand = Result
End Function
Function ChooseCase(ByVal n As Long, Cases As Variant) As String
If n Mod 100 >= 11 And n Mod 100 <= 19 Then
ChooseCase = Cases(2)
Else
Select Case n Mod 10
Case 1: ChooseCase = Cases(0)
Case 2, 3, 4: ChooseCase = Cases(1)
Case Else: ChooseCase = Cases(2)
End Select
End If
End Function
Теперь в любой ячейке можно использовать функцию =NumToText(A1; "руб"), где A1 — ячейка с числом, а "руб" — валюта. Пример результата:
| Число | Формула | Результат |
|---|---|---|
| 1250,30 | =NumToText(B2; "руб") | Одна тысяча двести пятьдесят рублей 30 копеек |
| 1,01 | =NumToText(B3; "долл") | Один доллар 1 цент |
| 100500,99 | =NumToText(B4; "евро") | Сто тысяч пятьсот евро 99 центов |
Убедитесь, что в настройках Excel разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы)|Сохраните файл в формате .xlsm (с поддержкой макросов)|Проверьте корректность склонений для чисел 1, 2, 5, 21, 101|Тестируйте на числах с нулевой дробной частью (например, 100,00)
-->
Преимущества метода:
- 🔹 Полная поддержка русской морфологии (склонения по падежам).
- 🔹 Работа с любыми валютами (достаточно добавить массивы склонений в код).
- 🔹 Возможность доработки под специфические требования (например, добавление слова «только» в начале).
Недостатки:
- 🚫 Требует включения макросов (может быть заблокировано корпоративной политикой безопасности).
- 🚫 Файл нужно сохранять в формате
.xlsm, что увеличивает его размер.
Способ 3: Надстройки от сторонних разработчиков — готовые решения
Если вам не хочется возиться с макросами или встроенные функции не покрывают ваши нужды, можно воспользоваться специализированными надстройками. Они устанавливаются как дополнения к Excel и добавляют новые функции для работы с текстом.
Популярные надстройки для прописи чисел:
- 📌 «Русский текст» от Add-in Express — поддерживает рубли, доллары, евро, гривны, а также казахский тенге. Есть бесплатная версия с ограничениями.
- 📌 «NumWords» — простая надстройка с открытым исходным кодом, работает с 15+ валютами.
- 📌 «Атлас-Пропись» — коммерческое решение для бухгалтеров, интегрируется с 1С.
Как установить надстройку на примере NumWords:
- Скачайте файл
.xlamс официального сайта (например, GitHub). - В Excel перейдите в
Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку. - Теперь в ячейках доступна функция
=NUMWORDS(число; валюта; язык).
Пример использования:
=NUMWORDS(1250,3; "RUB"; "RU")
Результат: «Одна тысяча двести пятьдесят рублей тридцать копеек».
Как удалить надстройку, если она не понадобилась?
Перейдите в Файл → Параметры → Надстройки, выберите ненужную надстройку в списке и нажмите Удалить. Если кнопка неактивна, сначала отключите её галочкой, затем повторите попытку. В некоторых случаях потребуется перезапуск Excel.
Плюсы надстроек:
- 🔹 Не требуют знаний VBA — достаточно установить и использовать.
- 🔹 Часто содержат дополнительные функции (например, преобразование дат в текст).
- 🔹 Регулярно обновляются разработчиками (в отличие от самописных макросов).
Минусы:
- 🚫 Плагины могут конфликтовать друг с другом или с макросами.
- 🚫 Бесплатные версии часто имеют ограничения (например, лимит на количество ячеек).
Ошибки и нюансы: почему Excel пишет сумму прописью неправильно
Даже с готовыми решениями пользователи часто сталкиваются с ошибками. Рассмотрим типичные проблемы и способы их исправления.
1. Неправильное склонение валют
Если макрос или надстройка выводит «1 рублей» вместо «1 рубль», проблема в логике функции ChooseCase. Исправление:
- Откройте редактор VBA (
Alt + F11). - Найдите функцию
ChooseCaseи проверьте массивы склонений для валют. - Для русского языка массивы должны выглядеть так:
Rubles = Array("рубль", "рубля", "рублей")Cents = Array("копейка", "копейки", "копеек")
2. Округление копеек
Excel может округлять дробную часть числа (например, 1250,325 → 1250,33). Чтобы избежать искажений:
- Используйте функцию
ОКРУГЛ()перед преобразованием:=NumToText(ОКРУГЛ(A1; 2); "руб") - В макросе замените
DecimalPart = Round((n - IntegerPart) 100, 0)наDecimalPart = Int((n - IntegerPart) 100 + 0.5)для банковского округления.
3. Ошибка #ИМЯ? при использовании функции
Если вместо результата появляется #ИМЯ?, проверьте:
- 🔸 Правильность названия функции (регистр важен!
NumToText≠numtotext). - 🔸 Сохранён ли файл в формате
.xlsm(макросы не работают в.xlsx). - 🔸 Включены ли макросы в настройках Excel (
Файл → Параметры → Центр управления безопасностью).
Альтернативные методы: когда Excel не подходит
Если вам нужно преобразовать суммы прописью за пределами Excel (например, в Word, Google Таблицах или на сайте), рассмотрите эти инструменты:
1. Google Таблицы
В Google Sheets нет встроенной функции для прописи чисел, но можно использовать App Script (аналог VBA). Пример кода:
function NumToTextRUB(number) {
// Код аналогичен VBA, но адаптирован под JavaScript
// Полную версию можно найти на GitHub: https://gist.github.com/...
}
2. Онлайн-конвертеры
Для разовых задач подойдут сервисы вроде:
- 🌐 NumWord — поддерживает 20+ языков.
- 🌐 Сумма Прописью — специализированный сервис для рублей.
3. 1С и бухгалтерское ПО
В программах 1С:Бухгалтерия, МойСклад или Битрикс24 пропись сумм реализована «из коробки». Например, в 1С используйте функцию ЧислоПрописью():
ЧислоПрописью(1250.30, "рубль,,копейка,,2")
Сравнение методов: какой выбрать для вашей задачи
Чтобы определиться с методом, ответьте на вопросы:
- 🔹 Сколько чисел нужно преобразовать?
- ➕ До 10–20 ячеек → встроенная функция
БАТЕКСТ()+ ручная доводка. - ➕ Сотни/тысячи строк → макрос VBA или надстройка.
- ➕ До 10–20 ячеек → встроенная функция
- 🔹 Нужна ли поддержка разных валют?
- ➕ Только рубли → достаточно простого макроса.
- ➕ Многовалюта → надстройка или доработанный VBA-код.
- 🔹 Есть ли доступ к макросам?
- ➕ Нет → используйте надстройки или онлайн-сервисы.
- ➕ Да → VBA даст максимальную гибкость.
| Критерий | Встроенные функции | Макросы VBA | Надстройки | Онлайн-сервисы |
|---|---|---|---|---|
| Сложность настройки | ⭐ (просто) | ⭐⭐⭐ (средне) | ⭐ (просто) | ⭐ (просто) |
| Поддержка валют | ❌ (нет) | ✅ (да, при доработке) | ✅ (да) | ✅ (да) |
| Работа с большими данными | ❌ (нет) | ✅ (да) | ✅ (да) | ❌ (нет) |
| Безопасность | ✅ (встроено) | ⚠️ (требует макросы) | ⚠️ (зависит от источника) | ❌ (передача данных третьим лицам) |
Рекомендации по выбору:
- 📊 Для бухгалтеров и юристов → надстройки (Атлас-Пропись или NumWords).
- 💻 Для разработчиков и продвинутых пользователей → VBA (полный контроль над логикой).
- 📄 Для разовых задач → онлайн-сервисы или ручной ввод.
FAQ: Частые вопросы о прописи чисел в Excel
Можно ли сделать пропись суммы без макросов и надстроек?
Да, но с ограничениями. Например, можно использовать комбинацию функций ЕСЛИ(), ВПР() и текстовых операций для чисел до 999, но для больших сумм это будет крайне громоздко. Пример для чисел до 20:
=ВПР(A1; {"1";"один";"2";"два";...;"20";"двадцать"}; 2; ЛОЖЬ)
Для полноценной прописи всё же потребуется VBA или надстройка.
Почему макрос работает медленно на больших данных?
VBA обрабатывает каждую ячейку последовательно. Чтобы ускорить работу:
- Отключите автоматический пересчёт формул (
Формулы → Параметры вычислений → Вручную). - Используйте массивы вместо обработки каждой ячейки по отдельности.
- Для тысяч строк рассмотрите вариант экспорта данных в Power Query с последующей обработкой.
Как добавить слово «только» в начало прописи (например, для договоров)?
В макросе NumToText найдите строку NumToText = Application.WorksheetFunction.Proper(Temp) и замените её на:
NumToText = "Только " & Application.WorksheetFunction.Proper(Temp)
Для надстроек ищите аналогичный параметр в документации (обычно есть опция prefix или префикс).
Можно ли использовать эту функцию в Google Таблицах?
Да, но потребуется адаптировать код VBA под Google Apps Script. Пример:
function RUB_PROPIS(number) {
// Логика аналогична VBA, но с синтаксисом JavaScript
// Полный код: https://gist.github.com/...
}
После добавления скрипта в таблице станет доступна функция =RUB_PROPIS(A1).
Как сделать пропись суммы с учётом НДС (например, «в том числе НДС 20% — 250 рублей»)?
Доработайте макрос или используйте комбинацию функций:
- Рассчитайте сумму НДС отдельно:
=A1*20%. - Примените к результату функцию прописи:
=NumToText(B1; "руб"). - Объедините строки:
="В том числе НДС 20% — " & B2, гдеB2— ячейка с прописью НДС.
Если ваш вопрос не освещён в FAQ, проверьте официальную документацию Microsoft или специализированные форумы вроде ExcelWorld.