Создание и вставка календаря в Excel
Эта статья содержит образец макроса Microsoft Visual Basic для приложений (подпрограммы), который запрашивает у вас месяц и год и создает календарь на месяц с помощью рабочего листа.
Решение
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
Для создания календаря выполните следующие действия.
Microsoft Excel 2003
- Создайте новую книгу.
- В меню Сервис выберите Макрос, затем выберите Редактор Visual Basic.
- В меню Вставка выберите пункт Модуль.
- Вставьте сценарий Visual Basic для приложений из раздела «Образец процедуры Visual Basic» на лист модуля.
- В меню Файл нажмите Закрыть и вернуться в Microsoft Excel.
- Выберите вкладку Лист1.
- В меню Сервис выберите пункт Макрос, а затем нажмите Макросы.
- Нажмите CalendarMaker, а затем нажмите Выполнить для создания календаря.
Microsoft Excel 2007 или более поздние версии
- Создайте новую книгу.
- На ленте Разработчик выберите Visual Basic.
- В меню Вставка выберите пункт Модуль.
- Вставьте сценарий Visual Basic для приложений из раздела «Образец процедуры Visual Basic» на лист модуля.
- В меню Файл нажмите Закрыть и вернуться в Microsoft Excel.
- Выберите вкладку Лист1.
- На ленте Разработчик щелкните Макрос.
- Нажмите CalendarMaker, а затем нажмите *Выполнить для создания календаря.
Если вкладка «Разработчик» не отображается, перейдите на вкладку «Параметры Excel» и включите ее. В Excel 2007 этот пункт размещен в меню Популярное. В Excel 2010 этот пункт размещен в меню Настроить ленту.
Пример процедуры Visual Basic
Sub CalendarMaker() ' Unprotect sheet if had previous calendar to prevent error. ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _ Scenarios:=False ' Prevent screen flashing while drawing calendar. Application.ScreenUpdating = False ' Set up error trapping. On Error GoTo MyErrorTrap ' Clear area a1:g14 including any previous calendar. Range("a1:g14").Clear ' Use InputBox to get desired month and year and set variable ' MyInput. MyInput = InputBox("Type in Month and year for Calendar ") ' Allow user to end macro with Cancel in InputBox. If MyInput = "" Then Exit Sub ' Get the date value of the beginning of inputted month. StartDay = DateValue(MyInput) ' Check if valid date but not the first of the month ' -- if so, reset StartDay to first day of month. If Day(StartDay) <> 1 Then StartDay = DateValue(Month(StartDay) & "/1/" & _ Year(StartDay)) End If ' Prepare cell for Month and Year as fully spelled out. Range("a1").NumberFormat = "mmmm yyyy" ' Center the Month and Year label across a1:g1 with appropriate ' size, height and bolding. With Range("a1:g1") .HorizontalAlignment = xlCenterAcrossSelection .VerticalAlignment = xlCenter .Font.Size = 18 .Font.Bold = True .RowHeight = 35 End With ' Prepare a2:g2 for day of week labels with centering, size, ' height and bolding. With Range("a2:g2") .ColumnWidth = 11 .VerticalAlignment = xlCenter .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Orientation = xlHorizontal .Font.Size = 12 .Font.Bold = True .RowHeight = 20 End With ' Put days of week in a2:g2. Range("a2") = "Sunday" Range("b2") = "Monday" Range("c2") = "Tuesday" Range("d2") = "Wednesday" Range("e2") = "Thursday" Range("f2") = "Friday" Range("g2") = "Saturday" ' Prepare a3:g7 for dates with left/top alignment, size, height ' and bolding. With Range("a3:g8") .HorizontalAlignment = xlRight .VerticalAlignment = xlTop .Font.Size = 18 .Font.Bold = True .RowHeight = 21 End With ' Put inputted month and year fully spelling out into "a1". Range("a1").Value = Application.Text(MyInput, "mmmm yyyy") ' Set variable and get which day of the week the month starts. DayofWeek = WeekDay(StartDay) ' Set variables to identify the year and month as separate ' variables. CurYear = Year(StartDay) CurMonth = Month(StartDay) ' Set variable and calculate the first day of the next month. FinalDay = DateSerial(CurYear, CurMonth + 1, 1) ' Place a "1" in cell position of the first day of the chosen ' month based on DayofWeek. Select Case DayofWeek Case 1 Range("a3").Value = 1 Case 2 Range("b3").Value = 1 Case 3 Range("c3").Value = 1 Case 4 Range("d3").Value = 1 Case 5 Range("e3").Value = 1 Case 6 Range("f3").Value = 1 Case 7 Range("g3").Value = 1 End Select ' Loop through range a3:g8 incrementing each cell after the "1" ' cell. For Each cell In Range("a3:g8") RowCell = cell.Row ColCell = cell.Column ' Do if "1" is in first column. If cell.Column = 1 And cell.Row = 3 Then ' Do if current cell is not in 1st column. ElseIf cell.Column <> 1 Then If cell.Offset(0, -1).Value >= 1 Then cell.Value = cell.Offset(0, -1).Value + 1 ' Stop when the last day of the month has been ' entered. If cell.Value > (FinalDay - StartDay) Then cell.Value = "" ' Exit loop when calendar has correct number of ' days shown. Exit For End If End If ' Do only if current cell is not in Row 3 and is in Column 1. ElseIf cell.Row > 3 And cell.Column = 1 Then cell.Value = cell.Offset(-1, 6).Value + 1 ' Stop when the last day of the month has been entered. If cell.Value > (FinalDay - StartDay) Then cell.Value = "" ' Exit loop when calendar has correct number of days ' shown. Exit For End If End If Next ' Create Entry cells, format them centered, wrap text, and border ' around days. For x = 0 To 5 Range("A4").Offset(x * 2, 0).EntireRow.Insert With Range("A4:G4").Offset(x * 2, 0) .RowHeight = 65 .HorizontalAlignment = xlCenter .VerticalAlignment = xlTop .WrapText = True .Font.Size = 10 .Font.Bold = False ' Unlock these cells to be able to enter text later after ' sheet is protected. .Locked = False End With ' Put border around the block of dates. With Range("A3").Offset(x * 2, 0).Resize(2, _ 7).Borders(xlLeft) .Weight = xlThick .ColorIndex = xlAutomatic End With With Range("A3").Offset(x * 2, 0).Resize(2, _ 7).Borders(xlRight) .Weight = xlThick .ColorIndex = xlAutomatic End With Range("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _ Weight:=xlThick, ColorIndex:=xlAutomatic Next If Range("A13").Value = "" Then Range("A13").Offset(0, 0) _ .Resize(2, 8).EntireRow.Delete ' Turn off gridlines. ActiveWindow.DisplayGridlines = False ' Protect sheet to prevent overwriting the dates. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _ Scenarios:=True ' Resize window to show all of calendar (may have to be adjusted ' for video configuration). ActiveWindow.WindowState = xlMaximized ActiveWindow.ScrollRow = 1 ' Allow screen to redraw with calendar showing. Application.ScreenUpdating = True ' Prevent going to error trap unless error found by exiting Sub ' here. Exit Sub ' Error causes msgbox to indicate the problem, provides new input box, ' and resumes at the line that caused the error. MyErrorTrap: MsgBox "You may not have entered your Month and Year correctly." _ & Chr(13) & "Spell the Month correctly" _ & " (or use 3 letter abbreviation)" _ & Chr(13) & "and 4 digits for the Year" MyInput = InputBox("Type in Month and year for Calendar") If MyInput = "" Then Exit Sub Resume End Sub
Вы можете добавить другой код, чтобы настроить календарь в соответствии с вашими потребностями. Вставьте дополнительные строки для ввода на экране для каждого дня или измените размер экрана, чтобы увидеть весь календарь в соответствии с размером и разрешением экрана.
Обратная связь
Были ли сведения на этой странице полезными?
Шаблоны календарей в Excel
Многие шаблоны календарей можно использовать в Microsoft Excel. Шаблон содержит базовый макет календаря, который можно легко адаптировать под свои нужды.
Шаблон Excel календаря может иметь одну или несколько из этих функций:
- 12 месяцев на одном или нескольких отдельных таблицах.
- Тринадцать месяцев, начиная с июля или августа и заканчивая июлем или августом следующего года, чтобы представить учебный год.
- Печать календаря на одной или двенадцать страницах (тринадцать страниц для календарей учебного года).
- Отображение рабочих дней с понедельника по воскресенье или с понедельника по воскресенье.
- К портретной или альбомной ориентации для печатных страниц.
- Столбец правил для заметок.
- Планировщик отпусков.
- Списки дел.
- «Отслеживание задач».
- Отслеживание бюджета.
- Ежедневное отслеживание расписания.
Скачать шаблон календаря:
Просмотрите шаблоны календарей, выберите Excel календаря, который лучше всего вам подберется. Нажмите кнопку Скачать на странице шаблона, откройте файл шаблона в Excel, а затем отредактируете и сохраните календарь.
Примечание: По умолчанию файл шаблона загружается в папку «Загрузки» на компьютере. Вам может потребоваться скопировать файл шаблона в другое место, чтобы его можно было легко найти позже.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
Создание календаря на основе шаблона
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Еще. Меньше
Многие шаблоны календарей можно использовать в Excel. Шаблон содержит базовый макет календаря, который можно легко адаптировать под свои нужды.
Вы можете скачать шаблоны календарей с полезными и творческими темами при нажатии кнопки Файл >в Excel .

- Выберите Поиск шаблонов в Сети,введите календарьи выберите увеличительное стекло.
- Щелкните шаблон, который вас интересует, и нажмите кнопку Создать.
Какую версию Excel вы используете?
- Какую версию Excel вы используете?
- Более новые версии
- Excel для Mac 2011
- В меню Файл выберите команду Создать из шаблона.
- В правой части окна поиска Поиск по всем шаблонам введите Календарь.
- Выберите нужный шаблон календаря и нажмите кнопку Создать. Вы можете легко применить собственный внешний вид к календарю. Шаблоны календарей отформатированы с помощью тем, позволяющих применить шрифты, цвета и эффекты форматирования рисунков во всей книге одним щелчком мыши. На вкладке Разметка страницы в области Темы выберите один из десятков встроенных тем, доступных в коллекции Темы, или найдите параметры, чтобы изменить только шрифты темы или цвета темы.
Важно: Формулы существуют во всех ячейках, которые отображают дату, а также в ячейках в строках дат, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в этих ячейках, календарь больше не сможет обновляться автоматически.
Совет: Вы также можете искать другие шаблоны календарей в Интернете. Шаблоны скачиваются во временную папку на компьютере. Вы можете сразу сохранить шаблон в другом месте, чтобы его было проще найти. Чтобы быстро найти все шаблоны календарей, доступные на сайте Office.com или на компьютере, в поле поиска Excel коллекции книг введите календарь.
Вы можете легко применить собственный внешний вид к календарю. Шаблоны календарей отформатированы с помощью тем, позволяющих применить шрифты, цвета и эффекты форматирования рисунков во всей книге одним щелчком мыши. На вкладке Главная в областиТемы выберите из десятков встроенных тем, доступных в коллекции Темы, или найдите параметры, чтобы изменить только шрифты темы или цвета темы.
Важно: Формулы существуют во всех ячейках, которые отображают дату, а также в ячейках в строках дат, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в этих ячейках, календарь больше не сможет обновляться автоматически.
Создание ежегодного календаря на одну страницу
Важно: Формулы существуют во всех ячейках, включая ячейки, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в ячейках, календарь больше не сможет обновляться автоматически.
- В меню Файл выберите команду Создать из шаблона.
- В области навигации слева в области шаблоновщелкните Управление временем.
- Дважды щелкните шаблон «Календарь на одну страницу». Excel открывает новый лист, основанный на шаблоне ежегодного календаря на одну страницу.
- Щелкните ячейку с отображением года, а затем во всплываемом списке выберите нужный год. При выборе нужного изменения лист календаря автоматически обновляется.
Примечание: Чтобы изменить год, доступный в списке, измените данные на листе «Список подытогов».
Создание многослойного ежемесячного календаря
Многоэтапная книга календаря содержит двенадцать месяцев в одной книге, что удобно для личного планирования или ссылки на даты на любой год. Вы можете добавить собственный текст в более высокие ячейки под каждой ячейкой даты.
- В меню Файл выберите команду Создать из шаблона.
- В области навигации слева в области шаблоновщелкните Управление временем.
- Дважды щелкните шаблон Много страниц календаря. Excel открывает новую книгу, основанную на шаблоне ежемесячного календаря на несколько листов.
- Щелкните ячейку K1 и во всплываемом списке выберите нужный календарный год. При выборе окне автоматически обновляются листы календарей для всех месяцев в книге.
Примечание: Чтобы изменить год, доступный в списке, измените данные на листе «Список подытогов».
Примечание: При изменении года в календаре, который содержит настраиваемые сведения, пользовательские сведения, которые существовали в календаре, не изменяют расположение ячейки при изменении дат.
См. также
Создавать письма в Интернете можно быстро и легко.
Выберите один из шаблонов календарей иоткройте его в программе Office в Интернете, чтобы сделать его своим (некоторые календари можно редактировать в Excel в Интернете, другие — в Word в Интернете, а другие — в Веб-приложение PowerPoint ).
Совет: Если вы уже Excel в Интернете, чтобы увидеть все шаблоны календаря, перейдите в файл > New, а затем под изображениями шаблонов щелкните Ссылки на Office.com.

Вы будете на странице Шаблоны для Excel. В списке категорий выберите Календари.
В процессе работы над письмом, возможно, понадобится переименовать его.
Предоставление доступа к календарю
Когда все будет готово, распечатайте письмо или отправьте его в электронном виде. Это можно сделать, если календарь по-прежнему открыт в Excel в Интернете. Нет необходимости предварительно сохранять его (это уже сделано за вас).
печать
Чтобы напечатать его, нажмите клавиши CTRL+P и нажмите кнопку Печать для предварительного просмотра. Нажмите кнопку Печать еще раз, чтобы распечатать лист.
Совет: Чтобы напечатать все листы в шаблоне, щелкните каждый ярлычок листа и напечатайте их по одному.
Общий доступ
Чтобы поделиться календарем в Интернете, отправьте ссылку на него.
- В верхней части экрана нажмите кнопку Общий доступ.
- В разделе Общий доступ щелкните элемент Получить ссылку.

- В списке Выберите один из вариантов выберите пункт Только просмотр.

- Нажмите кнопку Создать ссылку.
- Щелкните веб-адрес, чтобы выделить его, а затем скопируйте и вставьте его в сообщение электронной почты, текстовое сообщение или запись блога.
Совет: Если у вас есть блог или веб-сайт, вы можете внедрить в него представление календаря.
Создание календаря в Excel на год
Создание календаря в Excel на целый год с указанием праздничных и выходных дней. Вы можете сразу скачать календарь в Excel или же потратить 15 минут и научиться делать его самостоятельно, параллельно открыв для себя новые возможности Excel.
Готовый результат
Для тех, кто просто хочет скачать календарь в Excel на текущий год, на картинке ниже показан как он выглядит. Красным отмечены праздничные дни, розовым — выходные. Текущий день, также автоматически выделяется заливкой.
Добавил календарь на 2021 год с праздниками и выходными в соответствии с постановлением правительства.

Пошаговая инструкция создания календаря в Excel
Сейчас мы создадим автоматический календарь который пригодится не только на текущий год, но и на все последующие года. И для этого нам не понадобятся макросы и программирование. Все что я покажу — сделано с использованием стандартных возможностей Excel.
Делаем заголовки
В ячейку A1 вбиваем следующую формулу: =»Календарь на » & ГОД(СЕГОДНЯ()) & » год». Функция СЕГОДНЯ() возвращает текущую дату (мы часто будем ей пользоваться). Соответственно связка функций ГОД(СЕГОДНЯ()) возвратит нам текущий год.
Теперь создадим заголовки месяцев. В ячейку где стоит Январь запишем следующую формулу =ДАТА(ГОД(СЕГОДНЯ());1;1). Эта функция возвращает первое января текущего года (01.01.2015 в моем случае). Применим к этой ячейке такой формат, чтобы отображалось только название месяца. Для этого откроем формат ячеек сочетанием клавиш Ctrl + 1 и выберем соответствующий формат (см. рисунок).
Для создания заголовков последующих месяцев будем использовать еще одну очень полезную функцию =ДАТАМЕС(B3;1). Эта функция возвращает дату отстоящую от указанной на заданное число месяцев (в нашем случае на один). Таким образом, у нас получается следующая картина (дополнительно я добавил немного форматирования):
Проставляем числа
Для автоматического проставления чисел в календаре мы будем использовать всего одну формулу — формулу массива. На вид звучит страшновато, но если разобраться — все легко и просто. Выделяем ячейки B5:H10 и вводим следующую формулу (не спешим жать Enter):
=ДАТА(ГОД(B3);МЕСЯЦ(B3);1-1)-(ДЕНЬНЕД(ДАТА(ГОД(B3);МЕСЯЦ(B3);1-1))-1)+*7+
Вместо Enter нажимаем сочетание клавиш Ctrl+Shift+Enter, вставляя таким образом формула массива. В результате в выделенном диапазоне получаем числа указанного в ячейке B3 месяца.
Аналогичную операцию проводим с другими месяцами или просто копируем диапазон дат января в следующие месяца. Получаем следующую картину:
Форматируем
Отформатируем ячейки таким образом, чтобы они содержали только числа (а не полностью даты). Выделяем даты, открываем формат ячеек (Ctrl+1) и вводим вручную следующий формат:
Календарь принимает все более привычный вид.
Добавляем условного форматирования
Сейчас в январе календарь содержит даты 29, 30, 31 декабря, а также часть дат февраля. Давайте немного скроем эти числа. Для этого будем использовать условное форматирование. Выделяем ячейки B5:H10 и создаем правило условного форматирования. Форматироваться будут ячейки, для которых следующая формула будет являться ИСТИНОЙ:
=И(МЕСЯЦ(B5)<>1+3*(ЧАСТНОЕ(СТРОКА(B5)-5;9))+ЧАСТНОЕ(СТОЛБЕЦ(B5);9))
В качестве формата я выбрал серый текст шрифта и получил следующую картину:
Автоматически выделяем текущую дату в календаре
Для этого создаем еще одно правило условного форматирования. Ячейка будет форматироваться только в том случае, если ее значение будет равно текущей дате (=СЕГОДНЯ()):
Выделим выходные дни в календаре Excel
На этот раз обойдемся обычной заливкой ячеек. Выбирайте на свой вкус. У меня получилось так:
Добавляем праздничные дни
Создадим новый лист Excel (Праздники) и добавим на него умную таблицу со столбцом Праздничные дни. В этот столбец занесем все праздничные дни. Я это уже сделал, можете спокойно копировать и использовать.
Вернемся в наш календарь и создадим еще одно правило условного форматирования. Формула условного форматирования будет проверять является ли дата праздником. И в случае если формула вернет ИСТИНА ячейка будет форматироваться. Вот эта формула:
=НЕ(ЕОШИБКА(ПОИСКПОЗ(B5;ДВССЫЛ(«Праздники[Праздничные дни]»);0))). Стоит отметить, что при добавлении или изменении праздничных дней, календарь будет автоматически форматироваться.
Осталось скопировать ячейки B5:H10 в другие месяца и наш автоматический календарь готов и может служить нам не один год.
Изменение цветовой гаммы календаря Excel
Если при создании календаря использовать цвета темы, то потом их можно будет изменить одним простым движением. Просто сменив цвета темы на вкладке Разметка страницы. Выбирайте понравившийся.
P.S.
В архив для скачивания помимо моего календаря, буду складывать календари других пользователей. Поблагодарить их можно ниже в комментариях. Если у вас также есть чем поделиться, укажите ссылку на свой вариант календаря в комментарии, я с удовольствием его добавлю.