Как в Excel сделать, чтобы сумма писалась прописью: пошаговое руководство

Преобразование числовых значений в текстовый формат прописью — одна из самых востребованных задач при работе с финансовыми документами в 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. Она поддерживает русские числительные, правильно склоняет валюты (рубли/доллары/евро) и обрабатывает копейки/центы.

Чтобы установить надстройку:

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

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

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

Где:

  • 📌 число — ячейка с суммой (например, A1)
  • 💵 валюта (необязательно) — "RUR" (рубли), "USD" (доллары) или "EUR" (евро). По умолчанию — рубли.
  • 🪙 копейки (необязательно) — ИСТИНА или ЛОЖЬ. Если ИСТИНА, копейки пишутся словами.
  • разделитель (необязательно) — символ между рублями и копейками (по умолчанию пробел).

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

=ЧислоПрописью(A1)          → "Одна тысяча двадцать три рубля 00 копеек"

=ЧислоПрописью(A1; "USD") → "One thousand twenty-three dollars 00 cents"

=ЧислоПрописью(A1;;ЛОЖЬ) → "Одна тысяча двадцать три рубля" (без копеек)

3. Метод 2: Пользовательская функция на VBA (универсальное решение)

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

Вот пошаговая инструкция:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module (Вставка → Модуль).
  3. Скопируйте и вставьте в окно следующий код:
    Function РублиПрописью(Сумма As Currency, Optional Валюта As String = "руб") As String
    

    Dim Рубли 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

  4. Закройте редактор VBA. Теперь в Excel появится новая функция =РублиПрописью().

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

=РублиПрописью(A1)  → "Одна тысяча двадцать три рубля 00 копеек"

✔ Убедитесь, что макросы разрешены в Excel

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

✔ Проверьте регистр в названии функции (РублиПрописью с заглавной буквы)

✔ Тестируйте функцию на небольших суммах перед массовым применением

-->

4. Метод 3: Формулы без VBA (для тех, кто не может использовать макросы)

Если в вашей организации запрещены макросы или вы работаете в Excel Online, где VBA не поддерживается, можно обойтись стандартными формулами. Этот метод потребует создания вспомогательной таблицы со словами, но зато он работает везде.

Алгоритм следующий:

  1. Создайте на листе таблицу со словами для чисел (единицы, десятки, сотни). Пример структуры:
    ТипЗначениеСлово
    Единицы1один
    2два
    3три
    4четыре
    5пять
    6шесть
    7семь
    8восемь
    9девять
    Десятки10десять
    20двадцать
    30тридцать
    40сорок
    50пятьдесят
  2. Используйте функции =ПОИСКПОЗ(), =ИНДЕКС() и =ТЕКСТ(), чтобы "собирать" слова из таблицы. Например, для числа 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 и позволяет автоматизировать преобразования.

Инструкция:

  1. Выделите исходные данные и перейдите на вкладку Данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query добавьте новый столбец: Добавить столбец → Пользовательский.
  3. Введите формулу для преобразования (пример для английского языка, так как в Power Query нет встроенной функции для русского):
    = Number.ToText([Сумма])
    
  4. Для русского языка придётся подключить пользовательскую функцию на M (язык формул Power Query) или использовать обходной путь с загрузкой данных в VBA.

К сожалению, в текущей версии Power Query нет встроенной поддержки русских числительных, поэтому этот метод подходит только для английского или требует дополнительных доработок. Однако он незаменим, если вам нужно обработать десятки тысяч строк — скорость выполнения будет в разы выше, чем у формул.

Как ускорить обработку больших данных?

Если у вас более 10 000 строк, рекомендуется:

1. Разбить данные на части (по 5 000 строк) и обрабатывать их отдельно.

2. Отключить автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную).

3. Использовать VBA для пакетной обработки — это быстрее, чем формулы в ячейках.

6. Метод 5: Онлайн-конвертеры (для разовых задач)

Если вам нужно преобразовать сумму прописью всего несколько раз, проще воспользоваться онлайн-сервисами. Они не требуют установки и работают прямо в браузере. Вот проверенные варианты:

  • 🌐 Calc.ru — поддерживает рубли, доллары, евро, гривны. Есть API для автоматизации.
  • 💻 NumWord — конвертирует числа до 999 триллионов, корректно склоняет валюты.
  • 📄 Text.ru — помимо чисел прописью проверяет текст на ошибки (полезно для документов).

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

  1. Скопируйте число из Excel.
  2. Вставьте его в поле на сайте.
  3. Выберите валюту (рубли, доллары и т. д.).
  4. Скопируйте результат обратно в 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 результат;

}

Чтобы установить:

  1. Откройте Расширения → Apps Script.
  2. Вставьте код и сохраните.
  3. Теперь в таблице можно использовать =РублиПрописью(A1).

Как сделать, чтобы сумма прописью была с заглавной буквы?

Используйте функцию =ПРОПНАЧ() (или =PROPER() в английской версии) для первого символа. Например:

=ПРОПНАЧ(РублиПрописью(A1))

Или в VBA добавьте строку:

РублиПрописью = UCase(Left(РублиПрописью, 1)) & Mid(РублиПрописью, 2)

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

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