Как перевести цифры в буквы в Excel: от 1 до 1 000 000

Зачем нужен перевод чисел в текстовый формат?

Представьте: вы готовите финансовый отчёт, где сумма 12 345 рублей должна быть прописана словами — "двенадцать тысяч триста сорок пять рублей". Или формируете договор, где дата 15.03.2026 должна звучать как "пятнадцатое марта две тысячи двадцать четвёртого года". Вручную переписывать сотни таких значений — нерационально. К счастью, Microsoft Excel предлагает несколько способов автоматизировать эту задачу, даже если встроенной функции для этого нет.

В этой статье мы разберём 5 рабочих методов — от простых формул для чисел до 999 до VBA-макросов для миллионов, а также покажем, как адаптировать решения под рубли, доллары, евро и другие валюты. Вы узнаете, какие подводные камни ждут при работе с большими числами, как избежать ошибок форматирования и почему стандартная функция =ТЕКСТ() здесь бессильна.

Важно: все примеры тестировались в Excel 2019–2023 и Microsoft 365. Для Google Таблиц часть решений потребует адаптации (об этом — в последнем разделе).

Способ 1: Формула для чисел от 1 до 999 (без VBA)

Если вам нужно преобразовать небольшие числа (до 999) в текстовый формат, можно обойтись без макросов. Для этого используем комбинацию функций ВЫБОР(), ЦЕЛОЕ() и ОСТАТ(). Принцип прост: разбиваем число на сотни, десятки и единицы, а затем "склеиваем" их названия.

Вот универсальная формула для ячейки A1:

=ЕСЛИ(A1=0;"ноль";

СЦЕПИТЬ(

ВЫБОР(ЦЕЛОЕ(A1/100);

"";"сто";"двести";"триста";"четыреста";"пятьсот";

"шестьсот";"семьсот";"восемьсот";"девятьсот"

);

ЕСЛИ(И(ОСТАТ(A1;100)>19;ОСТАТ(A1;100)<21);" ";

ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);

"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";

"шестьдесят";"семьдесят";"восемьдесят";"девяносто"

)

);

ЕСЛИ(И(ОСТАТ(A1;100)>19;ОСТАТ(A1;100)<21);

ВЫБОР(ОСТАТ(A1;100)-10;"одиннадцать";"двенадцать";...;"девятнадцать");

ЕСЛИ(ОСТАТ(A1;10)>1;

" " &

ВЫБОР(ОСТАТ(A1;10);"";"два";"три";"четыре";"пять";

"шесть";"семь";"восемь";"девять"

);

ЕСЛИ(ОСТАТ(A1;10)=1;" одна";"")

)

)

)

)

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

  • 🔢 Сотни: ЦЕЛОЕ(A1/100) выделяет сотни (например, для 456 это 4), а ВЫБОР подставляет слово ("четыреста").
  • 🔢 Десятки и единицы: ОСТАТ(A1;100) оставляет последние две цифры (56), которые разбиваются на десятки ("пятьдесят") и единицы ("шесть").
  • 🔢 Исключения: числа 11–19 обрабатываются отдельно через вложенное ЕСЛИ.
⚠️ Внимание: Формула не учитывает род существительного (например, "одна тысяча" vs "один миллион"). Для корректного согласования с валютами (рубль/рубля/рублей) потребуется доработка.

Скопируйте формулу в пустую ячейку|Замените A1 на адрес вашей ячейки с числом|Проверьте результат для чисел 0, 1, 10, 15, 20, 99, 100, 999|При необходимости скорректируйте названия чисел (например, "два" → "две" для женского рода)

-->

Способ 2: Пользовательская функция на VBA для любых чисел

Для чисел больше 999 (тысячи, миллионы) простые формулы становятся громоздкими. Здесь на помощь приходит VBA — язык программирования для Excel. Мы создадим функцию NumToText, которая будет работать с числами до 1 000 000 000.

Шаг 1. Откройте редактор VBA:

  • 🖥️ Нажмите Alt + F11 (или перейдите в Вид → Макрос → Редактор Visual Basic).
  • 📄 В окне Project Explorer найдите вашу книгу, кликните правой кнопкой по Лист1 (или другому листу) и выберите Insert → Module.

Шаг 2. Вставьте код функции:

Function NumToText(ByVal n As Double, Optional currency As String = "руб") As String

