EOMONTH: Get End of Month Date & Calculate Month-End Reporting Dates

EOMONTH Function in Excel feature image for tutorial blog
Learn how to use EOMONTH in Excel to find the last day of any month, build reporting periods, calculate invoice due dates, and sum monthly totals with SUMIFS.

The EOMONTH function returns the last day of a month. You tell it a start date and how many months to move forward or backward. It always lands on the final day of the target month. For example, EOMONTH on 15 March with 1 month gives 30 April. The day of the start date does not matter. EOMONTH ignores it and snaps straight to the month-end. This makes it the right tool for billing cut-offs, period-end reports, and financial statement dates.

Availability: EOMONTH works in all Excel versions from Excel 2007 onwards, including Microsoft 365, Excel 2024, 2021, 2019, and 2016. It is also available in Excel for the web.

What Is the EOMONTH Syntax?

The function takes just two arguments. Both are required.

=EOMONTH(start_date, months)
ArgumentRequired?What it does
start_date Required Any valid date in the same month you want to work with. The specific day does not affect the result. Use a cell reference, DATE(), or TODAY(). Avoid typing dates as plain text, as Excel may misread them.
months Required How many months to move from start_date. Use 0 to get the end of the same month. Use a positive number to move forward. Use a negative number to move backward. Decimals are truncated.
=EOMONTH(DATE(2026,3,15), 0) → 31-Mar-2026 (end of same month) =EOMONTH(DATE(2026,3,15), 1) → 30-Apr-2026 (end of next month) =EOMONTH(DATE(2026,3,15), -1) → 28-Feb-2026 (end of previous month) =EOMONTH(DATE(2026,3,1), 0) → 31-Mar-2026 (start of month → end of same month)
Format the result as a date: EOMONTH returns a serial number. If you see a large number instead of a date, press Ctrl+1 and choose a Date format. You can also wrap the result in TEXT: =TEXT(EOMONTH(A2,0),"DD-MMM-YYYY").

Why Use 0 as the Months Argument?

Passing 0 returns the last day of the same month as the start date. This is one of the most common uses. For example, EOMONTH(TODAY(), 0) always gives you the last day of the current month. The result updates automatically every day. You do not need to change the formula at the start of each new month.

Last day of the current month — updates automatically: =EOMONTH(TODAY(), 0) Days remaining in the current month: =EOMONTH(TODAY(), 0) - TODAY() First day of the current month (EOMONTH on previous month + 1 day): =EOMONTH(TODAY(), -1) + 1 First day of the next month: =EOMONTH(TODAY(), 0) + 1

Adding 1 to an EOMONTH result is a reliable way to find the first day of a month. The last day of March plus 1 is always the first day of April — no matter which year it is. This trick works for any month, including those with 28, 29, 30, or 31 days.

Example 1: Month-End Reporting Periods

Financial reports often need a start date and an end date for each period. EOMONTH generates both from a single anchor date. You can build an entire year of reporting periods in one column without typing a single date manually.

1
Generate period start and end dates for a full year of monthly reports
#
A — Period
B — Start date
C — End date
D — Days in period
2
Jan 2026
01-Jan-2026
31-Jan-2026
31
3
Feb 2026
01-Feb-2026
28-Feb-2026
28
4
Mar 2026
01-Mar-2026
31-Mar-2026
31
Period end date (C2) — EOMONTH of the start date with 0 months: =EOMONTH(B2, 0) Days in the period (D2) — end minus start plus 1: =EOMONTH(B2, 0) - B2 + 1 Next period start (B3) — one day after previous period end: =EOMONTH(B2, 0) + 1 Period working days using NETWORKDAYS: =NETWORKDAYS(B2, =EOMONTH(B2, 0))
Enter just the first start date manually. Then use =EOMONTH(B2,0)+1 to generate each subsequent start date. EOMONTH handles February (28 or 29 days) and months with 30 or 31 days automatically.

Example 2: Invoice and Payment Due Dates

Many businesses set payment terms at the end of the month following the invoice date. For example, "end of next month" means the last day of the month after the invoice is issued. EOMONTH calculates this in one formula. It also handles varying month lengths correctly, so you never land on a non-existent date.

