Сумма прописью в Excel: формула, VBA и Google Таблицы
Как сделать сумму прописью в Excel без макросов: готовая формула для рублей и копеек, функция на VBA, скрипт для Google Таблиц и файл с формулой для скачивания.
Встроенной функции, которая пишет сумму прописью, в Excel нет — ни в русской версии, ни в английской. Её заменяют три способа: длинная формула без макросов, пользовательская функция на VBA и надстройка, то есть та же функция, упакованная в отдельный файл. Если сумм немного и таблица нужна один раз, быстрее вставить столбец чисел во вкладку «Несколько сумм» калькулятора суммы прописью и скопировать готовый список обратно в Excel.
Ниже — готовая формула, код функции и файл, в котором всё уже собрано: впишите сумму в столбец A, и в соседних столбцах появится текст.
Какой способ выбрать
Выбор зависит от версии Excel и от того, разрешены ли у вас макросы. В бухгалтерии крупной компании макросы часто запрещены политикой безопасности, и тогда остаётся только формула.
| Способ | Где работает | Макросы | Когда подходит |
|---|---|---|---|
| Формула с LET | Excel 2021, Excel 2024, Microsoft 365 | не нужны | постоянный шаблон счёта, акта, реестра |
| Та же формула без LET | Excel 2007–2019 | не нужны | старая версия Excel, макросы запрещены |
| Функция на VBA | Excel для Windows и Mac с поддержкой макросов | нужны, файл .xlsm | много разных таблиц, короткая запись =SummaPropisyu(A2) |
| Надстройка .xlam | любая книга на этом компьютере | нужны | функция нужна во всех файлах сразу |
| Скрипт Apps Script | Google Таблицы | не нужны | таблица живёт в Google Диске |
| Калькулятор на сайте | браузер | не нужны | разовая задача, до сотни сумм |
Все варианты из статьи дают одинаковый текст: «Двадцать одна тысяча рублей 09 копеек». Пропись начинается с заглавной буквы, копейки идут цифрами и всегда двумя знаками. Как правильно оформлять сумму в самом документе — порядок «цифры, скобки, слова», «одна тысяча» или «тысяча», нужны ли «00 копеек», — разобрано в статье о том, как правильно писать сумму прописью.
Формула суммы прописью без макросов
Формула собрана на функции LET: она позволяет один раз вычислить рубли, копейки и разряды числа, дать им имена и дальше пользоваться этими именами. Без неё та же логика превращается в строку из семи с лишним тысяч знаков.
Как вставить формулу:
- Впишите сумму в ячейку A2, копейки — после запятой: 12345,67.
- Щёлкните ячейку B2, затем строку формул над таблицей — именно её, а не саму ячейку, иначе многострочный текст разойдётся по разным строкам.
- Вставьте формулу целиком и нажмите Enter.
- Протяните B2 вниз: ссылка на A2 сдвинется сама, пустые строки останутся пустыми.
=LET(
x; ОКРУГЛ(ABS(A2)*100;0);
rub; ЦЕЛОЕ(x/100);
kop; ОСТАТ(x;100);
hun; {"";"сто ";"двести ";"триста ";"четыреста ";"пятьсот ";"шестьсот ";"семьсот ";"восемьсот ";"девятьсот "};
teen; {"десять ";"одиннадцать ";"двенадцать ";"тринадцать ";"четырнадцать ";"пятнадцать ";"шестнадцать ";"семнадцать ";"восемнадцать ";"девятнадцать "};
tens; {"";"";"двадцать ";"тридцать ";"сорок ";"пятьдесят ";"шестьдесят ";"семьдесят ";"восемьдесят ";"девяносто "};
um; {"";"один ";"два ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};
uf; {"";"одна ";"две ";"три ";"четыре ";"пять ";"шесть ";"семь ";"восемь ";"девять "};
frm; {3;1;2;2;2;3;3;3;3;3};
m_t; ОСТАТ(ЦЕЛОЕ(rub/1000000);1000);
m_d; ОСТАТ(ЦЕЛОЕ(m_t/10);10);
m_u; ОСТАТ(m_t;10);
m_w; ИНДЕКС(hun;ЦЕЛОЕ(m_t/100)+1)&ЕСЛИ(m_d=1;ИНДЕКС(teen;m_u+1);ИНДЕКС(tens;m_d+1)&ИНДЕКС(um;m_u+1));
m_f; ЕСЛИ(m_d=1;3;ИНДЕКС(frm;m_u+1));
k_t; ОСТАТ(ЦЕЛОЕ(rub/1000);1000);
k_d; ОСТАТ(ЦЕЛОЕ(k_t/10);10);
k_u; ОСТАТ(k_t;10);
k_w; ИНДЕКС(hun;ЦЕЛОЕ(k_t/100)+1)&ЕСЛИ(k_d=1;ИНДЕКС(teen;k_u+1);ИНДЕКС(tens;k_d+1)&ИНДЕКС(uf;k_u+1));
k_f; ЕСЛИ(k_d=1;3;ИНДЕКС(frm;k_u+1));
e_t; ОСТАТ(rub;1000);
e_d; ОСТАТ(ЦЕЛОЕ(e_t/10);10);
e_u; ОСТАТ(e_t;10);
e_w; ИНДЕКС(hun;ЦЕЛОЕ(e_t/100)+1)&ЕСЛИ(e_d=1;ИНДЕКС(teen;e_u+1);ИНДЕКС(tens;e_d+1)&ИНДЕКС(um;e_u+1));
e_f; ЕСЛИ(e_d=1;3;ИНДЕКС(frm;e_u+1));
kop_f; ЕСЛИ(ЦЕЛОЕ(kop/10)=1;3;ИНДЕКС(frm;ОСТАТ(kop;10)+1));
words; ЕСЛИ(И(A2<0;x>0);"минус ";"")&ЕСЛИ(rub=0;"ноль ";ЕСЛИ(m_t=0;"";m_w&ИНДЕКС({"миллион ";"миллиона ";"миллионов "};m_f))&ЕСЛИ(k_t=0;"";k_w&ИНДЕКС({"тысяча ";"тысячи ";"тысяч "};k_f))&e_w);
tail; ИНДЕКС({"рубль";"рубля";"рублей"};e_f)&" "&ПРАВСИМВ("0"&kop;2)&" "&ИНДЕКС({"копейка";"копейки";"копеек"};kop_f);
s; words&tail;
ЕСЛИ(A2="";"";ЕСЛИ(rub>=1000000000;"Сумма больше 999 999 999,99";ПРОПИСН(ЛЕВСИМВ(s;1))&ПСТР(s;2;500))))
Формула делит рубли на три тройки цифр — миллионы, тысячи и единицы. Для каждой тройки она берёт слова из списков сотен, десятков и единиц, а окончание выбирает по двум последним цифрам: 1 — «рубль», 2–4 — «рубля», всё остальное и числа от 11 до 19 — «рублей». Для тысяч берётся отдельный список единиц женского рода, отсюда «одна тысяча» и «две тысячи». Копейки округляются до двух знаков и дописываются цифрами с ведущим нулём.
Предел. Формула считает суммы до 999 999 999,99 руб., на миллиард и больше вместо текста выводит предупреждение. Отрицательное число получит слово «минус» в начале.
Для договора. В скачанном файле рядом стоит второй столбец: «12 345 (Двенадцать тысяч триста сорок пять) рублей 67 копеек» — цифры с пробелами между разрядами и пропись в скобках. Это та же формула, в конце которой добавлены две строки: разбивка цифр на разряды и пропись в скобках.
Если Excel пишет #ИМЯ? Значит, ваша версия старше 2021 года и LET не знает. Откройте в файле лист «Excel 2007–2019»: там та же формула, в которой каждое имя заменено его выражением. Она длиной около 7,3 тыс. знаков и укладывается в лимит Excel в 8 192 символа, но набирать её руками бессмысленно — скопируйте ячейку.
Надёжнее всего вообще не перепечатывать формулу, а скопировать ячейку B2 из файла в свою книгу. Excel сам покажет названия функций на языке вашей версии. В русском Excel функция так и называется LET, без перевода, хотя в одном из примеров русской справки Microsoft она записана как ПУСТЬ.
Пользовательская функция на VBA
Функция на VBA короче в работе: в ячейке пишется =SummaPropisyu(A2), а весь код живёт в модуле книги. Имя латиницей выбрано намеренно — кириллица в названиях функций VBA ломается, если в Windows не выставлен русский язык для программ, не поддерживающих Юникод.
Как подключить:
- Откройте книгу и нажмите Alt+F11 — запустится редактор Visual Basic.
- В меню выберите Insert → Module и вставьте код ниже в пустое окно.
- Сохраните книгу как «Книга Excel с поддержкой макросов» (.xlsm): в обычном .xlsx код не сохранится.
- В любой ячейке этой книги наберите
=SummaPropisyu(A2).
Option Explicit
' Сумма прописью: =SummaPropisyu(A2)
Public Function SummaPropisyu(ByVal amount As Double) As String
Dim total As Double, rub As Long, kop As Long, s As String
total = WorksheetFunction.Round(Abs(amount) * 100, 0)
If total >= 100000000000# Then
SummaPropisyu = "Сумма больше 999 999 999,99"
Exit Function
End If
rub = Int(total / 100)
kop = total - rub * 100#
If rub = 0 Then
s = "ноль "
Else
s = Triad(rub \ 1000000, False, "миллион ", "миллиона ", "миллионов ") & _
Triad((rub \ 1000) Mod 1000, True, "тысяча ", "тысячи ", "тысяч ") & _
Triad(rub Mod 1000, False, "", "", "")
End If
If amount < 0 And total > 0 Then s = "минус " & s
s = s & Plural(rub, "рубль", "рубля", "рублей") & " " & _
Format(kop, "00") & " " & Plural(kop, "копейка", "копейки", "копеек")
SummaPropisyu = UCase(Left(s, 1)) & Mid(s, 2)
End Function
Private Function Triad(ByVal n As Long, ByVal female As Boolean, _
ByVal one As String, ByVal few As String, ByVal many As String) As String
Dim hundreds As Variant, teens As Variant, tens As Variant, units As Variant
Dim d As Long, u As Long, s As String
If n = 0 Then Exit Function
hundreds = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", _
"шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
teens = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", _
"пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
tens = Array("", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", _
"шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
If female Then
units = Array("", "одна ", "две ", "три ", "четыре ", "пять ", _
"шесть ", "семь ", "восемь ", "девять ")
Else
units = Array("", "один ", "два ", "три ", "четыре ", "пять ", _
"шесть ", "семь ", "восемь ", "девять ")
End If
d = (n \ 10) Mod 10
u = n Mod 10
s = hundreds(n \ 100)
If d = 1 Then
s = s & teens(u)
Else
s = s & tens(d) & units(u)
End If
Triad = s & Plural(n, one, few, many)
End Function
Private Function Plural(ByVal n As Long, ByVal one As String, _
ByVal few As String, ByVal many As String) As String
Dim d As Long, u As Long
d = (n \ 10) Mod 10
u = n Mod 10
If d = 1 Then
Plural = many
ElseIf u = 1 Then
Plural = one
ElseIf u >= 2 And u <= 4 Then
Plural = few
Else
Plural = many
End If
End Function
Вопросительные знаки вместо букв. Если после вставки кода русские слова превратились в «????», в Windows для программ без поддержки Юникода выбран не русский язык. Поменяйте его в «Регионе» панели управления и вставьте код заново.
Модуль называется так же, как функция. Тогда Excel выдаёт #ИМЯ?. Оставьте модулю имя по умолчанию — Module1.
Надстройка: функция во всех книгах
Функция из модуля видна только в той книге, где лежит код. Чтобы =SummaPropisyu() работала в любом файле, книгу с кодом сохраняют как надстройку и подключают один раз:
- В книге с модулем выберите «Файл» → «Сохранить как» → тип «Надстройка Excel» (.xlam).
- Откройте «Файл» → «Параметры» → «Надстройки», внизу в списке «Управление» выберите «Надстройки Excel» и нажмите «Перейти».
- Нажмите «Обзор», укажите сохранённый файл и отметьте его галочкой.
Платные надстройки «сумма прописью» устроены так же: это код VBA, который получает доступ к вашим файлам. Перед установкой чужой надстройки учтите, что Excel для Windows по умолчанию блокирует макросы в файлах, скачанных из интернета, а надстройку .xlam из интернета загружает отключённой. Если источнику вы доверяете, щёлкните файл правой кнопкой мыши, откройте «Свойства» и на вкладке «Общие» отметьте «Разблокировать» — так описывает Microsoft.
Наш файл-образец макросов не содержит, поэтому эта блокировка его не касается. Excel может открыть его в режиме защищённого просмотра — нажмите «Разрешить редактирование», и формулы пересчитаются.
Сумма прописью в Google Таблицах
В Google Таблицах своей функции тоже нет, и VBA там не работает. Её заменяет скрипт на Apps Script — по сути, та же пользовательская функция, только на JavaScript.
- Откройте таблицу и выберите «Расширения» → Apps Script.
- Удалите заготовку в окне редактора, вставьте код ниже и сохраните проект.
- Вернитесь в таблицу и наберите
=SUMMA_PROPISYU(A2). Можно сразу подать диапазон:=SUMMA_PROPISYU(A2:A50)заполнит весь столбец.
/**
* Сумма прописью: =SUMMA_PROPISYU(A2)
* @customfunction
*/
function SUMMA_PROPISYU(amount) {
if (Array.isArray(amount)) return amount.map(row => row.map(v => SUMMA_PROPISYU(v)));
if (amount === '' || amount === null) return '';
const value = Number(amount);
if (isNaN(value)) return 'Не число';
const total = Math.round(Math.abs(value) * 100);
if (total >= 1e11) return 'Сумма больше 999 999 999,99';
const rub = Math.floor(total / 100);
const kop = total % 100;
let s = rub === 0 ? 'ноль ' :
triad_(Math.floor(rub / 1e6), false, ['миллион ', 'миллиона ', 'миллионов ']) +
triad_(Math.floor(rub / 1000) % 1000, true, ['тысяча ', 'тысячи ', 'тысяч ']) +
triad_(rub % 1000, false, ['', '', '']);
if (value < 0 && total > 0) s = 'минус ' + s;
s += plural_(rub, ['рубль', 'рубля', 'рублей']) + ' ' +
String(kop).padStart(2, '0') + ' ' + plural_(kop, ['копейка', 'копейки', 'копеек']);
return s.charAt(0).toUpperCase() + s.slice(1);
}
function triad_(n, female, names) {
if (n === 0) return '';
const hundreds = ['', 'сто ', 'двести ', 'триста ', 'четыреста ', 'пятьсот ',
'шестьсот ', 'семьсот ', 'восемьсот ', 'девятьсот '];
const teens = ['десять ', 'одиннадцать ', 'двенадцать ', 'тринадцать ', 'четырнадцать ',
'пятнадцать ', 'шестнадцать ', 'семнадцать ', 'восемнадцать ', 'девятнадцать '];
const tens = ['', '', 'двадцать ', 'тридцать ', 'сорок ', 'пятьдесят ',
'шестьдесят ', 'семьдесят ', 'восемьдесят ', 'девяносто '];
const units = ['', female ? 'одна ' : 'один ', female ? 'две ' : 'два ', 'три ',
'четыре ', 'пять ', 'шесть ', 'семь ', 'восемь ', 'девять '];
const d = Math.floor(n / 10) % 10;
const u = n % 10;
const words = hundreds[Math.floor(n / 100)] + (d === 1 ? teens[u] : tens[d] + units[u]);
return words + plural_(n, names);
}
function plural_(n, forms) {
const d = Math.floor(n / 10) % 10;
const u = n % 10;
if (d === 1) return forms[2];
if (u === 1) return forms[0];
if (u >= 2 && u <= 4) return forms[1];
return forms[2];
}
Во многих инструкциях пишут, что сохранённый скрипт станет доступен «во всех ваших документах». Это не так: скрипт, созданный через меню «Расширения», привязан к одной таблице. Для новой таблицы код придётся вставить заново или сделать копию таблицы, в которой он уже есть.
Функция LET в Google Таблицах тоже есть, поэтому формулу можно перенести и без скрипта. Проще всего загрузить наш файл в Google Диск и открыть его как таблицу. Если после загрузки вместо текста появится ошибка, используйте скрипт — он от версии формул не зависит.
Как это устроено в 1С и Word
1С. Здесь сумма прописью встроена в платформу — функция ЧислоПрописью(). Типовые печатные формы счёта, акта и платёжного поручения выводят пропись сами, руками ничего подключать не нужно. В собственной обработке функцию вызывают с описанием валюты: ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"). Здесь через запятую идут три формы слова «рубль» и его род, затем то же для копеек и число знаков после запятой.
Word. В Word есть поле, которое пишет число словами: нажмите Ctrl+F9, внутри фигурных скобок наберите =1234 \* CardText и нажмите F9. Язык результата зависит от языка ввода внутри поля. Но поле выдаёт только целое число не больше 999 999, без слов «рублей» и «копеек» и без их согласования, поэтому для договора его мало. Если документы собираются слиянием из Excel, удобнее подставлять в Word готовый текст из столбца с формулой.
Пример: реестр выплат по договорам подряда
Бухгалтер ИП Соколовой готовит реестр из сорока выплат исполнителям, и каждую сумму в акте нужно повторить прописью. Руками это сорок строк, в которых легко написать «двадцать один тысяча» или «9 копеек». Она вставляет суммы в столбец A файла-образца, а столбец C даёт готовые строки для актов.
| Сумма в A | Что выдаёт столбец B | Что выдаёт столбец C |
|---|---|---|
| 1 021,00 | Одна тысяча двадцать один рубль 00 копеек | 1 021 (Одна тысяча двадцать один) рубль 00 копеек |
| 21 000,09 | Двадцать одна тысяча рублей 09 копеек | 21 000 (Двадцать одна тысяча) рублей 09 копеек |
| 2 000,01 | Две тысячи рублей 01 копейка | 2 000 (Две тысячи) рублей 01 копейка |
| 2 000 000,00 | Два миллиона рублей 00 копеек | 2 000 000 (Два миллиона) рублей 00 копеек |
Здесь сработали сразу четыре ловушки. У числа 1 021 окончание берётся по последней цифре — «рубль», хотя сумма больше тысячи. Слово «тысяча» женского рода, поэтому «двадцать одна» и «две». У 9 копеек впереди стоит ноль, а одна копейка стоит в единственном числе. Готовые строки Соколова переносит в акт выполненных работ, а итог месяца — в строку прописью счёта на оплату.
Что проверить, прежде чем отправлять таблицу
Граничные числа. После вставки формулы или кода проверьте 1, 2, 11, 21, 1 000, 1 000 000 и копейки 01 и 09. Правильные ответы — в первых строках файла-образца. Если хоть одно окончание расходится, формула скопирована не целиком.
Лишние знаки после запятой. Формула округляет до копеек, но если в A стоит результат расчёта вроде 1 234,565, округление может разойтись с тем, что вы видите в ячейке с форматом «два знака». Округлите сумму в самом столбце A функцией ОКРУГЛ.
Формулы или значения. Перед отправкой файла контрагенту замените формулы текстом: «Копировать» → «Специальная вставка» → «Значения». Иначе у получателя со старым Excel вместо прописи появится #ИМЯ?.
Итог документа. Пропись в таблице — черновик для документа, а не сам документ. Для расписки сверяйте готовую строку с формулировками образца долговой расписки: сумма займа — главный предмет будущего спора. Что будет, если цифры и слова всё-таки разошлись, объясняет статья о том, какая сумма действует при расхождении.
Читайте также
- Сумма прописью: как правильно писать в документахКак правильно писать сумму прописью в договоре, расписке, счёте и платёжке: заглавная буква, скобки, копейки двумя цифрами, падеж суммы и самые частые ошибки.
- Сумма цифрами и прописью не совпадает: какая действуетПравила «пропись главнее цифр» для договоров нет: суд толкует цену по ст. 431 ГК РФ и смотрит на счета, акты и платежи. Как исправить ошибку и что с распиской.
- Курьер-самозанятый: оформление, налог и чекиКак курьеру работать на сервис доставки самозанятым: регистрация, налог 6 %, кто выбивает чек, доставка с оплатой, больничный и признаки скрытого найма курьера.
- Медсправка 003-В/у на права: как получитьМедсправка 003-В/у: каких врачей проходят по категориям, где берут заключения психиатра и нарколога, сколько стоит справка на права и сколько она действует.
Похожие документы
Расписка о получении задатка — образец 2026
Образец расписки о получении задатка 2026 — реквизиты, сумма прописью, отсылка к ст. 380 ГК РФ, шаблон для покупки квартиры, дома, участка, автомобиля.
ОткрытьАкт приёма-передачи денежных средств: образец
Акт приёма-передачи денежных средств между физическими лицами: двусторонний бланк и образец в Word, разбор пунктов и случаи, когда одного акта мало в споре.
Открыть