8

Формула "Число прописью" для Гугл таблиц⁠⁠

Серия Формулы Гугл таблиц

=LET(
_num; ABS(A6);
_rub; ЦЕЛОЕ(_num);
_kop; ОКРУГЛ((_num - _rub) * 100; 0);
_comm1; "Словари (индексы с 1)";
_units_m; {"";"один";"два";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять"};
_units_f; {"";"одна";"две";"три";"четыре";"пять";"шесть";"семь";"восемь";"девять"};
_tens; {"";"десять";"двадцать";"тридцать";"сорок";"пятьдесят";"шестьдесят";"семьдесят";"восемьдесят";"девяносто"};
_hundreds;{"";"сто";"двести";"триста";"четыреста";"пятьсот";"шестьсот";"семьсот";"восемьсот";"девятьсот"};
_teens; {"десять";"одиннадцать";"двенадцать";"тринадцать";"четырнадцать";"пятнадцать";"шестнадцать";"семнадцать";"восемнадцать";"девятнадцать"};
_comm2; "Лямбда: число 0..999 → слова, gender: 0 – мужской, 1 – женский";
_numWords; LAMBDA(_n; _gender;
LET(
_h; ЦЕЛОЕ(_n / 100);
_rest; _n - _h * 100;
_d; ЦЕЛОЕ(_rest / 10);
_u; _rest - _d * 10;
_sH; ЕСЛИ(_h > 0; ИНДЕКС(_hundreds; _h + 1); "");
_sD; ЕСЛИ(И(_rest >= 10; _rest <= 19); ИНДЕКС(_teens; _rest - 9); ЕСЛИ(_d > 0; ИНДЕКС(_tens; _d + 1); ""));
_sU; ЕСЛИ(И(_rest >= 10; _rest <= 19); ""; ЕСЛИ(_u > 0; ИНДЕКС(ЕСЛИ(_gender = 1; _units_f; _units_m); _u + 1); ""));
СЖПРОБЕЛЫ(_sH & " " & _sD & " " & _sU)
)
);
_comm3; "Лямбда: склонение существительного по числу (forms – массив из 3 форм)";
_decline; LAMBDA(_n; _forms;
LET(
_rem; ОСТАТ(ABS(_n); 100);
_idx; ЕСЛИ(И(_rem >= 11; _rem <= 19); 3; ЕСЛИ(ОСТАТ(_rem; 10) = 1; 1; ЕСЛИ(И(ОСТАТ(_rem; 10) >= 2; ОСТАТ(_rem; 10) <= 4); 2; 3)));
ИНДЕКС(_forms; _idx)
)
);
_comm4; "Разбиваем рубли на группы по 3 цифры";
_r1; _rub;
_groupMln; ЦЕЛОЕ(_r1 / 1000000);
_r2; _r1 - _groupMln * 1000000;
_groupThs; ЦЕЛОЕ(_r2 / 1000);
_r3; _r2 - _groupThs * 1000;
_groupUnit; _r3;
_comm5; "Преобразуем каждую группу в слова";
_wordsMln; ЕСЛИ(_groupMln > 0; _numWords(_groupMln; 0) & " " & _decline(_groupMln; {"миллион";"миллиона";"миллионов"}); "");
_wordsThs; ЕСЛИ(_groupThs > 0; _numWords(_groupThs; 1) & " " & _decline(_groupThs; {"тысяча";"тысячи";"тысяч"}); "");
_wordsUnit; ЕСЛИ(_groupUnit > 0; _numWords(_groupUnit; 0) & " " & _decline(_groupUnit; {"рубль";"рубля";"рублей"}); "рублей");
_comm6; "Собираем рублёвую часть (если всё нули – «ноль рублей»)";
_rubPart; ЕСЛИ(
И(_groupMln = 0; _groupThs = 0; _groupUnit = 0);
"ноль " & _decline(0; {"рубль";"рубля";"рублей"});
СЖПРОБЕЛЫ(_wordsMln & " " & _wordsThs & " " & _wordsUnit)
);
_comm7; "Копейки";
_kopStr; ТЕКСТ(_kop; "00");
_kopWords; _kopStr & " " & _decline(_kop; {"копейка";"копейки";"копеек"});
_comm8; "Финальный результат с заглавной буквы";
_full; _rubPart & " " & _kopWords;
ПРОПИСН(ЛЕВСИМВ(_full; 1)) & ПСТР(_full; 2; ДЛСТР(_full) - 1)
)

Вместо A6 во второй строке вставьте адрес с числом.

Написано максимально подробно, с комментариями ( начало с _comm - это комментарий).

Такая максимально подробная разбивка на части сложной задачи упрощает её решение и последующую проверку.

Если интересно, могу выложить ещё интереснейшие формулы)))

2
Автор поста оценил этот комментарий

Круто конечно, но все же когда бизнес-логика таблицы требует таких монструозных решений, имеет, наверное, смысл перейти на на нормальный язык программирования.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Здесь как раз это монструозное решение оправдано, так как Сумма прописью используется нечасто. Как правило, один раз на листе. Например, акты выполненных работ раз в месяц, за год 12. Ну и такие решения как минимум интересны.

Для элегантности конечно лучше создать именованную функцию. Тогда её даже можно простецки импортировать между разными файлами

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества