Понадобилось создать календарь в Excel, и чтобы попроще. На просторах интернета нашел интересное решение с использованием формулы массива, но простой копипаст не помог, формула выдавала ошибку, мало того, неделя в ней начиналась с воскресенья и в статье информации было очень мало. Пришлось разбираться.
Итак, для примера решаем, что календарь будеть размещаться в диапазоне B6:H11. Название месяца выведем в объединении ячеек B4:H4. В получившейся ячейке B4 введем любую дату в пределах нужного месяца.
Поскольку в дальнейшем нужно будет использовать дату, содержащую первое число выбранного месяца, то в ячейку J4 помещаем формулу: =ДАТА(ГОД(B4);МЕСЯЦ(B4);1):
Выделяем диапазон B6:H11, переходим в строку формул и вводим формулу, которая пока, для упрощения понимания включает дни предыдущего/следующего месяцев:
=J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+1
Расшифровка формулы: от даты в J4 минусуем номер дня недели для J4 плюс (номер строки-1)*7 для каждой ячейки плюс (номер столбца)+1 для каждой ячейки.
После ввода формулы ОБЯЗАТЕЛЬНО нажимаем <Ctrl+Shift+Enter>. Тогда Excel "понимает", что в диапазон B6:H11 введена формула массива.
Переходим в строку формул, удаляем предыдущую и вводим такую (с отсечением дней предыдущего/следующего месяцев по условию ЕСЛИ(МЕСЯЦ(J4)<>МЕСЯЦ(J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+1)):
=ЕСЛИ(МЕСЯЦ(J4)<>МЕСЯЦ(J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+1);"";J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+1)
Т.е, если месяц для каждой ячейки (предыдущая формула) не равен месяцу в J4, то выводим пустую строку, иначе - берем предыдущую формулу.
Не забываем о <Ctrl+Shift+Enter>!
Осталось выставить формат для ячеек календаря: Д
... для ячейки B4 с названием месяца: ММММ ГГГГ
... и скрыть колонку J
Календарь готов: скачать.
P.S. В ноябре вылезла проблемка: если месяц начинается с воскресенья, то календарь выводится правильно, но начиная со 2-го числа (понедельника). Поэтому подправил так:
- В ячейке J5 будет храниться сдвиг для дней календаря: -6 для месяцев, начинающихся с воскресенья и +1 - для всех остальных месяцев (как и было раньше): =ЕСЛИ(ДЕНЬНЕД(J4)=1;-6;1)
- В основную формулу календаря поставил ссылку на этот сдвиг (J5):
=ЕСЛИ(МЕСЯЦ(J4)<>МЕСЯЦ(J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+J5);"";J4-ДЕНЬНЕД(J4)+{0:1:2:3:4:5}*7+{1;2;3;4;5;6;7}+J5) |