Excelで万年カレンダーを作成しておくと、年と月を入力するだけで日付や曜日が自動更新されるため、予定表、勤怠表、家族の行事管理などに便利です。
手入力で日付を並べる方法では、年が変わるたびに修正が必要になり、うるう年や月初の曜日を間違える可能性もあります。
一方で、DATE関数、WEEKDAY関数、EOMONTH関数などを組み合わせれば、月の初日から月末までを自動計算する万年カレンダーを作成できます。
万年カレンダー作成の基本ポイント
・年と月を入力するセルを用意する
・DATE関数で対象月の初日を作る
・WEEKDAY関数で曜日に応じた開始位置を決める
・前月末や翌月の日付を空白表示にする
この記事では、関数だけで作れる月間カレンダーのテンプレート構成、数式の意味、見やすく仕上げる設定まで順番に解説します。
VBAを使わないため、マクロを有効にできない環境でも扱いやすい方法です。
エクセルで万年カレンダーを関数で作る方法【年と月の入力セルから自動表示】
| セル | 入力内容 | 役割 |
|---|---|---|
| B2 | 2026 | 表示する年 |
| D2 | 9 | 表示する月 |
| B4 | =DATE(B2,D2,1) | 対象月の1日 |
それではまず、年と月を変更するだけでカレンダー全体が切り替わる基本構成について解説していきます。
最初に結論をいうと、年をB2セル、月をD2セルに入力し、日付の基準となるセルへDATE関数を設定すれば、関数だけで万年カレンダーの土台を作れます。
カレンダーのすべての日付を直接入力しないことが、長く使えるテンプレートにする重要な考え方です。
年と月を入力するセルの配置
年と月の入力欄は、カレンダーの上部に分かりやすく配置します。
ここではB2セルに年、D2セルに月を入力する前提で進めます。
B2セルへ2026、D2セルへ9のように数字だけを入力すると、後の数式で2026年9月として利用できます。
月を毎回数字で入力する方法はシンプルですが、誤入力を防ぎたい場合は入力規則を使って1から12のリストを表示する方法も便利です。
年の入力欄には西暦4桁を入力します。
月の入力欄には1から12までの整数を入力します。
月を09のように入力しても数値として認識されますが、数式上は9として扱われます。
年と月のセルを淡い黄色などで塗りつぶしておくと、利用者が変更してよい場所をすぐに判断できます。
予定を書き込むカレンダーを他の人へ配布する場合にも、入力セルの色分けは有効です。
DATE関数で対象月の初日を作る設定
次に、カレンダー計算の基準となる対象月の初日をB4セルへ作成します。
B4セルには次の数式を入力します。
=DATE($B$2,$D$2,1)
DATE関数は、年、月、日を指定してExcelの日付データを作る関数です。
この式ではB2セルの年、D2セルの月、そして日付の1を組み合わせて、その月の1日を返します。
たとえばB2が2026、D2が9なら、結果は2026年9月1日です。
DATE関数の結果は文字列ではなく、計算に利用できる本物の日付データになります。
セルに2026年9月1日と表示されない場合は、セルの書式設定で日付表示を選択してください。
基準日セルは後で曜日計算や前月末計算にも使うため、見た目よりも計算の中心として重要です。

