Зачем нужно преобразовывать числа в текст?
Работа с цифрами в Microsoft Excel — это не только вычисления и графики. Часто требуется представить числовые данные в текстовом формате: для договоров, финансовых отчётов, квитанций или просто для удобства восприятия. Например, сумма 1 254,30 руб. в документах должна выглядеть как "Одна тысяча двести пятьдесят четыре рубля тридцать копеек" — это требование бухгалтерских стандартов и деловой переписки.
Вручную переписывать сотни строк — неэффективно. К счастью, Excel предлагает несколько способов автоматизации: от стандартных функций до пользовательских скриптов на VBA. В этой статье разберём все актуальные методы, включая нюансы для разных версий программы (2010–2026) и альтернатив (Google Sheets, LibreOffice Calc).
Важно: не все способы универсальны. Например, встроенная функция ТЕКСТ не умеет преобразовывать числа в слова, а надстройка NumWord работает только в Excel для Windows. Мы поможем выбрать оптимальный вариант под вашу задачу.
Способ 1: Использование надстройки «NumWord» (только для Windows)
Самый простой способ — установить бесплатную надстройку NumWord, которая добавляет в Excel функцию =NUMWORD(). Она поддерживает русские рубли, доллары, евро и другие валюты, а также работает с дробными числами.
Как установить:
- 📥 Скачайте файл
NumWord.xlaс официального сайта Excel-VBA.ru (проверено на вирусы). - 🖱️ В Excel перейдите в
Файл → Параметры → Надстройки. - 🔧 Нажмите «Перейти» рядом с «Управление надстройками Excel», затем «Обзор» и выберите скачанный файл.
- ✅ Подтвердите установку и перезапустите программу.
Пример использования:
=NUMWORD(A1; "рубль"; "копейка"; TRUE; TRUE)
Где:
A1— ячейка с числом;"рубль"— валюта для целой части;"копейка"— валюта для дробной части;TRUE— включает пропись копеек;TRUE— добавляет слово «ноль» для нулевых значений.
Установили файл NumWord.xla|Перезапустили Excel|Ввели формулу в ячейку|Проверили результат на примере 123,45|Сохранили файл с макросом (.xlsm)
-->
⚠️ Внимание: Надстройка NumWord не работает в Excel для Mac и веб-версии. Для этих платформ используйте методы 3–5 из этой статьи.
Способ 2: Пользовательская функция на VBA (универсально)
Если надстройки недоступны, напишите собственную функцию на VBA. Этот метод работает во всех версиях Excel (включая Mac), но требует разрешений на выполнение макросов.
Инструкция:
- Нажмите
Alt + F11, чтобы открыть редакторVBA. - В меню выберите
Insert → Module. - Вставьте следующий код:
Function NumberToWords(ByVal MyNumber As Currency, Optional IncludeCop As Boolean = False)
Dim RUB As Variant, Cop As Variant, Temp As String
Dim DecimalPlace As Integer, Count As Integer
Dim Place(9) As String
Dim i As Integer
Place(2) = " тысяча "
Place(3) = " миллион "
Place(4) = " миллиард "
Place(5) = " триллион "
MyNumber = Round(MyNumber, 2)
DecimalPlace = InStr(MyNumber, ".")
If DecimalPlace > 0 Then
Temp = Left(MyNumber, DecimalPlace - 1)
Else
Temp = MyNumber
End If
Count = 1
Do While Temp <> ""
If Count = 1 Then RUB = ConvertLessThanOneThousand(Temp)
If Count = 2 And Temp <> "000" Then RUB = Temp & Place(2) & RUB
If Count = 3 And Temp <> "000" Then RUB = Temp & Place(3) & RUB
If Count = 4 And Temp <> "000" Then RUB = Temp & Place(4) & RUB
If Count = 5 And Temp <> "000" Then RUB = Temp & Place(5) & RUB
Temp = Right(Temp, 3)
Count = Count + 1
Loop
If IncludeCop Then
Cop = " " & ConvertLessThanOneThousand(Mid(MyNumber, DecimalPlace + 1, 2)) & " копейка"
Select Case Mid(MyNumber, DecimalPlace + 1, 2)
Case 1: Cop = Cop & "(и)"
Case 2 To 4: Cop = Cop & "(и)"
Case Else: Cop = Cop & "(ек)"
End Select
NumberToWords = RUB & " рубль" & Cop
Else
NumberToWords = RUB & " рубль"
End If
End Function
Function ConvertLessThanOneThousand(ByVal MyNumber)
Dim Hundreds As String, Tens As String, Ones As String
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)
Hundreds = Choose(Mid(MyNumber, 1, 1) + 1, "", "сто ", "двести ", _
"триста ", "четыреста ", "пятьсот ", "шестьсот ", _
"семьсот ", "восемьсот ", "девятьсот ")
Tens = Choose(Mid(MyNumber, 2, 1) + 1, "", "десять ", "двадцать ", _
"тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", _
"семьдесят ", "восемьдесят ", "девяносто ")
Ones = Choose(Mid(MyNumber, 3, 1) + 1, "", "один ", "два ", _
"три ", "четыре ", "пять ", "шесть ", _
"семь ", "восемь ", "девять ")
If Mid(MyNumber, 2, 1) = "1" Then
Ones = Choose(Mid(MyNumber, 3, 1) + 1, "десять ", "одиннадцать ", _
"двенадцать ", "тринадцать ", "четырнадцать ", _
"пятнадцать ", "шестнадцать ", "семнадцать ", _
"восемнадцать ", "девятнадцать ")
Tens = ""
End If
Result = Hundreds & Tens & Ones
If Result <> "" Then ConvertLessThanOneThousand = Result
End Function
Теперь в любой ячейке можно использовать:
=NumberToWords(A1; TRUE)
Где A1 — ячейка с числом, а TRUE — флаг для отображения копеек.
Способ 3: Формулы без VBA (ограниченная функциональность)
Если макросы отключены или вы работаете в Google Sheets, можно обойтись комбинацией стандартных функций. Этот метод подходит только для целых чисел до 999 999.
Пример для числа 123:
=ВЫБОР(ЦЕЛОЕ(A1/100);"";"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот") &
ВЫБОР(ЦЕЛОЕ(ОСТАТ(A1;100)/10);"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто") &
ВЫБОР(ОСТАТ(A1;10);"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять") & " рубль"
Для чисел >999 потребуется вложенная конструкция с функциями ЕСЛИ и ТЕКСТ, но это громоздко. Лучше использовать VBA или надстройки.
| Число | Формула | Результат |
|---|---|---|
| 12 | =ВЫБОР(ЦЕЛОЕ(A1/10);...) |
двенадцать рублей |
| 105 | =ВЫБОР(ЦЕЛОЕ(A1/100);"сто";...) & ... |
сто пять рублей |
| 999 | =ВЫБОР(ЦЕЛОЕ(A1/100);"девятьсот";...) & ... |
девятьсот девяносто девять рублей |
⚠️ Внимание: Формулы не учитывают склонение валют ("рубль"/"рубля"/"рублей") и дробные части. Для точности используйте VBA.
Способ 4: Онлайн-конвертеры (для разовых задач)
Если нужно преобразовать небольшой объём данных, удобнее воспользоваться онлайн-сервисами. Они не требуют установки и работают в любом браузере.
Популярные инструменты:
- 🌐 Calc.ru — поддерживает рубли, доллары, евро и гривны.
- 💰 Контур.Профи — оптимизирован для бухгалтерских документов.
- 📊 PlanetCalc — позволяет настраивать разделители и валюты.
Как использовать:
- Скопируйте число из Excel.
- Вставьте в поле на сайте.
- Выберите валюту и формат (с копейками/центами или без).
- Скопируйте результат обратно в таблицу.
Преимущества и риски онлайн-конвертеров
✅ Плюсы: Не требуют установки, работают на любых устройствах, часто поддерживают несколько языков.
❌ Минусы: Не подходят для конфиденциальных данных (риск утечки), ограничены по объёму (обычно до 10 чисел за раз), зависят от интернет-соединения.
Способ 5: Power Query (для массовой обработки)
Power Query — мощный инструмент Excel для трансформации данных. Он позволяет создавать пользовательские функции, включая преобразование чисел в текст.
Алгоритм:
- Перейдите в
Данные → Получить данные → Из других источников → Пустой запрос. - В редакторе Power Query создайте новый столбец с формулой:
= Number.ToText([Число], "ru-RU")
Где [Число] — название столбца с исходными данными.
- Замените результат на пользовательскую функцию (требуется знание
M-языка). - Загрузите данные обратно в Excel.
Пример кода на M для русского языка:
(number as number) as text =>
let
units = {"ноль", "один", "два", ..., "девять"},
teens = {"десять", "одиннадцать", ..., "девятнадцать"},
tens = {"", "десять", "двадцать", ..., "девяносто"},
rubles = if number = 1 then "рубль" else if number > 1 and number < 5 then "рубля" else "рублей",
result = ... // Логика преобразования
in
result & " " & rubles
⚠️ Внимание: Power Query не поддерживает дробные числа в прописи "из коробки". Для копеек потребуется дополнительный код.
Сравнение методов: какой выбрать?
Выбор способа зависит от объёма данных, частоты использования и технических ограничений. Ниже таблица для быстрого принятия решения:
| Критерий | Надстройка NumWord | VBA-функция | Формулы Excel | Онлайн-конвертеры | Power Query |
|---|---|---|---|---|---|
| Поддержка дробных чисел | ✅ Да | ✅ Да | ❌ Нет | ✅ Да | ⚠️ Частично |
| Работа в Google Sheets | ❌ Нет | ❌ Нет | ✅ Да | ✅ Да | ❌ Нет |
| Массовая обработка (>1000 строк) | ✅ Да | ✅ Да | ❌ Нет | ❌ Нет | ✅ Да |
| Требует установки/настроек | ⚠️ Да (только Windows) | ⚠️ Да (макросы) | ✅ Нет | ✅ Нет | ⚠️ Да |
Для разовых задач подойдёт онлайн-конвертер или формулы. Для регулярной работы с большими объёмами данных оптимален VBA или Power Query.
FAQ: Частые вопросы и ошибки
Можно ли преобразовать числа в текст прописью на английском?
Да. В надстройке NumWord выберите язык English, а в VBA-функции замените массивы слов (например, units, tens) на английские эквиваленты: {"zero", "one", "two", ...}.
Почему функция VBA выдаёт ошибку #NAME?
Убедитесь, что:
- Файл сохранён как
.xlsm(с поддержкой макросов). - В настройках безопасности разрешены макросы (
Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы). - Код вставлен в стандартный модуль (
Insert → Module), а не в лист.
Как склонять валюту правильно (рубль/рубля/рублей)?
Добавьте в VBA-функцию условие:
Select Case Right(Temp, 1)
Case 1: currency = "рубль"
Case 2 To 4: currency = "рубля"
Case Else: currency = "рублей"
End Select
Для копеек используйте аналогичную логику.
Работает ли это в Excel Online?
Нет. Excel Online не поддерживает VBA и надстройки. Используйте онлайн-конвертеры или Power Query (доступен в десктопной версии).
Можно ли преобразовать отрицательные числа?
Да. В VBA-коде добавьте проверку:
If MyNumber < 0 Then
NumberToWords = "минус " & NumberToWords(Abs(MyNumber), IncludeCop)
End If
Для формул используйте ЕСЛИ(A1<0; "минус " & ФОРМУЛА; ФОРМУЛА).