シート実務ラボ

Excel・スプレッドシートの「動かして確かめた」実務ガイド

ホーム > エクセルで年と月から日付と曜日を出す方法(DATE・EOMONTH・曜日表示)【LibreOfficeで計算して確認】

2026-10-14 ・ Excel関数

エクセルで年と月から日付と曜日を出す方法(DATE・EOMONTH・曜日表示)【LibreOfficeで計算して確認】

月が変わるたびに、シフト表の日付と曜日を手で打ち直していないでしょうか。この記事では、年と月を入れるだけで、その月の日付と曜日を自動で出す式を、実際に計算して確かめた結果だけで紹介します。

出典: 筆者がLibreOfficeで計算して確認(検証スクリプト: site/verify/date_weekday.py)。外部サイトの説明は参照していません。Excelでは未確認です。使うのは基本的な関数ですが、本番の表に使う前に、何か月分かで結果を確かめてください。

先に結論

日付を並べる式

C2に1日目を入れ、D2以降は1日ずつ足します。

C2: =DATE($A$2,$B$2,1)
D2: =IF(C2="","",IF(MONTH(C2+1)=$B$2,C2+1,""))

D2の式は、「前のセルが空欄なら空欄」「翌日がまだ同じ月なら翌日」「月が変わったら空欄」と判断します。D2をそのまま右へ31日分コピーすれば、30日の月は31日目が、2月は29〜31日目が空欄になります。

実際に計算した結果

次の10か月で、1日・月末日・日数・曜日・15日・31日目を計算しました(月末日の表の日付は、書式を「日付」にした場合の表示です)。

年月 月末日 日数 1日の曜日 末日の曜日 31日目
2024年2月 2024-02-29 29 木 木 (空)
2023年2月 2023-02-28 28 水 火 (空)
2026年10月 2026-10-31 31 木 土 2026-10-31
2026年12月 2026-12-31 31 火 木 2026-12-31
2025年1月 2025-01-31 31 水 金 2025-01-31
2100年2月 2100-02-28 28 月 日 (空)
2000年2月 2000-02-29 29 火 火 (空)
2026年4月 2026-04-30 30 水 木 (空)
2027年3月 2027-03-31 31 月 水 2027-03-31
2028年2月 2028-02-29 29 火 火 (空)

10か月×7項目の70件すべて、Pythonの標準ライブラリで求めた期待値と一致しました。ポイントは次の3つです。

曜日を出す2つの方法

曜日の出し方は2つあります。

方法1(文字として出す): =CHOOSE(WEEKDAY(C2),"日","月","火","水","木","金","土")
方法2(表示だけ変える): 日付のセルの書式を「aaa」にする

方法1は、結果が文字なので、あとから =IF(C3="土",...) のように曜日で判定できます。方法2は、セルの中身は日付のままで、見た目だけ曜日になります。今回の検証で確かめたのは方法1の式です。方法2の書式「aaa」は、この記事では検証していません。

注意点: この式ができないこと

シフト表のひな形が必要なら

この記事の式は、自分で作った表にそのまま使えます。年月を入れるだけで日付と曜日が自動で入るひな形を探しているなら、運営者が作った月間シフト表(Excelテンプレート・500円)があります。A4横1枚で印刷でき、15人まで入ります。ただし、祝日の判定は入っていません。Excelの確認はWindowsデスクトップ版16のみです。この記事の方法で足りる場合は、買う必要はありません。

関連して、日数の差や勤務時間を計算したいときは、無料の勤務時間の計算ツールも使えます(入力は外部に送信されません)。出勤人数を数える方法はシフト表で日ごとの出勤人数を数える方法にまとめています。

まとめ

確認方法: この記事の式は、LibreOffice Calcで実際に再計算し、うるう年・平年の2月、100年の例外(2100年2月)、30日の月、31日の月を含む10か月について、1日、月末日、日数、1日と末日の曜日、15日、31日目(月に無ければ空)の計70件が、Pythonの標準ライブラリで求めた期待値と一致することを検証スクリプト(site/verify/date_weekday.py)で確認しました。使った関数はDATE、EOMONTH、DAY、WEEKDAY、CHOOSE、IFで、Excelにもある関数ですが、Excelでは未確認です。外部サイトの記述は参照していません。

参考にした情報