2
Calculate invoice due dates on end-of-month payment terms
#
A — Invoice
B — Issue date
Terms
C — Due date
D — Overdue?
2
INV-081
14-Mar-2026
EOM+1
30-Apr-2026
No
3
INV-082
28-Jan-2026
EOM
31-Jan-2026
Yes
Due end of the same month (EOM terms): =EOMONTH(B2, 0) Due end of the following month (EOM + 1 month terms): =EOMONTH(B2, 1) Due end of the month, 2 months after issue: =EOMONTH(B2, 2) Overdue check — is today past the due date? =IF(TODAY() > =EOMONTH(B2, 1), "Overdue", "On time") Days remaining until due — negative means overdue: =EOMONTH(B2, 1) - TODAY()
Use in conditional formatting: Apply a red fill rule to the invoice row when TODAY() exceeds the EOMONTH due date. This gives you a live overdue tracker. The highlighting updates automatically each day without any manual work.

Example 3: Quarterly and Annual Period Ends

EOMONTH is ideal for building financial model headers. You can generate quarter-end dates, year-end dates, or fiscal period ends from a single anchor date. This approach keeps your model dynamic. Change one date and the entire column of headers updates.

3
Build quarter-end and year-end date headers for financial models
Anchor date
Q1 end
Q2 end
Q3 end
Q4 end
01-Jan-2026
31-Mar-2026
30-Jun-2026
30-Sep-2026
31-Dec-2026
Anchor date in A1 = 01-Jan-2026. Quarter-end dates: =EOMONTH($A$1, 2) → 31-Mar-2026 (Q1) =EOMONTH($A$1, 5) → 30-Jun-2026 (Q2) =EOMONTH($A$1, 8) → 30-Sep-2026 (Q3) =EOMONTH($A$1, 11) → 31-Dec-2026 (Q4) Year-end date — 12 months from the anchor: =EOMONTH($A$1, 11) June fiscal year-end from any date in the same year: =EOMONTH(DATE(YEAR(TODAY()), 6, 1), 0) → 30-Jun-2026 (regardless of today's date)
Lock the anchor with $: Use $A$1 when referring to the anchor date in quarterly or annual formulas. Without the dollar signs, copying formulas across columns shifts the reference and breaks the date sequence.

Example 4: SUMIFS with EOMONTH for Monthly Totals

EOMONTH works well inside SUMIFS to sum all transactions within a calendar month. You use it to define the upper boundary of the date range. This approach works even when transactions are spread across a full data table with irregular dates.

4
Sum all sales within a specific calendar month from a transaction table
A — Date
B — Amount
E — Month (anchor)
F — Monthly total
05-Jan-2026
$1,200
01-Jan-2026
$5,840
18-Jan-2026
$2,400
01-Feb-2026
$3,120
03-Feb-2026
$3,120
E2 contains the first day of the target month (e.g. 01-Jan-2026). Sum all amounts in column B where the date falls within that month: =SUMIFS(B:B, A:A, ">="&E2, A:A, "<="&=EOMONTH(E2, 0)) Count transactions in the month: =COUNTIFS(A:A, ">="&E2, A:A, "<="&=EOMONTH(E2, 0)) Average order value in the month: =AVERAGEIFS(B:B, A:A, ">="&E2, A:A, "<="&=EOMONTH(E2, 0))
The SUMIFS formula captures all dates from the first day of the month to the last. EOMONTH(E2, 0) automatically returns 31-Jan, 28-Feb, or 31-Mar depending on the month. You do not need to hardcode the end date for each month.

Example 5: Working Days Remaining in the Month

Combine EOMONTH with NETWORKDAYS to find how many working days remain in the current month. This is useful for capacity planning, sprint tracking, and daily sales targets. The result updates automatically every day.

5
Calculate working days remaining and daily targets from today
Working days remaining in the current month (from today): =NETWORKDAYS(TODAY(), =EOMONTH(TODAY(), 0)) With public holidays excluded: =NETWORKDAYS(TODAY(), =EOMONTH(TODAY(), 0), $H$2:$H$30) Total working days in the full current month: =NETWORKDAYS(=EOMONTH(TODAY(), -1)+1, =EOMONTH(TODAY(), 0)) Daily sales target — total monthly target divided by remaining working days: E1 = monthly revenue target, B2 = revenue achieved so far =(E1 - B2) / NETWORKDAYS(TODAY(), =EOMONTH(TODAY(), 0)) Calendar days remaining in the current month: =EOMONTH(TODAY(), 0) - TODAY()
Build a daily run-rate tracker: Place the NETWORKDAYS formula in a dashboard header cell. Divide your outstanding target by that number each day to get a dynamic daily run-rate. The denominator shrinks automatically as the month progresses, keeping the target accurate.

Example 6: EOMONTH vs EDATE — Which One Should You Use?

EOMONTH and EDATE both move a date by a number of months. However, they return different results. EDATE preserves the original day of the month. EOMONTH always lands on the last day of the target month. The choice depends on your business rule.

6
When to use EOMONTH versus EDATE for date calculations
Start date
+ months
EDATE
EOMONTH
Difference
15-Jan-2026
1
15-Feb-2026
28-Feb-2026
13 days
31-Jan-2026
1
28-Feb-2026
28-Feb-2026
Same
01-Jan-2026
0
01-Jan-2026
31-Jan-2026
30 days
EDATE — preserves day of month. Use for renewals, anniversaries, subscriptions: =EDATE(A2, 1) 15-Jan-2026 → 15-Feb-2026 (day 15 preserved) EOMONTH — always returns last day. Use for period ends, billing, reports: =EOMONTH(A2, 1) 15-Jan-2026 → 28-Feb-2026 (last day of February) When start date is already the last day, results often match: 31-Jan-2026 + 1 month via EDATE → 28-Feb-2026 31-Jan-2026 + 1 month via EOMONTH → 28-Feb-2026 (same)
Simple rule: Use EOMONTH when the result must be the last day of a month — billing periods, financial statements, period headers. Use EDATE when the result must fall on the same day of the month — renewals, payment schedules, anniversary dates.

How to Fix Common EOMONTH Errors

Result shows a number instead of a date

EOMONTH returns a serial number. Press Ctrl+1 and choose Date from the Number tab. Alternatively, use =TEXT(EOMONTH(A2,0), "DD-MMM-YYYY") to display the result as formatted text.

#VALUE! error

The start_date argument is not a valid date. Dates entered as plain text often cause this error. Check the cell with =ISNUMBER(A2). Real dates return TRUE. If A2 returns FALSE, the cell holds text. Re-enter the date properly, or use DATEVALUE() to convert a text date to a real one.

#NUM! error

The months argument produces a date that is out of Excel's valid date range (before 1 January 1900 or beyond 31 December 9999). Check the months value and confirm it produces a valid calendar date.

Decimals are truncated: EOMONTH ignores any decimal part of the months argument. EOMONTH(A2, 1.9) behaves the same as EOMONTH(A2, 1). Always pass a whole number for the months argument.

Frequently Asked Questions About EOMONTH

  • What does the EOMONTH function do in Excel?+
    EOMONTH returns the last day of a month. You provide a start date and a number of months to move forward or backward. The function always returns the final day of the target month, regardless of what day the start date falls on. Use it for billing cut-offs, period-end dates, financial model headers, and any calculation that must land on the last day of a month.
  • What does EOMONTH with 0 months return?+
    EOMONTH(A2, 0) returns the last day of the same month as the date in A2. For example, EOMONTH on any date in March 2026 with 0 months returns 31-Mar-2026. Use 0 when you want the end of the current month rather than a future or past month. Combined with TODAY(), it gives you a dynamic last-day-of-this-month value that updates automatically.
  • How do I get the first day of a month with EOMONTH?+
    Add 1 to the end of the previous month: =EOMONTH(A2, -1) + 1. This gives the first day of the same month as A2. For example, if A2 is any date in March 2026, the formula returns 01-Mar-2026. This is more reliable than DATE(YEAR(A2), MONTH(A2), 1) for dynamic date ranges because it handles year rollovers cleanly.
  • What is the difference between EOMONTH and EDATE?+
    Both functions move a date by a number of months. EDATE preserves the original day of the month — adding 1 month to the 15th returns the 15th of the next month. EOMONTH always returns the last day of the target month regardless of the start day. Use EDATE for renewals and subscriptions. Use EOMONTH for billing periods and financial reporting.
  • How do I use EOMONTH to sum values in a month?+
    Use EOMONTH inside a SUMIFS formula to define the upper date boundary. Set the first condition to >= the first day of the month, and the second to <= EOMONTH(anchor_date, 0). This captures all transactions within that calendar month without hardcoding month-end dates. The same pattern works for COUNTIFS and AVERAGEIFS.
  • Which Excel versions support EOMONTH?+
    EOMONTH works in all Excel versions from Excel 2007 onwards. This includes Excel 2010, 2013, 2016, 2019, 2021, 2024, and Microsoft 365 on both Windows and Mac. It is also available in Excel for the web. In Excel 2003 and earlier, EOMONTH required the Analysis ToolPak add-in to be enabled first.