Fill months in Excel: build a 12-month calendar that never drifts

Almost every accounting schedule runs month by month. A closing calendar, a forecast, an accrual schedule and a loan table all start with the same column: one date per month. Typing twelve dates by hand is slow and easy to get wrong. This page shows how to fill months in Excel from a single starting row, which tool to use for first-of-month dates and which for month-ends, and the small mistakes that quietly move your dates off the calendar.

Why accountants build period calendars

Accounting works in periods. A period is a stretch of time you report on, usually a month, and closing the books means finishing all the entries for that period so its numbers stop changing. Every month has a start date and an end date, and many tasks hang off those two dates.

The dates must be exact. A schedule dated the 28th when the books close on the 31st looks careless at best. At worst, a lookup or a date filter misses three days of transactions. So the goal is not just a column of dates that look roughly monthly. It is a column where every date lands on the right day.

Two ways to fill months: the Fill tools and formulas

The Fill handle and the Series dialog

The spreadsheet has built-in tools for this. The Fill handle is the small square at the bottom-right corner of a selected cell. Type a date, drag the handle down, and the spreadsheet continues the sequence. After dragging, an options button lets you choose to fill by days, weekdays, months or years.

The Series dialog (on the Home tab, under Fill) gives more control. You choose a date unit, such as Month, and a step value, such as 1 for every month or 3 for every quarter. You can also set a stop value so the series ends where you want.

These tools are quick and worth knowing. Their weakness is that they type fixed values. If the start date changes next year, nothing below it updates. You have to fill the column again.

The formula approach

A formula links each row to the row above it. Change the first date, and the whole calendar moves with it. This is the approach the exercises grade, because a linked calendar is the one you can reuse. Four formulas cover the common cases:

Write each formula once, in the first empty row, then fill it down. The references to the row above shift by one row each time, which is exactly what you want. The locked rate reference does not shift, which is also what you want.

Dates in a spreadsheet are stored as numbers: a count of days from a fixed starting point. A date format only changes how that number looks. That is why adding 30 to a date moves it 30 days, and why a date can turn into a large plain number if you clear its format.

Worked example 1: a reporting calendar from the first of the month

Juniper Landscaping needs a 12-month reporting calendar that starts on the first day of each month. Row 5 holds the first period: A5 is 9/1/2025 and B5 is 1.

In A6 the formula is =EDATE(A5,1). In B6 it is =B5+1. Fill both down to row 16.

RowPeriod startPeriod
59/1/20251
610/1/20252
711/1/20253
812/1/20254
91/1/20265
102/1/20266
113/1/20267
124/1/20268
135/1/20269
146/1/202610
157/1/202611
168/1/202612

Every date is the first of its month, and the calendar crosses into the new year without any special handling. EDATE works well here because the first of the month exists in every month.

Worked example 2: month-end close dates, and why EDATE drifts

Maple Lane Catering closes its books on the last day of every month and needs the next 11 close dates. A5 holds 6/30/2026. In A6 the formula is =EOMONTH(A5,1), filled down to A16.

Now compare it with =EDATE(A5,1), which keeps the day number of the row above.

RowEOMONTH (correct)EDATE (drifts)
67/31/20267/30/2026
78/31/20268/30/2026
89/30/20269/30/2026
910/31/202610/30/2026
1011/30/202611/30/2026
1112/31/202612/30/2026
121/31/20271/30/2027
132/28/20272/28/2027
143/31/20273/28/2027
154/30/20274/28/2027
165/31/20275/28/2027

Because the start date is the 30th, EDATE returns the 30th of each month. That is only a month-end in 30-day months. Then February arrives. There is no February 30, so EDATE returns the last day it can, 2/28/2027. From that row on, every formula copies the 28th forward: 3/28, 4/28, 5/28. One short month has pulled the rest of the calendar three days early.

EOMONTH does not have this problem. It ignores the day number and asks a different question: what is the last day of the next month? The answer is 31, 30 or 28, whatever the month has.

Worked example 3: a growing monthly forecast

Harbor Bakery forecasts revenue growing by the same example percentage every month. B2 holds an example monthly growth rate of 0.5%. Row 5 holds the first month: A5 is 2/28/2025 and B5 is $66,301.23.

