- EOMONTH関数を使う方法やDATE関数を使う方法で、月末や月初の日付を求めることができます。
月末の日付を求める方法
日付から求める場合
画像ではB3セルに日付が入力されています。
そこでD3セルに式を入力し、その日付が属する月の月末の日付を求めています。
D3セル
=EOMONTH(B3,0)
EOMONTH関数はそのものズバリ、日付からその月の末日を求める関数です。
ただし第2引数(○か月後)を省略できず、その月の末日を求める場合も「0」を指定する必要があります。
なお、EOMONTHを使った場合にセルの表示形式が「標準」だと(自動的に変わらないので)「45260」のように数値が表示されると思います。その場合は表示形式を日付に変更してください(下記参照)。
「=EOMONTH(B3,1)」とすれば翌月の末日を求められます。また、「=EOMONTH(B3,-1)」なら前月末の日付が求められます。
次の画像はもう1つの方法です。DATE関数等を使って月末の日付を求めています。
D3セル
=DATE(YEAR(B3),MONTH(B3)+1,0)
DATE関数は年,月,日の3つの値から日付を生成する関数です。
月を「MONTH(B3)+1」、日を「0」と指定しているところがポイントで、単純にみると「翌月の0日」を求めているように思えますが、これは結果的にその月の末日となります。
式はちょっと長くなりますが、昔からのユーザにはこの形に慣れている方も多いと思います。結果が数値にならない(自動的に日付形式に変更される)のもDATE関数のメリットです。
次の画像は、式はそのままで日付を12月の日付に変えたところです。
「MONTH(B3)+1」の値が13になりますが、このように翌年にまたがるような計算でも正しい日付が得られます。
年,月の値から求める場合
年と月の値が数値で指定されているパターンです。
まずはEOMONTH関数を使う方法です。
E3セル
=EOMONTH(B3&"/"&C3,0)
「B3&"/"&C3」はこの場合「2023/11」という文字列になります。
これは日付(2023/11/1)とみなされるのでEOMONTH関数の第1引数として使うことができます。
文字列に「日」が含まれてないと気持ち悪いかもしれませんが、その場合はこの部分を「B3&"/"&C3&"/1"」とすればOKです。
次にDATE関数を使う方法です。
E3セル
=DATE(B3,C3+1,0)
与えられた年月の翌月0日、つまり当月末日を求めるという式です。
日付が与えられる例ではEOMONTH関数の方が簡単でしたが年,月の値が与えられる場合はこちらの方が簡単な式になります。
今月末の日付を求める場合
EOMONTH関数の第1引数を「TODAY()」つまり今日の日付を表す関数にすれば、今月末日の日付が取得できます。
画像はもちろん2023年11月に実行した結果です(以下同様)。
B3セル
=EOMONTH(TODAY(),0)
「TODAY()」を「NOW()」に代えても同じ結果になります(以下の例でも同様)。
DATE関数を使う場合は次のようになります。
B3セル
=DATE(YEAR(TODAY()),MONTH(TODAY())+1,0)
月初の日付を求める方法
日付から求める場合
日付が与えられていて、その日が属する月の初日(1日)の日付を求めるパターンです。
まずはEOMONTH関数を使う方法です。
D3セル
=EOMONTH(B3,-1)+1
「EOMONTH(B3,-1)」で日付の「前月の末日」が求められますので、それに1を足すことで「当月の初日」が求められます。
続いてDATE関数を使う方法です。
D3セル
=DATE(YEAR(B3),MONTH(B3),1)
YEAR関数とMONTH関数を使って年と月の値を取得し、DATE関数の引数としています。あとは日を「1」とすれば初日が求められます。
年,月の値から求める場合
年と月の値が数値で指定されているパターンです。
まずはEOMONTH関数を使う方法です。
E3セル
=EOMONTH(B3&"/"&C3,-1)+1
「B3&"/"&C3」は「2023/11」という文字列となり、これは「2023/11/1」という日付とみなされます。
これをEOMONTH関数の第1引数とし、第2引数を「-1」とすることで前月末日を求め、最後に1を足して当月初日を求めています。
DATE関数を使う場合は次のようになります。
E3セル
=DATE(B3,C3,1)
年,月の値が与えられているのでそのままDATE関数に使えます。あとは日を「1」にすれば初日が求められます。
今月初めの日付を求める場合
まずはTODAY関数を使う方法です。
B3セル
=EOMONTH(TODAY(),-1)+1
上記の例と同様にEOMONTH関数で前月末日を求め、最後に1(日)を足すというアプローチです。
続いてDATE関数を使う方法です。
B3セル
=DATE(YEAR(TODAY()),MONTH(TODAY()),1)
全体的にDATE関数を使う方が式が長くなりますが許容範囲かと思います。また、末日を求める場合はEOMONTH関数を使う方が意味が分かりやすいですが、初日を求める場合はDATE関数の方がわかりやすいかと思います。
結果が数値になる場合
上記でも触れていますがEOMONTH関数を使った場合に結果が数値で表示されることと思います。
その場合はセルを右クリックして「セルの書式設定」を選択し、表示形式を日付形式に変更してください。
平日を求める場合
ちょっとした応用ですが、月の最初や最後の平日を求める例について次の記事で紹介しています。