Dim rubles As Variant, kop As Variant

Dim temp As String, i As Integer

Dim ones(1 To 9) As String, teens(11 To 19) As String, tens(1 To 9) As String

Dim hundreds(1 To 9) As String, scales(1 To 3) As String

' Массивы слов

ones(1) = "один": ones(2) = "два": ones(3) = "три": ones(4) = "четыре"

ones(5) = "пять": ones(6) = "шесть": ones(7) = "семь"

ones(8) = "восемь": ones(9) = "девять"

teens(11) = "одиннадцать": teens(12) = "двенадцать"

teens(13) = "тринадцать": teens(14) = "четырнадцать"

teens(15) = "пятнадцать": teens(16) = "шестнадцать"

teens(17) = "семнадцать": teens(18) = "восемнадцать": teens(19) = "девятнадцать"

tens(1) = "десять": tens(2) = "двадцать": tens(3) = "тридцать"

tens(4) = "сорок": tens(5) = "пятьдесят": tens(6) = "шестьдесят"

tens(7) = "семьдесят": tens(8) = "восемьдесят": tens(9) = "девяносто"

hundreds(1) = "сто": hundreds(2) = "двести": hundreds(3) = "триста"

hundreds(4) = "четыреста": hundreds(5) = "пятьсот"

hundreds(6) = "шестьсот": hundreds(7) = "семьсот"

hundreds(8) = "восемьсот": hundreds(9) = "девятьсот"

scales(1) = "тысяч": scales(2) = "миллион": scales(3) = "миллиард"

' Обработка целой и дробной частей

If n = 0 Then NumToText = "ноль " & GetCurrency(0, currency): Exit Function

temp = ""

' Разбиваем число на тройки (миллиарды, миллионы, тысячи, единицы)

For i = 3 To 1 Step -1

Dim chunk As Integer: chunk = Int(n / (1000 ^ i)) Mod 1000

If chunk > 0 Then

temp = temp & ConvertChunk(chunk, ones, teens, tens, hundreds, scales(i), i) & " "

End If

Next i

' Единицы (остаток)

Dim units As Integer: units = Int(n) Mod 1000

If units > 0 Then temp = temp & ConvertChunk(units, ones, teens, tens, hundreds, "", 0)

' Дробная часть (копейки/центы)

Dim fractional As Integer: fractional = Round((n - Int(n)) * 100)

If fractional > 0 Then

temp = temp & " и " & ConvertChunk(fractional, ones, teens, tens, hundreds, "", 0) & " " & GetCurrency(fractional, currency, True)

Else

temp = temp & " " & GetCurrency(Int(n), currency)

End If

NumToText = Application.WorksheetFunction.Trim(temp)

End Function

' Вспомогательная функция для преобразования тройки цифр

Function ConvertChunk(chunk As Integer, ones(), teens(), tens(), hundreds(), scale As String, scaleIndex As Integer) As String

Dim result As String: result = ""

Dim hundred As Integer, ten As Integer, one As Integer

hundred = Int(chunk / 100)

ten = Int((chunk Mod 100) / 10)

one = chunk Mod 10

' Сотни

If hundred > 0 Then result = result & hundreds(hundred) & " "

' Десятки и единицы

If chunk Mod 100 >= 11 And chunk Mod 100 <= 19 Then

result = result & teens(chunk Mod 100)

Else

If ten > 0 Then result = result & tens(ten) & " "

If one > 0 Then

If scaleIndex = 1 And (ten = 0 Or ten >= 2) Then

' Для тысяч: "одна тысяча", "две тысячи"

If one = 1 Then result = result & "одна "

If one = 2 Then result = result & "две "

Else

result = result & ones(one) & " "

End If

End If

End If

' Масштаб (тысячи, миллионы...)

If scale <> "" Then

Select Case one

Case 1: result = result & "одна " & Left(scale, Len(scale) - 1)

Case 2, 3, 4: result = result & "а " & Left(scale, Len(scale) - 1)

Case Else: result = result & " " & scale

End Select

End If

ConvertChunk = Trim(result)

End Function

' Функция для склонения валют

Function GetCurrency(num As Integer, currency As String, Optional isFractional As Boolean = False) As String

Dim lastTwo As Integer: lastTwo = num Mod 100

Dim lastOne As Integer: lastOne = num Mod 10

