Excelでカレンダーを自動作成する方法を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
・月初が何曜日かで、日付の並びがズレてしまう
・土日の色分けを毎回やり直している
ですよね。
今回はそんなお悩みを解決する
・年月を変えるだけで自動更新されるカレンダーの作り方
についてまとめます!
完成イメージ
カレンダーを手で作ると、月初の曜日が変わるたびに日付を並べ直す必要があり、修正ミスも起きやすくなります。
今回は
・年月を入れるだけで自動で並ぶカレンダーを、関数だけで作る方法
をゴールにします。
B1セルに年、C1セルに月を入れるだけで、日付の並びが自動で組み替わります。
月以外の日付は薄いグレー、日曜は赤、土曜は青で見分けられるようにします。

上の画像が完成形です。B1に年、C1に月を入れるだけで日付が自動で並び、月外の日付はグレー、日曜は赤、土曜は青で表示されます。
なお、毎回数式を入れるのが手間な方向けにVBAで日付を一括セットする方法と、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
もくじ
STEP1. 入力セルとカレンダーの枠を用意する
まずはカレンダーの土台を作ります。
1行目に「対象年月」の入力セル、3行目に曜日の見出し、4〜9行目に6週分の日付枠を用意します。
B1セルに年、C1セルに月を入れる形にします。
ここではB1に 2026、C1に 5 を入れておきます。
どちらも数値で入力し、表示だけ「年」「月」を付けておくと分かりやすいです。
曜日の見出しは日〜土の7列を手入力します。
この見出しは固定なので、あとから書き換える必要はありません。
枠に罫線を引いておくと、日付が入ったときに見やすくなります。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| 対象年月 | 2026 | 6 | ||||
|---|---|---|---|---|---|---|
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
STEP2. 月初の日付を曜日に合わせて配置する
カレンダーの先頭セル(A4)に、その月の最初のマスに入る日付を入れます。
A4セルに次の数式を入力します。
=DATE($B$1,$C$1,1)-WEEKDAY(DATE($B$1,$C$1,1))+1
DATE($B$1,$C$1,1) でその月の1日を作り、WEEKDAY で「1日が何曜日か」を調べます。
そこから曜日の分だけ戻すことで、A4には必ず「その週の日曜日」の日付が入ります。
2026年5月なら、1日は金曜日なのでA4には4月26日(日曜)が入ります。
この1つの式が、カレンダー全体の起点になります。
どのセルにどの数式を入れるか、実際の画面で確認しましょう。

STEP3. 残りのマスを「+1」で埋める
先頭が決まったら、残りは1つ左のセルに1を足すだけで埋められます。
B4セルに =A4+1 と入力します。
同じように、B列〜G列は「左隣のセル+1」、次の行のA列は「前の行のG列+1」と数式をつなげていきます。
すると、前後の月の日付まで含めて、日付が連続して並びます。
1つの式をコピーするだけで6週分が埋まるので、カンタンですね。

STEP4. その月以外の日付を目立たなくする
STEP3までのままだと、前後の月の日付も同じ濃さで並んでしまいます。
ここではその月以外の日付を薄くして、目立たなくします。
実際のExcelでは、次の手順で設定します。
範囲 A4:G9 を選択し、ホーム タブ → 条件付き書式 → 新しいルール をクリックします。
「数式を使用して、書式設定するセルを決定する」を選び、数式に =MONTH(A4)<>$C$1 と入力します。
書式ボタンから文字色を薄いグレーに設定してOKを押します。
すると、選択した月以外の日付だけが自動で薄くなります。
なお下の画像は、条件付き書式の見た目をセルの背景色(薄いグレー)で等価再現したものです。

STEP5. 土曜と日曜を色分けする
次に、土曜と日曜を見分けやすくします。
これも条件付き書式で設定できます。
範囲 A4:G9 を選び、日曜用のルールで数式 =WEEKDAY(A4)=1、書式の文字色を赤にします。
同じ範囲にもう1つルールを追加し、数式 =WEEKDAY(A4)=7、書式の文字色を青にします。
2つのルールを同じ範囲に設定するのがポイントです。
なお下の画像は、その見た目を日曜列は赤系・土曜列は青系の背景色で等価再現したものです。

STEP6. 年月を変えて自動更新を確かめる
ここまでできたら、C1セルの月を変えるだけでカレンダーが組み替わるか確かめます。
C1セルを 6 に変えてみましょう。
日付の並びが6月用に切り替わり、月初の位置も自動で調整されました。
年を変えたいときはB1セルを書き換えるだけです。
数式が連動しているので、手直しは一切いりません。
毎月の作り直しから解放されるのはうれしいですね。