曜日見出しとカレンダー枠の準備
基準日を設定したら、B6からH6までに日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日の見出しを並べます。
日曜始まりのカレンダーでは、左端のB列を日曜日、右端のH列を土曜日にすると一般的な月間カレンダーに近い見た目になります。
日付を表示する範囲はB7からH12までの6行7列にします。
月によっては5週で収まりますが、月初の曜日と月の日数の組み合わせによっては6週必要です。
そのため、最初から6行分の枠を作ると、どの月でもレイアウトが崩れません。
土曜日の見出しを青、日曜日の見出しを赤にすると、曜日を見分けやすくなります。
【操作のポイント】入力セル、曜日見出し、日付欄を離しすぎず、ひとつの画面で見渡せる範囲に収めると使いやすくなります。
月初の曜日に合わせて日付を並べる数式
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 31 | 1 | 2 | 3 | 4 | 5 | |
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
続いては、月初の曜日を基準にして、日付を正しい位置へ並べる数式を確認していきます。
日曜始まりのカレンダーでは、対象月の1日が何曜日かによって、最初の日付を表示するセルが変わります。
このずれを計算するためにWEEKDAY関数を使います。
WEEKDAY関数による開始日の計算
B7セルには、対象月の1日より前の日曜日を求める数式を入力します。
=$B$4-WEEKDAY($B$4,1)+1
WEEKDAY関数の第2引数を1にすると、日曜日が1、月曜日が2、土曜日が7として返されます。
たとえば対象月の1日が火曜日なら、WEEKDAYの結果は3です。
基準日から3を引いて1を足すことで、その週の日曜日まで戻れます。
B7セルには当月の日付ではなく、その週の先頭となる日曜日を入れることがポイントです。
前月の日付も含めて連続した日付を作るため、後から空白表示や薄い文字色を設定しやすくなります。
ROW関数とCOLUMN関数を使う連続日付
B7セルの数式を基準に、カレンダーの全セルへ連続した日付を表示するには、ROW関数とCOLUMN関数を使う方法があります。
B7セルへ次の数式を入力してください。
=$B$4-WEEKDAY($B$4,1)+ROW(A1)-1+COLUMN(A1)-1
ROW(A1)は1を返し、下方向へコピーするとROW(A2)、ROW(A3)となって2、3へ変化します。
COLUMN(A1)も同様に、右方向へコピーするとCOLUMN(B1)、COLUMN(C1)となり、2、3へ変化します。
この仕組みにより、右へ1列移動するごとに日付が1日進み、下へ1行移動しても7日進む構成になります。
数式をB7セルへ入力したら、H12セルまでオートフィルでコピーしましょう。
数式内の$B$4は絶対参照なので、コピー後も対象月の初日を参照し続けます。
一方でROWとCOLUMNの参照は相対的に変わるため、位置に応じた連番が作られます。

オートフィルと表示形式の設定
日付が連続して表示されたら、B7からH12の範囲を選択し、セルの書式設定を開きます。
表示形式をユーザー定義にしてdと入力すると、セルには日だけが表示されます。
日付データそのものは年月日を保持したままなので、曜日判定、祝日の照合、条件付き書式にも使えます。
数値の1から31を手入力するよりも、後から拡張しやすい点がメリットです。
表示形式の例
d は日だけを表示します。
m/d は月日を表示します。
aaa は曜日を表示します。
オートフィルの際には、最初の数式セルを選択し、右下に表示される小さな四角をH12までドラッグします。
数式をコピーした後、年や月の入力セルを変更して、日付位置が正しく変わることを確認しましょう。
【操作のポイント】最初のセルだけに数式を入力してからオートフィルを使うと、参照のずれを確認しながら安全に作業できます。
前月と翌月の日付を空白にするIF関数
| B7の内部値 | 対象月 | 画面の表示 |
|---|---|---|
| 2026年8月31日 | 2026年9月 | 空白 |
| 2026年9月1日 | 2026年9月 | 1 |
| 2026年10月1日 | 2026年9月 | 空白 |
続いては、カレンダー枠に含まれる前月と翌月の日付を空白にする方法を確認していきます。
連続日付の数式では前後の月の日付も表示されますが、月間予定表では当月の日付だけを見せたい場面があります。
この場合はIF関数とMONTH関数を組み合わせます。
MONTH関数で当月かどうかを判定する設定
B7セルに表示する数式は、次のように変更できます。
=IF(MONTH($B$4-WEEKDAY($B$4,1)+ROW(A1)-1+COLUMN(A1)-1)=$D$2,$B$4-WEEKDAY($B$4,1)+ROW(A1)-1+COLUMN(A1)-1,””)
MONTH関数は日付から月だけを取り出す関数です。
連続日付の計算結果の月がD2セルの月と一致したときだけ、日付を表示します。
一致しない場合は、ダブルクォーテーション2つで指定した空白を返します。
前月と翌月のセルを本当に削除するのではなく、表示だけを空白にする方法です。
このため、カレンダーの枠は毎月同じ大きさのまま保たれます。
日だけを返す短い数式への変更
表示形式を設定する代わりに、数式側で日だけを返すことも可能です。
予定入力などでセルが日付データのまま必要な場合は、前の方法を選ぶほうが扱いやすいでしょう。
見た目だけを重視し、日付としての計算をしない簡易テンプレートなら、DAY関数を追加する方法があります。
=IF(MONTH(日付計算式)=$D$2,DAY(日付計算式),””)
DAY関数は日付から日だけを取り出します。
ただし、この方法で表示された1から31は単なる数値となるため、曜日や祝日を別の数式で判断したい場合には不向きです。
実務用のカレンダーでは、セルの内部値を日付のまま保持し、表示形式でdを使う構成がおすすめです。