If isFractional Then

Select Case currency

Case "руб": GetCurrency = "копеек"

Case "USD", "дол": GetCurrency = "центов"

Case "Евро", "EUR": GetCurrency = "центов"

Case Else: GetCurrency = ""

End Select

Else

Select Case currency

Case "руб"

If lastTwo >= 11 And lastTwo <= 19 Then

GetCurrency = "рублей"

Else

Select Case lastOne

Case 1: GetCurrency = "рубль"

Case 2, 3, 4: GetCurrency = "рубля"

Case Else: GetCurrency = "рублей"

End Select

End If

Case "USD", "дол"

If num = 1 Then

GetCurrency = "доллар"

Else

GetCurrency = "долларов"

End If

Case "Евро", "EUR"

If num = 1 Then

GetCurrency = "евро"

Else

GetCurrency = "евро"

End If

End Select

End If

End Function

Шаг 3. Используйте функцию в Excel:

Теперь в любой ячейке можно написать:

=NumToText(A1; "руб")

где A1 — ячейка с числом, а "руб" — валюта (опционально). Поддерживаются варианты: "руб", "USD", "Евро".

Способ 3: Надстройка "ЧислоПрописью" (без программирования)

Если VBA кажется сложным, воспользуйтесь готовой надстройкой. Одна из самых популярных — "ЧислоПрописью" от PlanetaExcel. Она бесплатна, поддерживает рубли, доллары, гривны и работает с числами до 999 триллионов.

Как установить:

  1. 📥 Скачайте файл NumberToWords.xlam (проверено на вирусы).
  2. 🖥️ В Excel перейдите в Файл → Параметры → Надстройки → Управление: Надстройки Excel → Перейти.
  3. 📂 Нажмите Обзор, выберите скачанный файл и подтвердите установку.

Как использовать:

После установки появится новая функция =ЧислоПрописью(). Синтаксис:

=ЧислоПрописью(число; [валюта]; [копейки]; [регистр]; [род])

Примеры:

ФормулаРезультат
=ЧислоПрописью(1234,56; "руб")"Одна тысяча двести тридцать четыре рубля 56 копеек"
=ЧислоПрописью(5; "USD";;1)"ПЯТЬ ДОЛЛАРОВ"
=ЧислоПрописью(21; "руб";;0;1)"двадцать один рубль" (мужской род)
⚠️ Внимание: Надстройка может конфликтовать с другими VBA-скриптами. Если после установки Excel начинает тормозить, отключите её в Файл → Параметры → Надстройки.

Использую VBA-макросы|Устанавливаю надстройки|Пишу формулы вручную|Копирую из онлайн-конвертеров|Не занимаюсь этим

-->

Способ 4: Онлайн-конвертеры (для разовых задач)

Если нужно срочно конвертировать 1–2 числа и устанавливать надстройки нет времени, воспользуйтесь онлайн-сервисами. Они не требуют регистрации и работают в браузере.

Топ-3 проверенных сервиса:

  • 🌍 Calculat.org — поддерживает рубли, доллары, евро, гривны. Есть настройка регистра (заглавные/строчные буквы).
  • 🌍 Num-Word.ru — конвертирует числа до 1018 с учётом падежей.
  • 🌍 AbakBot — позволяет скопировать результат в Excel одним кликом.

Как перенести результат в Excel:

  1. Введите число на сайте и получите текстовый вариант.
  2. Скопируйте результат (Ctrl + C).
  3. В Excel вставьте как значения (ПКМ → Параметры вставки → Значения), чтобы избежать форматирования.
⚠️ Внимание: Онлайн-сервисы не гарантируют конфиденциальность. Не вводите в них реальные финансовые данные (номера счетов, суммы договоров).
Что делать, если онлайн-сервис выдаёт ошибку?

Проверьте, не превышает ли число лимит сервиса (обычно до 1015).

Убедитесь, что в числе используете точку как разделитель дробной части (например, 1234.56, а не 1234,56).

Попробуйте другой браузер (некоторые сервисы не работают в Safari).

Отключите блокировщики рекламы (они могут ломать скрипты на сайте).

Способ 5: Power Query для пакетной обработки

Если у вас тысячи строк с числами, которые нужно конвертировать в текст, ручные методы не подойдут. Здесь поможет Power Query — инструмент для преобразования данных, встроенный в Excel 2016+.

