Найти в Дзене

Календарь на год в Excel одной формулой!

До конца 2020 года остался один месяц, поэтому сегодня мы будем делать календарь. В Эксель. С помощью одной формулы.
Для начала немного подготовительной работы. Создадим новую книгу эксель и в ней создадим 12 вкладок:
Выделим все вкладки, чтобы заполнять их одновременно (если пропустили, можете прочитать статью про это:

До конца 2020 года остался один месяц, поэтому сегодня мы будем делать календарь. В Эксель. С помощью одной формулы.

Для начала немного подготовительной работы. Создадим новую книгу эксель и в ней создадим 12 вкладок:

Выделим все вкладки, чтобы заполнять их одновременно (если пропустили, можете прочитать статью про это: https://zen.yandex.ru/media/id/5f24070dd98a994308ce5e45/3dformuly-i-vnesenie-dannyh-na-neskolko-listov-odnovremenno-5fa518af8eb5b23a3091c718) и в третьей строке, начиная с ячейки B3, вставим дни недели:

Вставляем дни недели. Обратите внимание, выделены все листы.
Вставляем дни недели. Обратите внимание, выделены все листы.

Теперь в ячейке A1 напишем: "=Январь!$A$1" - таблица нам выдаст предупреждение об ошибке, просто проигнорируем его пока и нажмем ввод.

В ячейке B4 пишем формулу - нашу главную, единственную важную формулу:

=ЕСЛИ(ИЛИ((СТРОКА()-4)*7+СТОЛБЕЦ()-ДЕНЬНЕД(ДАТА($A$1;ЛИСТ();1);2)<1;(СТРОКА()-4)*7+СТОЛБЕЦ()-ДЕНЬНЕД(ДАТА($A$1;ЛИСТ();1);2)>ДЕНЬ(КОНМЕСЯЦА(ДАТА($A$1;ЛИСТ();1);0)));"";(СТРОКА()-4)*7+СТОЛБЕЦ()-ДЕНЬНЕД(ДАТА($A$1;ЛИСТ();1);2))

=IF(OR((ROW()-4)*7+COLUMN()-WEEKDAY(DATE($A$1;SHEET();1);2)<1;(ROW()-4)*7+COLUMN()-WEEKDAY(DATE($A$1;SHEET();1);2)>DAY(EOMONTH(DATE($A$1;SHEET();1);0)));"";(ROW()-4)*7+COLUMN()-WEEKDAY(DATE($A$1;SHEET();1);2))

И копируем ее во все ячейки от B4 до H9. Не забываем, что все листы должны быть выделены.

Копируем монстр-формулу на весь каледарь. Все листы до сих пор должны быть выделены!
Копируем монстр-формулу на весь каледарь. Все листы до сих пор должны быть выделены!

Я позволил себе немного добавить оформления. И уже готов календарь!

Теперь разоблачение фокуса - как работает эта формула:

В ячейке мы указываем день месяца по формуле: (номер строки -4)*7 + (номер столбца) - (порядковый номер дня недели для первого числа месяца): СТРОКА()-4)*7+СТОЛБЕЦ()-ДЕНЬНЕД(ДАТА($A$1;ЛИСТ();1);2)

А еще мы выполняем проверку, если получившееся число меньше 1 или больше дней в месяце, то мы не выводим ничего! Количество дней в месяце можно вычислить с помощью формулы: ДЕНЬ(КОНМЕСЯЦА(ДАТА($A$1;ЛИСТ();1);0))

Можно добавить еще две формулы для дополнительного удобства:

В ячейку A2 напишем:

=ТЕКСТ(ДАТА($A$1;ЛИСТ();1);"ММММ")

=TEXT(DATE($A$1;SHEET();1);"ММММ")

Это просто укажет месяц для каждого листа.

А в ячейку A4 напишем (и "растянем" до ячейки A9)

=ЕСЛИ(МАКС(B4:H4)>0;НОМНЕДЕЛИ(ДАТА($A$1;ЛИСТ();МАКС(B4:H4));2);"")

=IF(MAX(B4:H4)>0;WEEKNUM(DATE($A$1;SHEET();MAX(B4:H4));2);"")

Это будет номер недели.

Добавляем название месяца и номер недели. Листы все еще выделены.
Добавляем название месяца и номер недели. Листы все еще выделены.

Все, больше формул не будет точно! Можно разгрупировать листы (нажав на первый из них с кнопкой Shift) и пользоваться.

Чуть не забыл! А как год выбирать? На листе "Январь" в колонке A1 пишем какой угодно год. Проверяем:

-5

Вот и все! Если сбились в какой-то момент, можете загрузить мой файл: https://yadi.sk/d/Aef5JfL2AglA7w

Подписывайтесь на канал, чтобы не пропустить новые статьи. Если есть вопросы, пишите их в комментариях!