Как в Excel конвертировать цифры в слова: от простых чисел до денежных сумм

Преобразование чисел в текстовый формат (прописью) в 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);"а";""))

🔹 Как работает формула:

  1. Определяет сотни (первая часть ВЫБОР)
  2. Проверяет, меньше ли остаток от деления на 100 чем 20 (для чисел 1–19)
  3. Если остаток ≥20, разбивает на десятки и единицы
  4. Добавляет окончание "а" для чисел типа "двадцать одина"
⚠️ Внимание: Эта формула не учитывает падежи (например, "одна тысяча" vs "одному тысяче") и не работает с дробными числами. Для денежных сумм (например, "1 234 рубля 56 копеек") потребуется более сложная логика или VBA.

📊 Сравнение методов для чисел прописью:

Метод Макс. число Поддержка копеек Автообновление Сложность
Ручной ввод Неограничено Да Нет
Текстовые функции 999 Нет Да ⭐⭐⭐
Надстройка "ЧислоПрописью" Неограничено Да Да ⭐⭐
VBA (пользовательская функция) Неограничено Да Да ⭐⭐⭐⭐
📊 Какой метод вы используете для преобразования чисел в текст?
Ручной ввод
Текстовые функции Excel
Надстройки (например, ЧислоПрописью)
VBA (собственные функции)
Не знаю, как это делать

3. Надстройки для Excel: готовые решения без программирования

Если вам нужно регулярно конвертировать числа прописью, но писать код на VBA нет времени или желания, лучший вариант — установить специализированную надстройку. Наиболее популярные решения для русскоязычных пользователей:

🔧 Топ-3 надстройки для чисел прописью:

  • 📌 ЧислоПрописью — бесплатная надстройка от Alex Gyver, поддерживает рубли, доллары, евро и гривны. Работает в Excel 2010–2026. Скачать
  • 📌 NumToText — плагин с расширенными настройками (падежи, валюты, языки). Есть пробная версия. Официальный сайт
  • 📌 Русский Excel — пакет надстроек для работы с русским языком, включает модуль для чисел прописью. Подробнее

🔹 Как установить надстройку "ЧислоПрописью":

  1. Скачайте файл ЧислоПрописью.xlam с официального сайта.
  2. Откройте Excel и перейдите в Файл → Параметры → Надстройки.
  3. Внизу окна выберите Перейти... (кнопка рядом с "Управление: Надстройки Excel").
  4. Нажмите Обзор..., найдите скачанный файл и подтвердите установку.
  5. После установки в меню появится новая вкладка ЧислоПрописью.

💡 Пример использования:

  1. Введите число в ячейку A1 (например, 1234,56).
  2. В любой другой ячейке введите формулу: =ЧИСЛОПРОПИСЬЮ(A1; "рубль"; "копейка").
  3. Результат: "Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек".

☑️ Проверка работы надстройки "ЧислоПрописью"

Выполнено: 0 / 4
⚠️ Внимание: Некоторые надстройки могут конфликтовать с антивирусным ПО (ложные срабатывания на макросы). Перед установкой добавьте папку с надстройкой в исключения антивируса или временно отключите защиту.

4. VBA: создаём собственную функцию для чисел прописью

Если вам нужна максимальная гибкость (например, поддержка специфических валют или нестандартных форматов), лучший вариант — написать пользовательскую функцию на VBA. Этот метод требует базовых знаний программирования, но даёт полный контроль над логикой преобразования.

🔹 Шаги для создания функции:

  1. Откройте редактор VBA: нажмите Alt + F11 или перейдите в Разработчик → Visual Basic (если вкладки "Разработчик" нет, включите её в Файл → Параметры → Настройка ленты).
  2. В окне редактора выберите Insert → Module (Вставка → Модуль).
  3. Скопируйте и вставьте код функции (пример ниже).
  4. Закройте редактор 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

🔹 Как использовать функцию:

  1. Введите число в ячейку A1 (например, 12345,67).
  2. В любой другой ячейке введите: =РублиПрописью(A1).
  3. Результат: "Двенадцать тысяч триста сорок пять рублей шестьдесят семь копеек".

1. Сохранён ли файл в формате .xlsm (с поддержкой макросов).

2. Правильно ли скопирован код (особенно русские символы в названиях функций).

3. Включены ли макросы в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов (выберите "Включить все макросы").-->

Важно: При работе с большими суммами (более 1 млрд) функция может выдавать некорректные склонения для слов "миллиард" и "миллион". Для исправления добавьте дополнительные проверки в блоки обработки миллиардов/миллионов (аналогично логике для "рублей").

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 Then
    

    DollarsToWords = "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:

  1. Выделите исходные данные и перейдите в Данные → Из таблицы/диапазона (если данные не в таблице, Excel предложит создать её).
  2. В открывшемся редакторе Power Query выберите столбец с числами → Преобразовать → Выполнить R-скрипт (требуется установленный R).
  3. Вставьте скрипт для преобразования чисел в текст (пример