Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач при работе с финансовыми документами в Microsoft Excel. Бухгалтерам, экономистам и менеджерам регулярно требуется оформлять счета, акты и договоры, где суммы должны дублироваться словами. Вручную переписывать цифры — долго и чревато ошибками. К счастью, в Excel есть несколько способов автоматизировать этот процесс.
Многие пользователи ошибочно считают, что для такой задачи обязательно нужны макросы или сторонние программы. На самом деле даже стандартные функции Excel позволяют решить проблему — нужно лишь знать правильные формулы и приёмы. В этой статье мы разберём 5 рабочих методов: от простых формул до VBA-скриптов, включая готовые решения для русского языка с учётом копеек, рублей и правильного склонения.
Особое внимание уделим нюансам, которые часто упускают: как правильно обрабатывать дробные числа (например, 1 234,56 → "Одна тысяча двести тридцать четыре рубля 56 копеек"), как избежать ошибок при работе с большими суммами (миллионы, миллиарды), и почему стандартные функции Excel не всегда корректно работают с русскими числительными. Также вы узнаете, как сохранить работоспособность формул при передаче файла коллегам, которые могут использовать другие версии Excel.
Если вы никогда раньше не работали с пользовательскими функциями или VBA, не переживайте — мы подробно разберём каждый шаг с пояснениями и скриншотами. Для опытных пользователей приготовили оптимизированные решения, которые экономят время при обработке больших массивов данных.
1. Почему стандартных функций Excel недостаточно
На первый взгляд может показаться, что в Excel уже есть всё необходимое для преобразования чисел в текст. Действительно, функция =ТЕКСТ(A1; "0") преобразует число в строку, но она просто повторяет цифры, а не пишет их словами. Например, для числа 123 результат будет "123", а не "сто двадцать три".
Более продвинутая функция =ЧИСЛО.НА.ТЕКСТ() (или =SPELLNUMBER() в английской версии) тоже не подходит для русского языка — она работает только с английскими числительными. Если вы попробуете применить её к ячейке с числом, получите результат на английском, например: "One hundred twenty-three". Для финансовых документов на русском языке это неприемлемо.
Ещё одна ловушка — обработка дробных чисел. Даже если бы в Excel была встроенная функция для русского языка, она бы не учитывала специфику валют:
- 💰 Рубли и копейки должны писаться отдельно (например, "100 рублей 50 копеек", а не "сто рублей пятьдесят")
- 📏 Склонение по падежам: "1 рубль", но "2 рубля" и "5 рублей"
- ⚖️ Пробелы между разрядами: "1 000 000" вместо "1000000"
Поэтому для корректного результата придётся использовать либо пользовательские функции на VBA, либо комбинации стандартных формул с дополнительными таблицами склонений. Далее мы рассмотрим оба подхода — от самого простого до самого универсального.
2. Метод 1: Готовая надстройка "ЧислоПрописью" (самый простой способ)
Если вам нужно быстрое решение без погружения в формулы и код, лучший вариант — установить бесплатную надстройку. Одна из самых популярных — "ЧислоПрописью" от Alex Gyver. Она поддерживает русские числительные, правильно склоняет валюты (рубли/доллары/евро) и обрабатывает копейки/центы.
Чтобы установить надстройку:
- Скачайте файл
ЧислоПрописью.xlamс официального репозитория (ссылка в конце статьи). - Откройте Excel и перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Управление: Надстройки Excelи нажмитеПерейти.... - В появившемся окне нажмите
Обзор, выберите скачанный файл и подтвердите установку.
После установки в Excel появится новая функция =ЧислоПрописью(). Её синтаксис:
=ЧислоПрописью(число; [валюта]; [копейки]; [разделитель])
Где:
- 📌
число— ячейка с суммой (например,A1) - 💵
валюта(необязательно) — "RUR" (рубли), "USD" (доллары) или "EUR" (евро). По умолчанию — рубли. - 🪙
копейки(необязательно) —ИСТИНАилиЛОЖЬ. ЕслиИСТИНА, копейки пишутся словами. - ➖
разделитель(необязательно) — символ между рублями и копейками (по умолчанию пробел).
Примеры использования:
=ЧислоПрописью(A1) → "Одна тысяча двадцать три рубля 00 копеек"
=ЧислоПрописью(A1; "USD") → "One thousand twenty-three dollars 00 cents"
=ЧислоПрописью(A1;;ЛОЖЬ) → "Одна тысяча двадцать три рубля" (без копеек)
3. Метод 2: Пользовательская функция на VBA (универсальное решение)
Если вы не хотите устанавливать сторонние надстройки или нуждаетесь в гибкой настройке, можно создать собственную функцию на VBA. Этот метод требует немного больше усилий, но зато вы получите полный контроль над форматом вывода.
Вот пошаговая инструкция:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В меню выберите
Insert → Module(Вставка → Модуль). - Скопируйте и вставьте в окно следующий код:
Function РублиПрописью(Сумма As Currency, Optional Валюта As String = "руб") As StringDim Рубли As String, Копейки As String, Temp As String
Dim Коп As Integer, Руб As Currency
Руб = Int(Сумма)
Коп = Round((Сумма - Руб) * 100, 0)
If Руб = 0 And Коп = 0 Then
РублиПрописью = "Ноль " & Валюта & "лей 00 копеек"
Exit Function
End If
Рубли = ЧислоПрописью(Руб, True, Валюта)
Копейки = ЧислоПрописью(Коп, False, "коп")
If Коп = 0 Then
РублиПрописью = Рубли & " 00 копеек"
Else
РублиПрописью = Рубли & " " & Копейки
End If
End Function
Function ЧислоПрописью(Число As Long, Рубль As Boolean, Валюта As String) As String
Dim Единицы(1 To 9) As String, Десятки(1 To 9) As String
Dim Сотни(1 To 9) As String, Разряды(1 To 3) As String
Dim Результат As String, Остаток As Long, i As Integer
Единицы(1) = "один": Единицы(2) = "два": Единицы(3) = "три": Единицы(4) = "четыре"
Единицы(5) = "пять": Единицы(6) = "шесть": Единицы(7) = "семь"
Единицы(8) = "восемь": Единицы(9) = "девять"
Десятки(1) = "десять": Десятки(2) = "двадцать": Десятки(3) = "тридцать"
Десятки(4) = "сорок": Десятки(5) = "пятьдесят": Десятки(6) = "шестьдесят"
Десятки(7) = "семьдесят": Десятки(8) = "восемьдесят": Десятки(9) = "девяносто"
Сотни(1) = "сто": Сотни(2) = "двести": Сотни(3) = "триста": Сотни(4) = "четыреста"
Сотни(5) = "пятьсот": Сотни(6) = "шестьсот": Сотни(7) = "семьсот"
Сотни(8) = "восемьсот": Сотни(9) = "девятьсот"
Разряды(1) = "тысяч": Разряды(2) = "миллион": Разряды(3) = "миллиард"
If Число = 0 Then
If Рубль Then
ЧислоПрописью = "ноль " & Валюта & "лей"
Else
ЧислоПрописью = "ноль копеек"
End If
Exit Function
End If
Остаток = Число
For i = 1 To 3
Select Case i
Case 1: Temp = ОбработатьТриаду(Остаток Mod 1000, Единицы, Десятки, Сотни, Рубль, Валюта, i)
Case 2: Temp = ОбработатьТриаду((Остаток \ 1000) Mod 1000, Единицы, Десятки, Сотни, Рубль, Валюта, i) & " "
Case 3: Temp = ОбработатьТриады((Остаток \ 1000000) Mod 1000, Единицы, Десятки, Сотни, Рубль, Валюта, i) & " "
End Select
If Temp <> "" Then Результат = Temp & Разряды(i) & " " & Результат
Остаток = Остаток \ 1000
Next i
If Число >= 1000000000 Then
Temp = ОбработатьТриаду(Остаток, Единицы, Десятки, Сотни, Рубль, Валюта, 4)
Результат = Temp & "миллиардов " & Результат
End If
ЧислоПрописью = Application.WorksheetFunction.Trim(Результат)
End Function
Function ОбработатьТриаду(Триада As Long, Ед() As String, Дес() As String, Сот() As String, _
Рубль As Boolean, Валюта As String, Разряд As Integer) As String
Dim Результат As String, Единицы As Integer, Десятки As Integer, Сотни As Integer
Сотни = Триада \ 100
Десятки = (Триада Mod 100) \ 10
Единицы = Триада Mod 10
If Сотни > 0 Then Результат = Сот(Сотни) & " "
Select Case Десятки
Case 1
Select Case Единицы
Case 0: Результат = Результат & "десять "
Case 1: Результат = Результат & "одиннадцать "
Case 2: Результат = Результат & "двенадцать "
Case 3: Результат = Результат & "тринадцать "
Case 4: Результат = Результат & "четырнадцать "
Case 5: Результат = Результат & "пятнадцать "
Case 6: Результат = Результат & "шестнадцать "
Case 7: Результат = Результат & "семнадцать "
Case 8: Результат = Результат & "восемнадцать "
Case 9: Результат = Результат & "девятнадцать "
End Select
Case 0
If Единицы > 0 Then Результат = Результат & Ед(Единицы) & " "
Case Else
Результат = Результат & Дес(Десятки) & " "
If Единицы > 0 Then Результат = Результат & Ед(Единицы) & " "
End Select
If Результат <> "" Then
Select Case Разряд
Case 1 ' тысячи
Select Case Единицы
Case 1: Результат = Результат & "тысяча "
Case 2, 3, 4: Результат = Результат & "тысячи "
Case Else: Результат = Результат & "тысяч "
End Select
Case 2 ' миллионы
Результат = Результат & "миллионов "
Case 3 ' миллиарды
Результат = Результат & "миллиардов "
End Select
End If
If Рубль And Разряд = 0 Then
Select Case Единицы
Case 1: Результат = Результат & Валюта & "ль"
Case 2, 3, 4: Результат = Результат & Валюта & "ля"
Case Else: Результат = Результат & Валюта & "лей"
End Select
End If
ОбработатьТриаду = Результат
End Function
- Закройте редактор VBA. Теперь в Excel появится новая функция
=РублиПрописью().
Пример использования:
=РублиПрописью(A1) → "Одна тысяча двадцать три рубля 00 копеек"
✔ Убедитесь, что макросы разрешены в Excel
✔ Сохраните файл в формате .xlsm (с поддержкой макросов)
✔ Проверьте регистр в названии функции (РублиПрописью с заглавной буквы)
✔ Тестируйте функцию на небольших суммах перед массовым применением
-->
4. Метод 3: Формулы без VBA (для тех, кто не может использовать макросы)
Если в вашей организации запрещены макросы или вы работаете в Excel Online, где VBA не поддерживается, можно обойтись стандартными формулами. Этот метод потребует создания вспомогательной таблицы со словами, но зато он работает везде.
Алгоритм следующий:
- Создайте на листе таблицу со словами для чисел (единицы, десятки, сотни). Пример структуры:
Тип Значение Слово Единицы 1 один 2 два 3 три 4 четыре 5 пять 6 шесть 7 семь 8 восемь 9 девять Десятки 10 десять 20 двадцать 30 тридцать 40 сорок 50 пятьдесят - Используйте функции
=ПОИСКПОЗ(),=ИНДЕКС()и=ТЕКСТ(), чтобы "собирать" слова из таблицы. Например, для числа 123 формула будет выглядеть так:=ИНДЕКС(Слова!B:B; ПОИСКПОЗ(ЛЕВСИМВ(ТЕКСТ(A1; "000")); Слова!A:A; 0)) & " " &ИНДЕКС(Слова!B:B; ПОИСКПОЗ(ПСТР(ТЕКСТ(A1; "000"); 2; 1)*10; Слова!A:A; 0)) & " " &
ИНДЕКС(Слова!B:B; ПОИСКПОЗ(ПРАВСИМВ(ТЕКСТ(A1; "000")); Слова!A:A; 0))
Этот метод достаточно громоздкий, но он работает без макросов. Главный недостаток — сложно учитывать склонение валют и дробные части. Для упрощения можно скачать готовый шаблон с формулами (ссылка в конце статьи).
Готовая надстройка
Пользовательская функция на VBA
Формулы без макросов
Ещё не решил(а)
-->
5. Метод 4: Power Query для массовой обработки
Если вам нужно преобразовать в текст прописью большой массив данных (например, столбец с тысячами сумм), удобно использовать Power Query. Этот инструмент входит в Excel начиная с версии 2016 и позволяет автоматизировать преобразования.
Инструкция:
- Выделите исходные данные и перейдите на вкладку
Данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query добавьте новый столбец:
Добавить столбец → Пользовательский. - Введите формулу для преобразования (пример для английского языка, так как в Power Query нет встроенной функции для русского):
= Number.ToText([Сумма]) - Для русского языка придётся подключить пользовательскую функцию на M (язык формул Power Query) или использовать обходной путь с загрузкой данных в VBA.
К сожалению, в текущей версии Power Query нет встроенной поддержки русских числительных, поэтому этот метод подходит только для английского или требует дополнительных доработок. Однако он незаменим, если вам нужно обработать десятки тысяч строк — скорость выполнения будет в разы выше, чем у формул.
Если у вас более 10 000 строк, рекомендуется: 1. Разбить данные на части (по 5 000 строк) и обрабатывать их отдельно. 2. Отключить автоматический пересчёт формул ( 3. Использовать VBA для пакетной обработки — это быстрее, чем формулы в ячейках.Как ускорить обработку больших данных?
Формулы → Параметры вычислений → Вручную).
6. Метод 5: Онлайн-конвертеры (для разовых задач)
Если вам нужно преобразовать сумму прописью всего несколько раз, проще воспользоваться онлайн-сервисами. Они не требуют установки и работают прямо в браузере. Вот проверенные варианты:
- 🌐 Calc.ru — поддерживает рубли, доллары, евро, гривны. Есть API для автоматизации.
- 💻 NumWord — конвертирует числа до 999 триллионов, корректно склоняет валюты.
- 📄 Text.ru — помимо чисел прописью проверяет текст на ошибки (полезно для документов).
Как пользоваться:
- Скопируйте число из Excel.
- Вставьте его в поле на сайте.
- Выберите валюту (рубли, доллары и т. д.).
- Скопируйте результат обратно в Excel.
Преимущества онлайн-сервисов:
- ✅ Не нужно ничего устанавливать или настраивать.
- ✅ Поддержка всех валют и правильное склонение.
- ✅ Работает на любом устройстве (даже с телефона).
Недостатки:
- ❌ Не подходит для конфиденциальных данных (суммы уходят на сервер).
- ❌ Невозможно автоматизировать для больших таблиц.
- ❌ Требует ручного копирования результатов.
7. Типичные ошибки и как их избежать
При преобразовании чисел в текст прописью пользователи часто сталкиваются с одними и теми же проблемами. Вот самые распространённые ошибки и способы их решения:
⚠️ Ошибка 1: Неправильное склонение валют
⚠️ Внимание: Функция выводит "1 рублей" вместо "1 рубль". Это происходит, потому что в коде не учтено склонение по падежам. Решение: используйте готовую надстройку (метод 1) или доработайте VBA-код (метод 3), добавив проверку на единицы.
Пример исправленного кода для склонения рублей:
Select Case Единицы
Case 1: Результат = Результат & "рубль"
Case 2, 3, 4: Результат = Результат & "рубля"
Case Else: Результат = Результат & "рублей"
End Select
⚠️ Ошибка 2: Округление копеек
⚠️ Внимание: Если в ячейке число 123,456, функция может округлить копейки до 46 вместо 45,6. Это связано с особенностями хранения чисел с плавающей запятой. Решение: используйте функцию=ОКРУГЛ()перед преобразованием:=РублиПрописью(ОКРУГЛ(A1; 2))
⚠️ Ошибка 3: Отрицательные числа
⚠️ Внимание: Многие самописные функции не обрабатывают отрицательные суммы (например, -100 → "минус сто" вместо "минус сто рублей"). Решение: добавьте в начало VBA-функции проверку:If Сумма < 0 ThenРублиПрописью = "Минус " & РублиПрописью(Abs(Сумма))
Exit Function
End If
⚠️ Ошибка 4: Большие числа (миллиарды и триллионы)
⚠️ Внимание: Некоторые функции некорректно обрабатывают числа больше 2 млрд из-за ограничений типа данных. Решение: используйте типCurrencyвместоIntegerв объявлении переменных VBA.
⚠️ Ошибка 5: Потеря форматирования при передаче файла
⚠️ Внимание: Если вы отправите файл с VBA-функцией коллеге, у которого отключены макросы, он увидит ошибку #ИМЯ?. Решение: либо используйте надстройки, либо экспортируйте результаты в отдельный столбец с формулами.
8. FAQ: Ответы на частые вопросы
Можно ли сделать, чтобы сумма прописью автоматически обновлялась при изменении числа?
Да, если вы используете формулы или VBA-функции, результат будет обновляться автоматически. Если вы вставили текст прописью как значение (через "Специальная вставка → Значения"), обновления не будет. Чтобы вернуть динамику, придётся повторно применить функцию.
Почему моя функция работает только для чисел до 999 999?
Скорее всего, в вашем коде не учтена обработка миллионов и миллиардов. В приведённом выше VBA-коде (метод 3) поддержка больших чисел уже реализована. Если вы используете другой код, проверьте, есть ли в нём обработка триад (групп из трёх цифр) для миллионов и миллиардов.
Как сделать, чтобы копейки писались цифрами, а не словами (например, "100 рублей 50 коп.")?
В VBA-функции (метод 3) замените строку вывода копеек на:
If Коп > 0 Then
РублиПрописью = Рубли & " " & Коп & " коп."
Else
РублиПрописью = Рубли & " 00 коп."
End If
Можно ли использовать эту функцию в Google Таблицах?
В Google Sheets нет VBA, но есть альтернатива — пользовательские функции на Google Apps Script. Вот пример кода для Google Таблиц:
function РублиПрописью(сумма) {
// Здесь должен быть код преобразования (аналогично VBA)
// Полный скрипт можно найти по ссылке в конце статьи
return результат;
}
Чтобы установить:
- Откройте
Расширения → Apps Script. - Вставьте код и сохраните.
- Теперь в таблице можно использовать
=РублиПрописью(A1).
Как сделать, чтобы сумма прописью была с заглавной буквы?
Используйте функцию =ПРОПНАЧ() (или =PROPER() в английской версии) для первого символа. Например:
=ПРОПНАЧ(РублиПрописью(A1))
Или в VBA добавьте строку:
РублиПрописью = UCase(Left(РублиПрописью, 1)) & Mid(РублиПрописью, 2)
Если ваш вопрос не освещён в этом разделе, проверьте комментарии под статьёй — возможно, там уже есть решение. Для сложных случаев (например, нестандартные валюты или специфические форматы) рекомендуем обратиться к специалистам на форумах ExcelWorld или CyberForum.
Важно: При работе с финансовыми документами всегда проверяйте результат преобразования вручную — автоматические инструменты могут ошибаться в склонениях или округлениях.