Алгоритм действий:

  1. 📊 Выделите столбец с числами и перейдите в Данные → Получить данные → Из таблицы/диапазона.
  2. 🔄 В открывшемся редакторе Power Query добавьте пользовательский столбец (Добавить столбец → Пользовательский).
  3. 📝 Введите формулу на языке M:
    = Number.ToText([Число], "ru-RU")

    где [Число] — название вашего столбца.

  4. ✅ Нажмите Закрыть и загрузить. Результат появится в новой таблице.

Важно: Number.ToText преобразует числа в текст по правилам локали (например, "123" станет "123", а не "сто двадцать три"). Для полноценной прописи используйте комбинацию с VBA или надстройками.

Преимущества Power Query:

  • ⚡ Обрабатывает миллионы строк за секунды.
  • 🔄 Позволяет обновлять данные одним кликом (Данные → Обновить все).
  • 📎 Сохраняет связь с исходными данными (при их изменении результат пересчитывается автоматически).

Ошибки и их решения

При переводе чисел в текст пользователи часто сталкиваются с типичными проблемами. Вот как их избежать:

ОшибкаПричинаРешение
Функция возвращает #ИМЯ? Неподдерживаемый синтаксис или опечатка в имени функции Проверьте регистр (например, NumToText, а не numtotext). Убедитесь, что модуль VBA подключён.
Неправильное склонение валют (например, "1 рубля") Ошибка в логике функции GetCurrency Добавьте исключения для чисел 11–19 в код VBA (см. раздел про макросы).
Числа больше 999 отображаются как #ЗНАЧ! Формула не адаптирована для тысяч/миллионов Используйте VBA или надстройку (способы 2–3).
В результате лишние пробелы Ошибка в функции СЦЕПИТЬ или Trim в VBA Оберните результат в =СЖПРОБЕЛЫ().

Дополнительные советы:

  • 🔍 Для отладки VBA используйте Debug.Print — он выводит промежуточные значения в окно Immediate Window (Ctrl + G в редакторе).
  • 📊 Если числа хранятся как текст (например, '123), предварительно конвертируйте их в числовой формат функцией =ЗНАЧЕН().
  • 🌐 Для Google Таблиц используйте =ARABIC_TO_ROMAN() (только для римских чисел) или скрипты на Google Apps Script.

FAQ: Частые вопросы

Можно ли перевести отрицательные числа?

Да, но потребуется доработка формулы или VBA-кода. Например, в макросе NumToText добавьте проверку:

If n < 0 Then

NumToText = "минус " & NumToText(Abs(n), currency)

Exit Function

End If

Как добавить слово "целых" для дробных чисел (например, "12 целых 34 сотых")?

Модифицируйте функцию NumToText, добавив условие для дробной части:

If fractional > 0 Then

temp = temp & " целых " & ConvertChunk(fractional, ones, teens, tens, hundreds, "", 0) & " сотых"

End If

Работает ли это в Excel для Mac?

Да, но с оговорками:

  • VBA поддерживается, но некоторые функции (например, Declension) могут требовать адаптации.
  • Надстройки (.xlam) устанавливаются через Tools → Excel Add-ins.
  • В Excel 2016 для Mac нет Power Query — используйте Power Query Online или обновляйтесь до Excel 2019+.
Как перевести даты в текст (например, "15 марта 2026 года")?

Используйте комбинацию функций ДЕНЬ(), МЕСЯЦ(), ГОД() и ВЫБОР():

=ВЫБОР(ДЕНЬ(A1);

"первое","второе","третье","четвёртое","пятое",

"шестое","седьмое","восьмое","девятое","десятое",

...,"тридцатое","тридцать первое"

) & " " &

ВЫБОР(МЕСЯЦ(A1);

"января","февраля","марта","апреля","мая","июня",

"июля","августа","сентября","октября","ноября","декабря"

) & " " &

ЧислоПрописью(ГОД(A1)) & " года"

Можно ли конвертировать числа в римские (I, II, III...)?

Да, для этого есть встроенная функция =РИМСКОЕ(). Примеры:

=РИМСКОЕ(2026)  → "MMXXIV"

=РИМСКОЕ(49; 1) → "XLIX" (формат без упрощений)

Для обратного преобразования используйте =АРАБСКОЕ().