
Я хочу создать ежемесячный календарь (1 месяц на листе), где может меняться только год (и дата). Мой шаблон календаря уже создан. Все, что я хочу, это добавить формулу, которая будет менять дату в соответствии с днем недели, когда я меняю год. Неделя начинается в воскресенье
Спасибо !
решение1
Вот что у меня получилось. При необходимости откорректируйте инструкции, чтобы они соответствовали вашему шаблону.
инструкции
- Установите в ячейке A1 значение года для месяца, который вы хотите представить.
- Датой первой редакции этой публикации будет «2015 год».
- Введите в ячейку A2 полное название месяца, который вы хотите отобразить.
- Датой первой редакции этой публикации будет «май».
- Заполните ячейки A3:G3 днями недели, начиная с «Воскресенья» в A3 и заканчивая «Субботой» в G3.
- В ячейку А4 впишите следующую формулу:
=IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=1,1,"")
- В зависимости от месяца/года эта формула может вернуть пустое значение. (Так будет для мая 2015 года.) Это нормально.
- В ячейку B4 вставьте следующую формулу:
=IF(A4="",IF(WEEKDAY(DATEVALUE(CONCATENATE($A$2," 1, ",$A$1)))=COLUMNS($A$4:B4),1,""),A4+1)
- В зависимости от месяца/года эта формула может вернуть пустое значение. (Так будет для мая 2015 года.) Это нормально.
- Скопируйте формулу из B4 в ячейки C4:G4. Excel должен автоматически скорректировать ссылки на ячейки в формуле по мере необходимости.
- На этом этапе формула должна вычислить "1" в одной из ячеек в строке 4, и каждая последующая ячейка должна возвращать приращение, превышающее предыдущую ячейку. Ячейки до "1" должны быть пустыми. Для мая 2015 года вы должны увидеть пробелы в A4:E4, "1" в F4 (пятница) и "2" в G4 (суббота).
- В ячейку A5 впишите следующую формулу:
=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",G4+1,", ",$A$1))),"",G4+1)
- Результат формулы должен быть на единицу больше значения G4.
- Скопируйте формулу из A5 вниз по ячейкам A6:A9. Excel должен автоматически скорректировать ссылки на ячейки в формуле по мере необходимости.
- A6:A9 пока будут оцениваться как пустые. Это нормально.
- В ячейку B5 введите следующую формулу:
=IF(ISERROR(DATEVALUE(CONCATENATE($A$2," ",A5+1,", ",$A$1))),"",A5+1)
- Результат формулы должен быть на единицу больше значения A5.
- Скопируйте формулу из B5 в ячейки C5:G5. Excel должен автоматически скорректировать ссылки на ячейки в формуле по мере необходимости.
- Формулы в строке 5 теперь должны вычисляться как набор чисел, увеличивающихся постепенно от столбца A к столбцу G.
- Выберите B5:G5 и скопируйте эти ячейки вниз до B6:G9. Excel должен автоматически скорректировать ссылки на ячейки в формуле по мере необходимости.
- На этом этапе календарь должен быть заполнен соответствующим образом для данного месяца. Ячейки до первого числа месяца и после последнего дня месяца должны быть пустыми.
- Для некоторых месяцев, например, января 2015 года, строка 9 будет полностью пустой. Это нормально.
Функции
- ОБЪЕДИНЯТЬобъединяет текстовые строки вместе.
- ДАТАЗНАЧЕНИЕвозвращает значение "серийного номера" Excel для даты, представленной текстовой строкой. Он вернет ошибку, если строка не соответствует известному формату даты или если строка не представляет фактическую дату (например: "32 января 2015 г." или "29 февраля 2015 г.").
- БУДНИвозвращает значение от 1 до 7, представляющее день недели указанной даты.
- КОЛОННЫвозвращает количество столбцов, охватываемых указанным массивом ячеек.
- ЕСЛИпозволяет возвращать выбранное значение (или результат формулы) в зависимости от того, является ли указанная формула ИСТИНА или ЛОЖЬ.
- ОШИБКАвозвращает TRUE, если данная формула приводит к ошибке, или FALSE, если формула не генерирует ошибку.
Пояснения к формулам
А4собирает информацию из A1 и A2 для генерации текстовой строки, представляющей первый день месяца. (например: "1 мая 2015 г.") Затем он проверяет, будет ли эта дата будним днем в воскресенье. Возвращает 1, если это воскресенье, пусто в противном случае.
В4:Г4проверяет предыдущую ячейку на предмет ее пустоты. Если нет, возвращает значение на единицу больше, чем предыдущая ячейка. Если предыдущая ячейка пуста, проверяет, совпадает ли текущий день недели с первым днем указанного месяца — возвращает 1, если да, и пусто, если нет.
А5:А9добавить 1 к значению из конца предыдущей строки, затем объединить результат с информацией из A1 и A2, чтобы сформировать строку даты. Проверяет, существует ли дата на самом деле. Возвращает номер дня месяца, если да, или пустое значение, если нет.
В5:Г9добавить 1 к значению из предыдущей ячейки, затем объединить результат с информацией из A1 и A2, чтобы сформировать строку даты. Проверяет, существует ли дата на самом деле. Возвращает номер дня месяца, если да, или пустое значение, если нет.
Скриншот
Пример вывода за май 2015 года.
решение2
Создать New Workbook
из шаблона. Calendar sunday
Строка поиска.
Выбиратьдневная зонаи нажмите Manage Rules
в Conditional Formatting
меню.
ДобавлятьNew Rule
Добавить правило равно=TODAY()
Результат:
решение3
Введите эти элементы в указанные ячейки:
A1: 2015 B1: Первый день C1: =ДАТАЗНАЧ(A1&"-"&A2&"-01") A2: 5 B2: Неделя-воскресенье C2: =C1-ДЕНЬНЕДНИ(C1;2) C4: =ТЕКСТ(СТОЛБЦЫ($A$4:A4);"Ddd") C5: =ЕСЛИ(ТЕКСТ($C$2-1+СТОЛБЦЫ($A$4:A4)+(СТРОКИ($A$4:A4)-1)*7;"ГГГГ-ММ")=ТЕКСТ($C$1;"ГГГГ-ММ");$C$2-1+СТОЛБЦЫ($A$4:A4)+(СТРОКИ($A$4:A4)-1)*7;"")
Затем скопируйте C4 и C5, чтобы заполнить ширину семи (7) ячеек.
Затем скопируйте строку 7, чтобы заполнить в общей сложности шесть (6) строк.
Выберите ячейки в этих последних 6 строках и нажмите CTRL+ 1, щелкните Пользовательский на левой панели и введите один D
для пользовательского формата.
Результат будет выглядеть так:
2015 Первый день 2015-05-01 5 неделя-воскресенье 2015-04-26 Вс Пн Вт Ср Чт Пт Сб 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Это будет работать в Excel, LibreOffice и, скорее всего, в любой другой электронной таблице.
решение4
Линукс:
Откройте терминал и введите:
ncal 2015
и нажмите ENTER(при $
появлении подсказки).
Вывод будет выглядеть так:
2015
January February March April
Su 4 11 18 25 1 8 15 22 1 8 15 22 29 5 12 19 26
Mo 5 12 19 26 2 9 16 23 2 9 16 23 30 6 13 20 27
Tu 6 13 20 27 3 10 17 24 3 10 17 24 31 7 14 21 28
We 7 14 21 28 4 11 18 25 4 11 18 25 1 8 15 22 29
Th 1 8 15 22 29 5 12 19 26 5 12 19 26 2 9 16 23 30
Fr 2 9 16 23 30 6 13 20 27 6 13 20 27 3 10 17 24
Sa 3 10 17 24 31 7 14 21 28 7 14 21 28 4 11 18 25
May June July August
Su 3 10 17 24 31 7 14 21 28 5 12 19 26 2 9 16 23 30
Mo 4 11 18 25 1 8 15 22 29 6 13 20 27 3 10 17 24 31
Tu 5 12 19 26 2 9 16 23 30 7 14 21 28 4 11 18 25
We 6 13 20 27 3 10 17 24 1 8 15 22 29 5 12 19 26
Th 7 14 21 28 4 11 18 25 2 9 16 23 30 6 13 20 27
Fr 1 8 15 22 29 5 12 19 26 3 10 17 24 31 7 14 21 28
Sa 2 9 16 23 30 6 13 20 27 4 11 18 25 1 8 15 22 29
September October November December
Su 6 13 20 27 4 11 18 25 1 8 15 22 29 6 13 20 27
Mo 7 14 21 28 5 12 19 26 2 9 16 23 30 7 14 21 28
Tu 1 8 15 22 29 6 13 20 27 3 10 17 24 1 8 15 22 29
We 2 9 16 23 30 7 14 21 28 4 11 18 25 2 9 16 23 30
Th 3 10 17 24 1 8 15 22 29 5 12 19 26 3 10 17 24 31
Fr 4 11 18 25 2 9 16 23 30 6 13 20 27 4 11 18 25
Sa 5 12 19 26 3 10 17 24 31 7 14 21 28 5 12 19 26
... с текущей датой, отмеченной номером "обратного блока". Скопируйте и вставьте как текст.
Объем требуемой работы зависит от используемого вами инструмента.
правка: Ввод текста в командной строке оболочки Bash;
$ y=2015; for (( i=1 ; i<13 ; i++)) do cal $i $y ; done | sed -re 's/([^ ]+ 2015|[a-zåäö]{2}|[ 0-9]{2} )/"\1",/g' | sed -re 's/"\,[ ]*$/"/' >calendar-$y.csv
Создает CSV-файл, который можно загрузить в любую электронную таблицу. Измените его, y=2015
чтобы отразить год, на который вы хотите создать календарь.