Excel
Calendar uses only 4 functions with some repeated but no VBA. Choose any month.
Start with a look-up table.
We'll use this to put the month into C1 with the mouse using Data Validation.
Insert a Spin Button (Form Control) from the Controls group on the Developer ribbon to also be able to click to change the year with the mouse. Right click the spinner and select Properties and set them as shown. Make it non printing on the Properties tab.
You may have to right click a ribbon to customize the ribbon to show the Developer ribbon. 😊
Add the functions for the date of the first of the month and the number of the day of the week it falls on.
A12 = DATE(D1,VLOOKUP(C1,A14:B25,2,FALSE),1) Get the date of the first of the month
B12 = WEEKDAY(A12,2) Find the day of the week of A12
The result of the formula in A12 is actually 43,770 which is the days since the 1/1/1900.
Next set all the date cells in the calendar to custom format of just "d".
Enter the formula in A3 to display the date for Sunday.
A3 = COLUMN(A3) - COLUMN($A$3) + $A$12 - $B$12
Fill this formula across to G3. For October 2018 the first is on the Monday.
Row 4 requires different formulas to increment the dates.
A4 = A3 + 7
Fill the A4 formula across to the G column. Fill row 4 down to row 8.
That's it apart from hiding, or shading, the dates before and after the month.
One way to achieve this is with Conditional Formatting formulas setting the text color to white to totally hide the numbers or perhaps a faint grey to just be able to see them.
Select A3 then Home Ribbon - Conditional Formatting - New Rule - Use a formula etc.
Put this conditional formula into A3 and choose to Format the text color white or grey.
= DAY(A3) > 8
Format Paint A3 to the end of row 3.
For the end of the month select A7 and enter its conditional formatting.
= DAY(A7) < 20
Format paint A7 to the end of the calendar. Here is the calendar with dates at the start and end in a faint grey.
Cells C8 to G8 always show dates from the following month. These cells could be used to make notes instead by deleting the formulas.
If you want to type in the calendar, add extra blank rows between each week. Select Wrap Text or press Alt-Enter to type more text on a new line.
Color can be added.
Perhaps the calendar is required for a whole year. Name this sheet Jan and copy it to create Feb. (Hold down Ctrl then drag Jan a little along) In D1 put the formula: =Jan!D1.
Copy Feb to create the sheets for the rest of the year. Set the appropriate month in C1 on each sheet. Print the whole workbook for a hard copy if desired.