Преобразование чисел в текстовый формат (прописью) в Microsoft Excel — задача, с которой сталкиваются бухгалтеры, финансовые аналитики и менеджеры при оформлении документов. Вручную переписывать цифры словами неэффективно, особенно когда речь идёт о сотнях строк. К сожалению, в стандартном наборе функций Excel нет встроенного инструмента для такой конвертации, но есть несколько проверенных способов обойти это ограничение.
Наиболее универсальные методы включают использование пользовательских функций VBA, надстроек от сторонних разработчиков и комбинаций текстовых функций для простых случаев. Выбор подхода зависит от версии Excel (2010, 2016, 2019, 2021 или Microsoft 365), сложности задачи (простые числа или денежные суммы с копейками) и уровня ваших навыков. В этой статье мы разберём все актуальные способы — от элементарных до продвинутых, — а также покажем, как избежать типичных ошибок при работе с русским и английским языками.
Если вам нужно срочно преобразовать одно-два числа, подойдёт онлайн-конвертер или ручной ввод. Но для регулярной работы с большими массивами данных без автоматизации не обойтись. Далее вы узнаете, как настроить Excel так, чтобы числа прописью обновлялись автоматически при изменении исходных данных.
1. Способ для новичков: онлайн-конвертеры и ручной ввод
Самый простой, но наименее автоматизированный метод — использовать внешние сервисы или вводить числа прописью вручную. Этот вариант подходит для разовых задач, когда нужно оформить 1–2 документа.
🔹 Плюсы:
- 🔹 Не требует знаний Excel или программирования
- 🔹 Работает даже в старых версиях Excel (2003, 2007)
- 🔹 Поддерживает разные языки (русский, английский, украинский)
🔸 Минусы:
- ⚠️ Не обновляется автоматически при изменении исходных данных
- ⏳ Занимает много времени для больших таблиц
- 🔒 Риск ошибок при ручном вводе
Примеры онлайн-сервисов для конвертации:
- 🌐 NumWord — поддерживает 20+ языков, включая русский
- 🌐 PlanetCalc — удобный калькулятор для денежных сумм
- 🌐 Calculat.org — простой интерфейс с настройкой валюты
⚠️ Внимание: При использовании онлайн-сервисов не вводите конфиденциальные данные (номера счетов, суммы контрактов). Для работы с чувствительной информацией лучше использовать локальные методы (VBA или надстройки).
Если вы выбрали ручной ввод, воспользуйтесь горячими клавишами для ускорения процесса:
- Скопируйте число из ячейки:
Ctrl + C - Вставьте в онлайн-конвертер:
Ctrl + V - Скопируйте результат прописью:
Ctrl + C - Вставьте в Excel как текст:
Ctrl + Alt + V → Т (Текст)
2. Текстовые функции Excel: ограниченный, но рабочий метод
Для простых чисел (до 999) можно обойтись без VBA, используя комбинацию функций ЕСЛИ(), ВЫБОР() и ТЕКСТ(). Этот способ не подходит для денежных сумм с копейками или чисел больше тысячи, но поможет в базовых случаях.
📌 Пример формулы для чисел от 0 до 999:
=ЕСЛИ(A1=0;"ноль";
ВЫБОР(ЦЕЛОЕ(A1/100);
""; "сто "; "двести "; "триста "; "четыреста ";
"пятьсот "; "шестьсот "; "семьсот "; "восемьсот "; "девятьсот ")
&ЕСЛИ(ОСТАТ(A1;100)<20;
ВЫБОР(ОСТАТ(A1;100);
""; "один "; "два "; "три "; "четыре "; "пять ";
"шесть "; "семь "; "восемь "; "девять "; "десять ";
"одиннадцать "; "двенадцать "; "тринадцать "; "четырнадцать ";
"пятнадцать "; "шестнадцать "; "семнадцать "; "восемнадцать "; "девятнадцать ");
ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);
""; "десять "; "двадцать "; "тридцать "; "сорок ";
"пятьдесят "; "шестьдесят "; "семьдесят "; "восемьдесят "; "девяносто ")
&ВЫБОР(ОСТАТ(A1;10);
""; "один "; "два "; "три "; "четыре ";
"пять "; "шесть "; "семь "; "восемь "; "девять "))
&ЕСЛИ(И(ОСТАТ(A1;100)>19; ОСТАТ(A1;10)=1);"а";""))
🔹 Как работает формула:
- Определяет сотни (первая часть
ВЫБОР) - Проверяет, меньше ли остаток от деления на 100 чем 20 (для чисел 1–19)
- Если остаток ≥20, разбивает на десятки и единицы
- Добавляет окончание "а" для чисел типа "двадцать одина"
⚠️ Внимание: Эта формула не учитывает падежи (например, "одна тысяча" vs "одному тысяче") и не работает с дробными числами. Для денежных сумм (например, "1 234 рубля 56 копеек") потребуется более сложная логика или VBA.
📊 Сравнение методов для чисел прописью:
| Метод | Макс. число | Поддержка копеек | Автообновление | Сложность |
|---|---|---|---|---|
| Ручной ввод | Неограничено | Да | Нет | ⭐ |
| Текстовые функции | 999 | Нет | Да | ⭐⭐⭐ |
| Надстройка "ЧислоПрописью" | Неограничено | Да | Да | ⭐⭐ |
| VBA (пользовательская функция) | Неограничено | Да | Да | ⭐⭐⭐⭐ |
3. Надстройки для Excel: готовые решения без программирования
Если вам нужно регулярно конвертировать числа прописью, но писать код на VBA нет времени или желания, лучший вариант — установить специализированную надстройку. Наиболее популярные решения для русскоязычных пользователей:
🔧 Топ-3 надстройки для чисел прописью:
- 📌 ЧислоПрописью — бесплатная надстройка от Alex Gyver, поддерживает рубли, доллары, евро и гривны. Работает в Excel 2010–2026. Скачать
- 📌 NumToText — плагин с расширенными настройками (падежи, валюты, языки). Есть пробная версия. Официальный сайт
- 📌 Русский Excel — пакет надстроек для работы с русским языком, включает модуль для чисел прописью. Подробнее
🔹 Как установить надстройку "ЧислоПрописью":
- Скачайте файл
ЧислоПрописью.xlamс официального сайта. - Откройте Excel и перейдите в
Файл → Параметры → Надстройки. - Внизу окна выберите
Перейти...(кнопка рядом с "Управление: Надстройки Excel"). - Нажмите
Обзор..., найдите скачанный файл и подтвердите установку. - После установки в меню появится новая вкладка
ЧислоПрописью.
💡 Пример использования:
- Введите число в ячейку
A1(например,1234,56). - В любой другой ячейке введите формулу:
=ЧИСЛОПРОПИСЬЮ(A1; "рубль"; "копейка"). - Результат:
"Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".
☑️ Проверка работы надстройки "ЧислоПрописью"
⚠️ Внимание: Некоторые надстройки могут конфликтовать с антивирусным ПО (ложные срабатывания на макросы). Перед установкой добавьте папку с надстройкой в исключения антивируса или временно отключите защиту.
4. VBA: создаём собственную функцию для чисел прописью
Если вам нужна максимальная гибкость (например, поддержка специфических валют или нестандартных форматов), лучший вариант — написать пользовательскую функцию на VBA. Этот метод требует базовых знаний программирования, но даёт полный контроль над логикой преобразования.
🔹 Шаги для создания функции:
- Откройте редактор VBA: нажмите
Alt + F11или перейдите вРазработчик → Visual Basic(если вкладки "Разработчик" нет, включите её вФайл → Параметры → Настройка ленты). - В окне редактора выберите
Insert → Module(Вставка → Модуль). - Скопируйте и вставьте код функции (пример ниже).
- Закройте редактор VBA и сохраните файл как
.xlsm(с поддержкой макросов).
📜 Пример кода для русской прописи (рубли/копейки):
Function РублиПрописью(Сумма As Double) As String
Dim Rubles As String, Kop As String, Temp As String
Dim RublText(3) As String, KopText(3) As String
' Массивы для склонения валют
RublText(0) = "рубль"
RublText(1) = "рубля"
RublText(2) = "рублей"
KopText(0) = "копейка"
KopText(1) = "копейки"
KopText(2) = "копеек"
' Округляем до копеек
Сумма = Round(Сумма, 2)
' Разделяем рубли и копейки
Rubles = Int(Сумма)
Kop = Round((Сумма - Rubles) * 100, 0)
' Конвертируем рубли
Temp = NumberToWords(Rubles, True)
' Добавляем валюту в правильном падеже
If Rubles Mod 100 >= 11 And Rubles Mod 100 <= 19 Then
Temp = Temp & " " & RublText(2)
Else
Select Case Rubles Mod 10
Case 1: Temp = Temp & " " & RublText(0)
Case 2, 3, 4: Temp = Temp & " " & RublText(1)
Case Else: Temp = Temp & " " & RublText(2)
End Select
End If
' Добавляем копейки
If Kop > 0 Then
Temp = Temp & " " & NumberToWords(Kop, False)
If Kop Mod 100 >= 11 And Kop Mod 100 <= 19 Then
Temp = Temp & " " & KopText(2)
Else
Select Case Kop Mod 10
Case 1: Temp = Temp & " " & KopText(0)
Case 2, 3, 4: Temp = Temp & " " & KopText(1)
Case Else: Temp = Temp & " " & KopText(2)
End Select
End If
End If
РублиПрописью = Temp
End Function
' Вспомогательная функция для преобразования чисел в слова
Private Function NumberToWords(ByVal Number As Long, ByVal IsMale As Boolean) As String
Dim UnitsMale() As String, UnitsFemale() As String
Dim Teens() As String, Tens() As String
Dim Result As String, Temp As String
Dim i As Integer, j As Integer
' Массивы для единиц, десятков и чисел 10-19
UnitsMale = Array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
UnitsFemale = Array("", "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
Teens = Array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", _
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
Tens = Array("", "десять", "двадцать", "тридцать", "сорок", _
"пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
' Обработка миллиардов
If Number >= 1000000000 Then
Temp = NumberToWords(Int(Number / 1000000000), IsMale) & " миллиард"
If Int(Number / 1000000000) Mod 100 >= 11 And Int(Number / 1000000000) Mod 100 <= 19 Then
Temp = Temp & "ов"
Else
Select Case Int(Number / 1000000000) Mod 10
Case 1: Temp = Temp & ""
Case 2, 3, 4: Temp = Temp & "а"
Case Else: Temp = Temp & "ов"
End Select
End If
Result = Result & Temp
Number = Number Mod 1000000000
End If
' Обработка миллионов
If Number >= 1000000 Then
Temp = NumberToWords(Int(Number / 1000000), IsMale) & " миллион"
If Int(Number / 1000000) Mod 100 >= 11 And Int(Number / 1000000) Mod 100 <= 19 Then
Temp = Temp & "ов"
Else
Select Case Int(Number / 1000000) Mod 10
Case 1: Temp = Temp & ""
Case 2, 3, 4: Temp = Temp & "а"
Case Else: Temp = Temp & "ов"
End Select
End If
Result = Result & Temp
Number = Number Mod 1000000
End If
' Обработка тысяч
If Number >= 1000 Then
Temp = NumberToWords(Int(Number / 1000), False) & " тысяча"
If Int(Number / 1000) Mod 100 >= 11 And Int(Number / 1000) Mod 100 <= 19 Then
Temp = Temp & ""
Else
Select Case Int(Number / 1000) Mod 10
Case 1: Temp = Temp & ""
Case 2, 3, 4: Temp = Temp & "и"
Case Else: Temp = Temp & ""
End Select
End If
Result = Result & Temp
Number = Number Mod 1000
End If
' Обработка сотен
If Number >= 100 Then
Select Case Int(Number / 100)
Case 1: Temp = "сто"
Case 2: Temp = "двести"
Case 3: Temp = "триста"
Case 4: Temp = "четыреста"
Case 5: Temp = "пятьсот"
Case 6: Temp = "шестьсот"
Case 7: Temp = "семьсот"
Case 8: Temp = "восемьсот"
Case 9: Temp = "девятьсот"
End Select
Result = Result & " " & Temp
Number = Number Mod 100
End If
' Обработка чисел от 10 до 99
If Number >= 20 Then
Temp = Tens(Int(Number / 10))
Number = Number Mod 10
If Number > 0 Then
If IsMale Then
Temp = Temp & " " & UnitsMale(Number)
Else
Temp = Temp & " " & UnitsFemale(Number)
End If
End If
Result = Result & " " & Temp
ElseIf Number >= 10 Then
Result = Result & " " & Teens(Number - 9)
ElseIf Number > 0 Then
If IsMale Then
Result = Result & " " & UnitsMale(Number)
Else
Result = Result & " " & UnitsFemale(Number)
End If
End If
NumberToWords = Trim(Result)
End Function
🔹 Как использовать функцию:
- Введите число в ячейку
A1(например,12345,67). - В любой другой ячейке введите:
=РублиПрописью(A1). - Результат:
"Двенадцать тысяч триста сорок пять рублей шестьдесят семь копеек".
1. Сохранён ли файл в формате .xlsm (с поддержкой макросов).
2. Правильно ли скопирован код (особенно русские символы в названиях функций).
3. Включены ли макросы в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов (выберите "Включить все макросы").-->
5. Работа с английскими числами (dollars, euros)
Если вам нужно преобразовать числа в английскую пропись (например, для международных контрактов), логика будет отличаться от русской. В английском языке нет склонений по падежам, но есть свои нюансы:
- 🔹 Используются суффиксы
-tyдля десятков (twenty, thirty) - 🔹 Числа от 13 до 19 имеют суффикс
-teen(thirteen, fourteen) - 🔹 Слова
hundred,thousand,millionне склоняются
📌 Пример VBA-функции для английской прописи:
Function DollarsToWords(ByVal Amount As Currency) As String
Dim Dollars As String, Cents As String
Dim Temp As String
Amount = Round(Amount, 2)
Dollars = Int(Amount)
Cents = Round((Amount - Dollars) * 100, 0)
If Dollars = 0 And Cents = 0 Then
DollarsToWords = "Zero dollars"
Exit Function
End If
Temp = ConvertLessThanOneThousand(Dollars)
Temp = ConvertNumber(Temp, Dollars, "Thousand", "Million", "Billion")
If Dollars > 0 Then
If Dollars = 1 Then
Temp = Temp & " dollar"
Else
Temp = Temp & " dollars"
End If
End If
If Cents > 0 Then
If Dollars > 0 Then Temp = Temp & " and "
Temp = Temp & ConvertLessThanOneThousand(Cents)
If Cents = 1 Then
Temp = Temp & " cent"
Else
Temp = Temp & " cents"
End If
End If
DollarsToWords = Temp
End Function
Private Function ConvertLessThanOneThousand(ByVal Number As Long) As String
Dim Units() As String, Teens() As String, Tens() As String
Dim Result As String
Units = Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
Teens = Array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", _
"seventeen", "eighteen", "nineteen")
Tens = Array("", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", _
"eighty", "ninety")
If Number >= 100 Then
Result = Units(Int(Number / 100)) & " hundred"
Number = Number Mod 100
If Number > 0 Then Result = Result & " "
End If
If Number >= 20 Then
Result = Result & Tens(Int(Number / 10))
Number = Number Mod 10
If Number > 0 Then Result = Result & "-" & Units(Number)
ElseIf Number >= 10 Then
Result = Result & Teens(Number - 10)
ElseIf Number > 0 Then
Result = Result & Units(Number)
End If
ConvertLessThanOneThousand = Result
End Function
Private Function ConvertNumber(ByVal Temp As String, ByVal Number As Long, _
ByVal Thousands As String, ByVal Millions As String, _
ByVal Billions As String) As String
If Number >= 1000000000 Then
Temp = ConvertLessThanOneThousand(Int(Number / 1000000000)) & " " & Billions & " " & _
ConvertNumber("", Number Mod 1000000000, Thousands, Millions, "")
ElseIf Number >= 1000000 Then
Temp = ConvertLessThanOneThousand(Int(Number / 1000000)) & " " & Millions & " " & _
ConvertNumber("", Number Mod 1000000, Thousands, "", "")
ElseIf Number >= 1000 Then
Temp = ConvertLessThanOneThousand(Int(Number / 1000)) & " " & Thousands & " " & _
ConvertLessThanOneThousand(Number Mod 1000)
ElseIf Number > 0 Then
Temp = ConvertLessThanOneThousand(Number)
End If
ConvertNumber = Temp
End Function
🔹 Примеры использования:
=DollarsToWords(1234.56)→"One thousand two hundred thirty-four dollars and fifty-six cents"=DollarsToWords(0.99)→"Ninety-nine cents"=DollarsToWords(1000001)→"One million one dollar"
6. Типичные ошибки и как их избежать
При преобразовании чисел в текстовый формат пользователи часто сталкиваются с типичными проблемами. Вот наиболее распространённые ошибки и способы их решения:
🔴 Ошибка 1: Функция возвращает #ИМЯ?
- 🔹 Причина: Файл не сохранён в формате
.xlsmили макросы отключены. - 🔹 Решение: Сохраните файл как
Книга Excel с поддержкой макросов (*.xlsm)и включите макросы в настройках безопасности.
🔴 Ошибка 2: Неправильные склонения ("один рубль" vs "одна тысяча рубль")
- 🔹 Причина: В коде VBA не учтён женский род для слова "тысяча".
- 🔹 Решение: В функции
NumberToWordsдобавьте параметрIsMaleи используйте разные массивы для единиц (см. пример кода выше).
🔴 Ошибка 3: Округление копеек/центов
- 🔹 Причина: В исходных данных больше 2 знаков после запятой (например, 123.456).
- 🔹 Решение: Добавьте в начало функции строку
Amount = Round(Amount, 2)для округления до копеек.
🔴 Ошибка 4: Медленная работа с большими таблицами
- 🔹 Причина: VBA-функции пересчитываются при каждом изменении листа.
- 🔹 Решение: Отключите автоматический пересчёт:
Формулы → Параметры вычислений → Вручную. Обновляйте данные поF9.
🔴 Ошибка 5: Не работает с отрицательными числами
- 🔹 Причина: В коде не обработан знак "минус".
- 🔹 Решение: Добавьте в начало функции проверку:
If Amount < 0 ThenDollarsToWords = "Minus " & DollarsToWords(Abs(Amount))
Exit Function
End If
Как ускорить работу VBA-функций в больших таблицах?
1. Преобразуйте диапазон с формулами в значения: выделите ячейки → Копировать → Специальная вставка → Значения.
2. Используйте статические массивы вместо динамических (например, Dim Units(9) As String вместо ReDim).
3. Отключите обновление экрана во время выполнения кода: добавьте в начало процедуры Application.ScreenUpdating = False, а в конец — Application.ScreenUpdating = True.
4. Замените рекурсивные вызовы (например, для миллионов/миллиардов) на цикл Do While.
7. Альтернативные решения: Power Query и Google Sheets
Если вы работаете в Excel 2016 или новее, для преобразования чисел прописью можно использовать Power Query — инструмент для импорта и трансформации данных. Этот метод менее гибкий, чем VBA, но не требует программирования.
🔹 Инструкция для Power Query:
- Выделите исходные данные и перейдите в
Данные → Из таблицы/диапазона(если данные не в таблице, Excel предложит создать её). - В открывшемся редакторе Power Query выберите столбец с числами →
Преобразовать → Выполнить R-скрипт(требуется установленный R). - Вставьте скрипт для преобразования чисел в текст (пример