3つの作り方の比較
カレンダーの作り方は、今回の関数のほかにも「テンプレート」と「VBA」があります。
それぞれの特徴を表にまとめました。
| 作り方 | 手順 | 長所 | 短所 |
|---|---|---|---|
| 関数で作る(今回) | DATE・WEEKDAYで先頭を決め、+1で埋める | 年月を変えるだけで自動更新。追加ソフト不要 | 数式の意味を覚える必要がある |
| テンプレートを使う | Excelの「テンプレート」からカレンダーを検索して開く | 開くだけで使える。デザインが整っている | 年月の切り替えが1か月単位。レイアウトが固定 |
| VBAで作る | マクロで日付を一括セット、または1年分のシートを作成 | 大量の月をまとめて作れる。値を直接入れられる | マクロ有効ブック(.xlsm)が必要。コードの管理が要る |
「1枚のカレンダーを毎月使いたい」なら関数がおすすめです。
年月を変えるだけで自動で並び替わるので、テンプレートを探し直す手間がありません。
「1年分をまとめて作りたい」「値をきっちり入れたい」ときはVBAを選ぶとよいですよ。
VBAで日付を一括セットする
カレンダーの日付をVBAで一括セットすることもできます。
数式を入れたくない場合や、値を確定させたい場合に便利です。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。
Sub SetCalendar()
Dim y As Long, m As Long
Dim first As Date, i As Long
Dim r As Long, c As Long
y = Range("B1").Value
m = Range("C1").Value
first = DateSerial(y, m, 1) - Weekday(DateSerial(y, m, 1)) + 1
i = 0
For r = 4 To 9
For c = 1 To 7
Cells(r, c).Value = first + i
i = i + 1
Next c
Next r
End Sub
実行すると、A4セルからG9セルまでに日付が一気に入ります。
DateSerial(y, m, 1) でその月の1日を作り、Weekday で曜日の分だけ戻すのは、関数のときと同じ考え方です。
あとは二重ループで、6週×7日のマスに順番に日付を入れています。
ただし値を入れると、年月を変えても自動更新はされません。
「自動更新したいなら関数」「値をきっちり入れたいならVBA」と覚えておくとよいですよ。
うまくいかないときの対処法(トラブルシュート)
実際に作ってみると、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| 月初がズレる(1日が別の曜日の位置になる) | WEEKDAYの基準(週の始まり)が日曜以外になっている | WEEKDAYの引数を省略するか、=WEEKDAY(日付,1) として日曜始まりにする |
| 月末の後に余分な日付が並ぶ | 6週分の枠に翌月の日付まで入っている | 仕様です。目立たせないなら条件付き書式で =MONTH(セル)<>$C$1 を設定する |
| 曜日と日付が合わない | 先頭のマスが日曜になっていない | A4が日曜か確認する。曜日見出しの並びと先頭の数式を見直す |
| 日付が数値(シリアル値)で表示される | 表示形式が「標準」のままになっている | セルを選び、表示形式を「日」(ユーザー定義で d)に変える |
| #VALUE! エラーが出る | B1やC1に数字以外(「5月」など)が入っている | B1は年、C1は月の数値だけを入れる |
関数の説明
今回使う関数の概要です。
どれも日付を扱う基本の関数なので、違いを押さえておきましょう。
DATE関数(デイト)
| 書式 | =DATE(年, 月, 日) |
|---|---|
| できること | 年・月・日を指定して日付を作ります。 |
| 戻り値 | 日付(シリアル値) |
| こんなときに | =DATE($B$1,$C$1,1) でその月の1日を作るとき。 |
| 注意 | 月に13以上を入れると翌年に繰り上がります(例: DATE(2026,13,1)は2027年1月)。 |
=DATE($B$1,$C$1,1)
WEEKDAY関数(ウィークデイ)
| 書式 | =WEEKDAY(日付, [種類]) |
|---|---|
| できること | 日付が何曜日かを1〜7の数値で返します。 |
| 戻り値 | 1=日曜〜7=土曜(種類を省略した場合) |
| こんなときに | 月初が何曜日かを調べ、先頭のマスを決めるとき。 |
| 注意 | 種類を変えると曜日の番号が変わります。省略時は日曜始まりです。 |
=WEEKDAY(DATE($B$1,$C$1,1))
DAY関数(デイ)
| 書式 | =DAY(日付) |
|---|---|
| できること | 日付から日の部分(1〜31)を取り出します。 |
| 戻り値 | 日(数値) |
| こんなときに | 日付から日だけを表示・計算したいとき。 |
| 注意 | 表示形式を「日」にすれば、DAY関数を使わなくても日だけ表示できます。 |
=DAY(A4)
MONTH関数(マンス)
| 書式 | =MONTH(日付) |
|---|---|
| できること | 日付から月の部分(1〜12)を取り出します。 |
| 戻り値 | 月(数値) |
| こんなときに | 条件付き書式で =MONTH(A4)<>$C$1 とし、月外の日付を判定するとき。 |
| 注意 | 比較するときは、月の入力セル($C$1)を絶対参照にします。 |
=MONTH(A4)<>$C$1
EOMONTH関数(イーオーエムオーエヌエス)
| 書式 | =EOMONTH(開始日, 月数) |
|---|---|
| できること | 指定した月の月末日を求めます。 |
| 戻り値 | 月末の日付(シリアル値) |
| こんなときに | その月に何日まであるかを =DAY(EOMONTH(A4,0)) で調べるとき。 |
| 注意 | EOMONTHは日付を返すので、日数が欲しいときはDAYと組み合わせます。 |
=DAY(EOMONTH(A4,0))
完成
B1に年、C1に月を入れるだけで、カレンダーが自動で並ぶようになりました。
B1・C1を変えれば、日付の並びも曜日の位置も自動で切り替わります。
年月の入力セルを黄色くしておくと、どこを変えればよいか一目で分かります。
思ったとおりに動きましたか?

さいごに
いかがでしょうか。
今回は、
についてまとめました。
まずは今回のサンプル表で、ぜひ一度試してみてください。
年月を変えるだけでカレンダーが組み替わると、毎月の作り直しがぐっとラクになりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。
ぜひ試してみてください。














コメントを残す