Формулы Гугл таблиц
2 поста
2 поста
29 постов
Формула календаря, введённая в 1 ячейку, позволяет получить календарь на год и распечатать на листе A4. Год задаётся в листе Настройки, там же задаются праздники. Приведён пример для Беларуси и России.
=LET(
год; 'Настройки_России'!F1;
праздники;'Настройки_России'!A2:B21;
пустая_колонка; {"";"";"";"";"";"";"";""};
пустая_строка; {""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""};
дни_недели;{"Пн"\"Вт"\"Ср"\"Чт"\"Пт"\"Сб"\"Вс"};
_m; LAMBDA(m;
LET(
первый; ДАТА(год; m; 1);
дней; ДЕНЬ(КОНМЕСЯЦА(первый; 0));
сдвиг; ДЕНЬНЕД(первый; 2) - 1;
заголовок; ВЫБОР(m;"Январь";"Февраль";"Март";"Апрель";"Май";"Июнь";"Июль";"Август";"Сентябрь";"Октябрь";"Ноябрь";"Декабрь");
числа; SEQUENCE(6; 7; -сдвиг + 1);
матрица; MAP(числа; LAMBDA(x; ЕСЛИ((x >= 1) * (x <= дней); ЕСЛИ(СУММ(BYROW(праздники;LAMBDA(_row;ЕСЛИ(И(ИНДЕКС(_row;1;1)=x;ИНДЕКС(_row;1;2)=m);1;0))))>0;"["&x&"]";x); "")));
VSTACK({""\заголовок\""\""\""\""\""}; дни_недели; матрица)
)
);
ряд1; HSTACK(_m(1); пустая_колонка; _m(2); пустая_колонка; _m(3));
ряд2; HSTACK(_m(4); пустая_колонка; _m(5); пустая_колонка; _m(6));
ряд3; HSTACK(_m(7); пустая_колонка; _m(8); пустая_колонка; _m(9));
ряд4; HSTACK(_m(10); пустая_колонка; _m(11); пустая_колонка; _m(12));
VSTACK(ряд1; пустая_строка; ряд2; пустая_строка; ряд3; пустая_строка; ряд4)
)
Так же, как в посте Число прописью, написано максимально подробно, потому что так улучшается восприятие и проще отлаживать.
В первых строках задаются ссылки на текущий год и праздники. Можно задать год напрямую, и игнорировать праздники, тогда первые строки выглядели бы так:
год; 2026;
праздники;{""\""};
В таком случае лист Настройки не нужен.
Ссылка с примером
Скопируйте файл себе для просмотра формул и использования в табелях
=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 - это комментарий).
Такая максимально подробная разбивка на части сложной задачи упрощает её решение и последующую проверку.
Если интересно, могу выложить ещё интереснейшие формулы)))
Ссылка на ветку #comment_391964630
Если заблокировать 80% интернета, на котором сейчас работает ВСЁ, то чего удивляться, что экономика «отрицательно растёт»?