In A6 the formula is =EOMONTH(A5,1). In B6 it is =B5*(1+$B$2). Fill both down to row 16.

RowMonth endRevenue
52/28/202566,301.23
63/31/202566,632.74
74/30/202566,965.90
85/31/202567,300.73
96/30/202567,637.23
107/31/202567,975.42
118/31/202568,315.30
129/30/202568,656.87
1310/31/202569,000.16
1411/30/202569,345.16
1512/31/202569,691.88
161/31/202670,040.34

Notice the start date. It is February 28, so the 28th is the month-end here. EDATE would give 3/28/2025 and stay on the 28th all year. EOMONTH jumps straight to 3/31/2025.

Each month's revenue is the month before times 1.005. The growth compounds, so each step adds a little more in dollars than the last: $331.51 in the first month, and about $348 by the last. The amounts shown are rounded to the cent; the cells hold the full values.

Common mistakes

Adding 30 or 31 days

=A5+30 looks like "next month", but months have 28 to 31 days. In the Juniper calendar it works once, from 9/1/2025 to 10/1/2025, because September has 30 days. Then it lands on 10/31/2025, 11/30/2025 and 12/30/2025, and keeps slipping. By row 16 it shows 7/28/2026 instead of 8/1/2026. Adding 31 fails the other way: 10/2/2025, 11/2/2025, 12/3/2025, and so on, a little later each short month. Move by whole months with EDATE or EOMONTH instead.

Using EDATE on month-ends

This is the drift shown in the Maple Lane table. EDATE keeps the day number, and once a short month cuts that day to the 28th, every later row stays on the 28th. If the column is meant to hold month-ends, use EOMONTH(previous,1). Keep EDATE for dates that exist in every month, such as the 1st or the 15th.

Leaving the growth rate unlocked

If B6 says =B5*(1+B2) without dollar signs, the first row is right. Fill it down, though, and the rate reference moves with it. B7 now points at B3, which is blank, so April shows the same $66,632.74 as March. B8 points at B4, the "Revenue" heading, and text cannot be added to a number, so the rest of the column shows #VALUE!. Lock the rate as $B$2 so every row reads the same cell.

Adding the rate instead of growing by it

=B5+$B$2 adds 0.005 to the revenue, which is half a cent, not half a percent. After eleven months the forecast has grown by about six cents and ends at $66,301.29 instead of $70,040.34. A percentage only means something when you multiply by it. To grow by a rate, multiply by one plus the rate: =B5*(1+$B$2).

How this fits MO-220 practice

The MO-220 exam is a 50-minute, performance-based test [Official], so you work in a live workbook rather than answer multiple-choice questions. Its tasks describe the purpose instead of naming the function [Official]. A task might ask for "the last day of each following month" and leave you to recognize that as EOMONTH. Practising the purpose behind each formula, not just the formula, is what prepares you for that. Accounting Exercises is not affiliated with Microsoft or Certiport.

Each exercise in this lesson gives you one starting row and asks you to write a formula once and fill it down. A check compares every cell with the correct calendar, so you see straight away whether a date has drifted.

Frequently asked questions

What is the difference between EDATE and EOMONTH?

EDATE moves a date by whole months and keeps the day number, so 1/15 becomes 2/15. EOMONTH moves by whole months and returns the last day of that month, so any date in January becomes the last day of February. Use EDATE for period starts and EOMONTH for month-ends.

Why not just drag the Fill handle and choose Fill Months?

It works for a one-off list. The result is fixed values, though, so if the start date changes the dates below do not follow. A formula filled down stays linked to the first row, which makes the schedule reusable next year.

How do I fill quarters instead of months?

Change the number of months. =EDATE(A5,3) gives the same day three months later, and =EOMONTH(A5,3) gives the end of the month three months later. In the Series dialog, set the date unit to Month and the step value to 3.

My EDATE or EOMONTH result shows as a plain number. What went wrong?

Nothing is wrong with the value. Dates are stored as day counts, and the cell has a general number format. Apply a date format to the cell and the number displays as a date again.

Should I round the forecast amounts?

For a planning forecast, a currency format is usually enough, because the amounts are estimates. If the amounts feed a posted entry, round them to the cent with ROUND so the stored value matches what you record.

Practice it now: Monthly periods with Fill

A free exercise with new numbers every time. No sign-up.

Start the free exercise