EOMONTH関数を使った月末日の確認
月末日を確認したいときにはEOMONTH関数が便利です。
対象月の月末日は、次の数式で求められます。
=EOMONTH($B$4,0)
第2引数に0を指定すると、基準日と同じ月の最終日が返されます。
第2引数を1にすると翌月末、マイナス1にすると前月末を取得できます。
2月の日数やうるう年もExcelが自動判定するため、月末日を手作業で設定する必要はありません。
EOMONTH関数を使えば、28日、29日、30日、31日の違いを意識せずに月末を計算できます。
当月の日付だけに色を付ける条件付き書式を作る場合にも、月末日の計算は役立ちます。
【操作のポイント】空白にしたセルもカレンダーの罫線は残るため、日付が少ない月でも整ったレイアウトを維持できます。
曜日と祝日を見やすくする条件付き書式
| 対象 | 判定用の数式 | おすすめの書式 |
|---|---|---|
| 日曜日 | =WEEKDAY(B7,1)=1 | 文字色を赤 |
| 土曜日 | =WEEKDAY(B7,1)=7 | 文字色を青 |
| 祝日 | =COUNTIF($J$2:$J$30,B7)>0 | 文字色を赤 |
続いては、土日や祝日を色分けし、予定表として見やすくする設定を確認していきます。
条件付き書式を利用すると、年と月を変更したときにも曜日に応じた色が自動更新されます。
手作業で土日を塗り直す必要がなくなるため、万年カレンダーとの相性がよい機能です。
日曜日と土曜日を自動で色分けする設定
まずB7からH12までの日付範囲を選択します。
ホームタブの条件付き書式から新しいルールを選び、数式を使用して書式設定するセルを決定を選択します。
日曜日用の数式には、次の式を入力します。
=WEEKDAY(B7,1)=1
書式ボタンからフォントの色を赤に設定すると、日曜日の日付が自動的に赤く表示されます。
土曜日用には、次の数式を別のルールとして登録します。
=WEEKDAY(B7,1)=7
こちらはフォントを青にすると、一般的なカレンダーと同じ感覚で確認できます。
条件付き書式の数式では、先頭セルのB7を基準に入力することが大切です。
適用先をB7からH12にしておけば、Excelが各セルに合わせて参照を自動調整します。
祝日一覧を参照するCOUNTIF関数
祝日も色分けしたい場合は、別の場所に祝日の一覧を用意します。
たとえばJ列のJ2からJ30へ、2026年1月1日、2026年1月12日のように実際の日付データで祝日を入力します。
カレンダー範囲へ適用する条件付き書式の数式は、次のようになります。
=COUNTIF($J$2:$J$30,B7)>0
COUNTIF関数は、祝日一覧の中にカレンダーセルと同じ日付があるかどうかを数えます。
結果が0より大きければ、その日付は祝日です。
祝日用のルールを日曜日用のルールより上に配置すると、日曜日と重なった祝日にも優先して指定した書式を適用できます。
祝日一覧は文字列ではなく日付形式で入力すると、COUNTIF関数の判定が安定します。
当月以外の日付を薄く表示する設定
前月と翌月の日付を空白にせず、薄いグレーで残すデザインもあります。
この場合は、表示用のIF関数を使わずに連続日付をそのまま配置します。
そのうえで、対象月と異なる日付を判定する条件付き書式を設定します。
=MONTH(B7)<>$D$2
不等号を使ったこの式は、B7セルの日付の月がD2セルの月と異なる場合に真となります。
書式ではフォント色を薄いグレーにすると、当月と前後月を自然に区別できます。
前後月の日付を残すと、月初と月末の曜日のつながりを把握しやすくなります。
【操作のポイント】条件付き書式は作成後に適用先を確認し、見出し行まで含めないように設定します。
予定入力と印刷に対応するテンプレート設定
| 設定項目 | おすすめの内容 | 効果 |
|---|---|---|
| 行の高さ | 60から90程度 | 予定を書き込みやすい |
| 配置 | 上詰め、左揃え | 複数行の予定を見やすく表示 |
| 印刷範囲 | B1からH12 | 月間ページとして印刷 |
続いては、作成したカレンダーを予定表や印刷用テンプレートとして使いやすくする設定を確認していきます。
日付だけを表示するカレンダーでも役立ちますが、行の高さや文字の配置を整えると実用性が大きく向上します。
日付セルへ予定を書き込むレイアウト
日付セルに予定も入力したい場合は、B7からH12の行の高さを広げます。
行番号を右クリックして行の高さを選び、60から90程度に設定すると、日付の下へ予定を記入できるスペースが生まれます。
日付を数式で表示しているセルへ直接予定を入力すると、数式が消えるため注意が必要です。
予定欄を作る場合は、日付行の下に予定用の行を追加する構成が安全です。
たとえば日付をB7からH12に表示する代わりに、1週あたり2行または3行を使い、上段を日付、下段を予定欄にする方法があります。
数式セルと手入力セルを分けることで、月を切り替えたときに予定が消える事故を防げます。
家庭用なら予定欄へ文字を入力し、業務用なら担当者名や会議名などの記載欄として活用できます。
タイトル表示をTEXT関数で自動化する方法
カレンダー上部に表示する年月タイトルも、年と月の入力セルから自動表示できます。
B4セルに対象月の初日がある場合は、B1セルなどに次の数式を入力します。
=TEXT($B$4,”yyyy年m月”)
TEXT関数は、日付や数値を指定した書式の文字列へ変換する関数です。
この式では2026年9月1日という日付から、2026年9月というタイトルを表示します。
セルをB1からH1まで結合し、中央揃えと太字を設定すると、カレンダーらしい見出しになります。
年月タイトルにもDATE関数の基準日を参照させると、年と月の変更漏れが起こりません。
セルの結合を避けたい場合は、選択範囲内で中央を使う方法もあります。
印刷範囲とページ設定の調整
印刷用の月間カレンダーにするには、ページレイアウトタブから印刷範囲を設定します。
タイトル、曜日見出し、日付欄を含む範囲を選択して、印刷範囲の設定を実行します。
次に、印刷の向きを横、拡大縮小を横1ページ、縦1ページに設定すると、A4用紙へ収めやすくなります。
余白は狭いまたはユーザー設定を選び、カレンダーが中央に寄るように調整しましょう。
印刷プレビューを確認し、文字が小さすぎる場合は列幅や行の高さを見直します。
画面上で整って見えても、印刷プレビューでは余白や改ページが異なる場合があります。
【操作のポイント】テンプレートを完成させたら、年と月の入力セル以外をシート保護すると数式を誤って消しにくくなります。
まとめ エクセルの万年カレンダーを関数で作る方法
Excelの万年カレンダーは、DATE関数で対象月の初日を作り、WEEKDAY関数で月初の曜日を求めることで作成できます。
日付欄にはROW関数とCOLUMN関数を組み合わせた数式を入力し、オートフィルで6行7列へコピーすると、曜日に合わせた連続日付が完成します。
前月や翌月の日付を見せたくない場合はIF関数とMONTH関数を使い、当月だけを表示できます。
うるう年や月末の日数の違いは、DATE関数とEOMONTH関数を使えば自動で処理されます。
土日や祝日は条件付き書式で色分けし、予定入力欄や印刷範囲を整えると、毎月繰り返し使える実用的なテンプレートになります。
まずは年、月、基準日の3つのセルを作り、日付の数式を一つ完成させてからオートフィルで広げてみましょう。