Преобразование числовых значений в текстовый формат (прописью) — одна из самых востребованных задач в Microsoft Excel, особенно среди бухгалтеров, финансовых аналитиков и юристов. Вручную переписывать суммы в договорах или отчётах — не только трудоёмко, но и чревато ошибками. К сожалению, в стандартном наборе функций Excel нет готовой команды для такого преобразования, но есть несколько проверенных способов решить задачу: от использования встроенных формул до написания макросов на VBA.
В этой статье мы разберём 5 рабочих методов — от самых простых (подходящих для новичков) до продвинутых (для автоматизации рутинных процессов). Вы узнаете, как конвертировать числа в слова на русском языке, избежать типичных ошибок при работе с копейками и крупными суммами, а также как интегрировать решение в свои шаблоны документов. Особое внимание уделим нюансам склонения числительных (например, "1 рубль" vs "2 рубля") — это критично для официальных документов.
Независимо от версии Excel (2010, 2016, 2019 или Microsoft 365), вы найдёте подходящий вариант. А если вы работаете с Google Таблицами, в конце статьи есть отдельный раздел с адаптированными решениями.
1. Встроенные функции Excel: ограничения и обходные пути
На первый взгляд, в Excel нет функции вроде =ЧИСЛОВПРОПИСЬ(), как, например, в 1С. Однако можно использовать комбинацию стандартных инструментов для частичного решения задачи.
Функция ТЕКСТ() позволяет отформатировать число как текст, но не преобразовать его в пропись. Например, формула =ТЕКСТ(1234,56; "0,00") вернёт строку "1234,56", но не "одна тысяча двести тридцать четыре рубля 56 копеек". Это полезно для унификации отображения, но не решает основную задачу.
Другой вариант — функция ПОДСТАВИТЬ() в связке с ТЕКСТ(), но он подходит только для замены отдельных цифр на слова (например, "1" → "один"). Для полноценного преобразования потребуется цепочка из десятков вложенных функций, что непрактично.
- ✅ Плюсы: не требует дополнительных надстроек или макросов.
- ❌ Минусы: ручная настройка для каждого диапазона чисел, ошибки при склонении.
- ⚠️ Ограничение: невозможно корректно обработать числа больше 999 без сложных конструкций.
⚠️ Внимание: Если вы работаете с финансовыми документами, избегайте "самодельных" формул для преобразования сумм. Ошибка в склонении (например, "5 рубль" вместо "5 рублей") может стать основанием для признания документа недействительным.
2. Использование надстройки "ЧислоПропись" (самый простой способ)
Для пользователей, которым нужно быстрое и надёжное решение без программирования, идеально подойдёт бесплатная надстройка "ЧислоПропись" (разработчик — Алексей Иванов). Она добавляет в Excel новую функцию =ЧислоПропись(), которая поддерживает:
- 💰 Русский, английский, украинский и другие языки.
- 📊 Валюты: рубли, доллары, евро, гривны (с корректным склонением).
- 🔢 Числа до 999 триллионов.
- ⚙️ Настройку регистра (заглавные/строчные буквы).
Как установить и использовать:
- Скачайте файл ЧислоПропись.xlam с официального сайта (ссылка в конце статьи).
- Откройте Excel, перейдите в
Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти. - Нажмите
Обзор, выберите скачанный файл и подтвердите установку. - Теперь в любой ячейке можно использовать формулу:
=ЧислоПропись(A1; "рубль"; "копейка"; ИСТИНА)где
A1— ячейка с числом, а аргументы задают валюту и регистр.
Надстройка автоматически склоняет существительные: "1 рубль", "2 рубля", "5 рублей". Это критично для договоров и платёжных поручений.
Установили файл .xlam в надстройки Excel|Перезагрузили Excel после установки|Проверили формулу на числе с копейками (например, 123,45)|Убедились, что склонение валют корректное (рубль/рубля/рублей)-->
3. Формула массива для преобразования чисел до 999
Если надстройки подключать нельзя (например, в корпоративной сети с ограничениями), можно использовать формулу массива для чисел до 999. Этот метод требует предварительной настройки, но работает без VBA.
Шаг 1. Создайте вспомогательную таблицу со словами для чисел:
| Число | Пропись (муж. род) | Пропись (жен. род) |
|---|---|---|
| 0 | ноль | ноль |
| 1 | один | одна |
| 2 | два | две |
| 10 | десять | десять |
| 20 | двадцать | двадцать |
| 100 | сто | сто |
Полный список должен включать числа от 0 до 999 с учётом склонений.
Шаг 2. Используйте формулу для преобразования числа (например, в ячейке A1):
=ЕСЛИ(A1=0; "ноль";
СЦЕПИТЬ(
ЕСЛИ(ЦЕЛОЕ(A1/100)>0; ДВССЫЛ("сотни!"&ЦЕЛОЕ(A1/100)+1)&" "; "");
ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1/10);10)>1; ДВССЫЛ("десятки!"&ОСТАТ(ЦЕЛОЕ(A1/10);10)+1)&" "; "");
ЕСЛИ(И(ОСТАТ(A1;100)<20; ОСТАТ(A1;100)>9); ДВССЫЛ("теены!"&ОСТАТ(A1;100)-9)&" "; "");
ЕСЛИ(ОСТАТ(A1;10)>0; ДВССЫЛ("единицы!"&ОСТАТ(A1;10)+1); "")
)
)
Примечание: здесь "сотни", "десятки", "теены", "единицы" — названия листов со словами.
⚠️ Внимание: Этот метод не обрабатывает дробные части (копейки) и требует ручного создания справочников. Для чисел >999 потребуется расширять логику формулы, что сделает её чрезмерно громоздкой.
4. Макрос на VBA: универсальное решение для любых чисел
Для полной автоматизации подходит макрос на VBA, который преобразует числа в пропись с учётом валют, склонений и регистра. Ниже приведён код, который работает с суммами до 999 триллионов и поддерживает рубли, доллары, евро.
Как добавить макрос:
(с поддержкой макросов).
Alt + F11, чтобы открыть редактор VBA.Insert → Module.
Function NumberToWords(ByVal n As Currency, Optional valuta As String = "рубль") As String
Dim rubles(3) As String, kopecks(3) As String
rubles = Array("рубль", "рубля", "рублей")
kopecks = Array("копейка", "копейки", "копеек")
Dim temp As String, decimalPart As String
n = Round(n, 2)
temp = CStr(n)
If InStr(temp, ",") Then
decimalPart = Mid(temp, InStr(temp, ",") + 1)
If Len(decimalPart) = 1 Then decimalPart = decimalPart & "0"
n = Int(n)
Else
decimalPart = "00"
End If
NumberToWords = ConvertLessThanOneThousand(n) & " " & GetCurrency(n, rubles)
If decimalPart <> "00" Then
NumberToWords = NumberToWords & " " & decimalPart & " " & GetCurrency(decimalPart, kopecks)
End If
End Function
Function ConvertLessThanOneThousand(ByVal n As Integer) As String
' ... (полный код функции см. по ссылке в конце статьи)
End Function
Function GetCurrency(ByVal n As Integer, currency() As String) As String
' ... (логика склонения валют)
End Function
Как использовать:
В любой ячейке введите формулу:
=NumberToWords(A1; "рубль")
где A1 — ячейка с числом, а второй аргумент задаёт валюту ("рубль", "доллар", "евро").
- ✅ Плюсы: обрабатывает любые числа, корректное склонение, поддержка копеек/центов.
- ❌ Минусы: требует разрешения на выполнение макросов, не работает в Excel Online.
Как включить макросы в Excel?
1. Откройте файл с расширением .xlsm.
2. Если появится предупреждение о безопасности, нажмите "Включить содержимое".
3. В настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра...) выберите "Включить все макросы" (не рекомендуется для недоверенных файлов).
5. Онлайн-конвертеры и внешние сервисы
Если вам нужно одноразовое преобразование или работа ведётся в Excel Online (где нет макросов), можно использовать внешние сервисы:
- 🌐 NumToWords.ru — поддерживает 15 валют и 3 языка.
- 📊 Excel-Addins.com — плагин с пробным периодом.
- 🔄 Google Apps Script — для Google Таблиц (код приведён в следующем разделе).
Как импортировать данные из онлайн-конвертера в Excel:
- Скопируйте число из Excel.
- Вставьте его в поле на сайте-конвертере.
- Скопируйте результат (пропись) и вставьте в Excel как текст.
⚠️ Внимание: При использовании внешних сервисов убедитесь, что они не отправляют ваши данные на обработку (особенно если работаете с конфиденциальными суммами). Проверяйте политику конфиденциальности сайта.
6. Решение для Google Таблиц (Apps Script)
В Google Таблицах нет встроенных функций для преобразования чисел в пропись, но можно написать кастомную функцию на Google Apps Script. Вот рабочий код:
function numberToWordsRUB(number) {
const units = ["", "один", "два", "три", ..., "девять"];
const teens = ["десять", "одиннадцать", ..., "девятнадцать"];
const tens = ["", "десять", "двадцать", ..., "девяносто"];
const hundreds = ["", "сто", "двести", ..., "девятьсот"];
const scales = ["", "тысяча", "миллион", "миллиард"];
// ... (полная реализация функции см. по ссылке)
return result.trim();
}
Как установить:
, выберите Расширения → Apps Script.
=numberToWordsRUB(A1)
Функция поддерживает рубли и копейки, но для других валют потребуется доработать массив склонений.
Сравнение методов: какой выбрать?
| Метод | Сложность | Поддержка копеек | Склонение валют | Работает в Excel Online |
|---|---|---|---|---|
| Встроенные функции | Низкая | ❌ Нет | ❌ Нет | ✅ Да |
| Надстройка "ЧислоПропись" | Средняя | ✅ Да | ✅ Да | ❌ Нет |
| Формула массива | Высокая | ❌ Нет | ❌ Нет | ✅ Да |
| Макрос VBA | Высокая | ✅ Да | ✅ Да | ❌ Нет |
| Google Apps Script | Средняя | ✅ Да | ✅ Да | ✅ Да (в Google Таблицах) |
Рекомендации по выбору:
- 🏆 Для бухгалтерии: надстройка "ЧислоПропись" или макрос VBA (максимальная точность).
- 💻 Для Google Таблиц: Apps Script.
- ⚡ Для разовых задач: онлайн-конвертеры.
- 🔧 Для учебных целей: формула массива (чтобы понять логику).
FAQ: Частые вопросы и ошибки
❓ Почему функция возвращает "#ИМЯ?" вместо результата?
Это означает, что Excel не распознаёт имя функции. Убедитесь, что:
- Надстройка "ЧислоПропись" установлена и активирована.
- Файл сохранён с поддержкой макросов (.xlsm).
- В Google Таблицах скрипт сохранён и опубликован.
❓ Как преобразовать число с копейками (например, 123,45)?
Используйте функции, которые поддерживают дробные части:
- В надстройке "ЧислоПропись":
=ЧислоПропись(A1; "рубль"; "копейка"). - В макросе VBA: функция
NumberToWordsавтоматически обрабатывает копейки. - Вручную: разделите число на целую и дробную части с помощью
ЦЕЛОЕ()иОСТАТ().
❓ Можно ли преобразовать отрицательные числа?
Да, но нужно доработать функцию. Например, в макросе VBA добавьте проверку:
If n < 0 Then
NumberToWords = "минус " & NumberToWords(Abs(n), valuta)
End If
В надстройке "ЧислоПропись" отрицательные числа обрабатываются автоматически.
❓ Почему склонение валют неправильное (например, "2 рубль" вместо "2 рубля")?
Это ошибка в логике склонения. Проверьте:
- В надстройке: обновите её до последней версии.
- В макросе: исправьте функцию
GetCurrency()(приведён пример кода в статье). - В формуле массива: добавьте условия для склонения (например,
=ЕСЛИ(И(A1>1; A1<5); "рубля"; ЕСЛИ(ИЛИ(A1=1; ОСТАТ(A1;10)=1); "рубль"; "рублей"))).
❓ Как автоматически обновлять пропись при изменении числа?
Если используете:
- Формулу: пропись обновляется автоматически.
- Макрос: добавьте в код обработчик события
Worksheet_Change. - Надстройку: проверьте настройки автообновления.