How to create monthly/yearly calendar in Excel?
In some time, you need to create a specific month or year calendar in Excel, how can you quickly solve it? This tutorial introduces the tricks to quickly create monthly or yearly calendar in Excel.
Excel Productivity Tools
Office Tab: Bring powerful tabs to Office (include Excel), just like Chrome, Safari, Firefox and Internet Explorer. Save you half the time, and reduce thousands of mouse clicks for you. 30-day Unlimited Free Trial
Kutools for Excel: Save 70% of your time and solve 80% Excel problems for you. 300+ advanced features designed for 1500+ work scenario, make Excel much easy and increase productivity immediately.60-day Unlimited Free Trial
In Excel, you can use a calendar template to create a monthly or yearly calendar.
1. In Excel 2010/2013, click File > New, in Excel 2007, click Office Button > New, then in the right section of the popping window, type calendar into the search engine. See screenshot:
In Excel 2010/2013
In Excel 2007
2. Press Enter, then multiple types of calendars are listing in the window. Select one type of calendar you need, and click Download (or Create) in the right pane. See screenshot:
Now a calendar is created in a new workbook. See screenshot:
Sometimes, you need to create a one-month calendar for specified month, such as Jan 2015. It may be a litter hard to find such a calendar template with above method. Here I introduce a VBA code to help you create a specific monthly calendar.
1. Press Alt + F11 keys to open Microsoft Visual Basic for Applications window, click Insert > Module, then copy and paste below VBA code to the window.
VBA: Create monthly calendar.
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
The VBA is coming from this web https://support.microsoft.com/en-us/kb/150774
2. Press F5 key or Run button, and a dialog is popped out to remind you type the specific month you need to create a calendar, see screenshot:
3. Click OK. Now a Jan 2015 calendar is created in the active sheet.
But in above methods, there are some limitations, for example, if you want to create a calendar from Jan to May at once, you need to create the calendar in five times with above two methods. Now I introduce a handy utility to solve it quickly and easily
Perpetual Calendar is one of powerful utilities in Kutools for Excel, and it can help you quickly create monthly or yearly calendar in Excel at once.
|Kutools for Excel, with more than 300 handy functions, makes your jobs more easier.|
1. Click Enterprise > Worksheet > Perpetual Calendar. see screenshot:
2. In the popping dialog, specify the month duration you want to create the calendar, and click Create. See screenshot:
Then a new workbook is created with five calendar worksheets. See screenshot:
If you just want to create a specific month calendar, just need to select the same month both in From and To text boxes in the dialog.