【Excel】年月を変えるだけの自動カレンダーの作り方|日付・曜日・土日祝の色まで自動にする

Excel自動カレンダーのサムネイル Excel

毎年この時期になると、カレンダーを作り直していませんか。

去年のファイルを開いて、日付を打ち直して、曜日をずらして、土日の色を塗り直す。やってみると意外と時間がかかるうえに、どこか1マスだけ微妙にずれている。あとから気づいて直す、あれが地味に嫌なんですよね。

正直に言うと、僕も最初に作ったカレンダーは、なかなかひどい仕上がりでした。

今日ご紹介するのは、年と月のセルを変えるだけで、中身が全部入れ替わるカレンダーです。日付も曜日も自動。土曜は青、日曜は赤、祝日にも自動で色が付きます。一度作ってしまえば、来年もそのまま使えます。

使う関数は4つだけです。

  • SEQUENCE関数 … 日付を42マス分、一気に並べる
  • DATE関数 … 「その月の1日」を作る
  • WEEKDAY関数 … 1日が何曜日かを調べる(この記事の山場です)
  • COUNTIF関数 … 祝日リストと照らし合わせる

聞いたことがない関数があっても大丈夫です。1つずつ、何をしているかから説明していきます。

先にお伝えしておくことが2つあります。

1つ目。SEQUENCE関数はExcel 2021以降で使えます。それより古いバージョンでは、この作り方は使えません。お使いのExcelで =SEQUENCE( と打ってみて、候補に出てこなければ非対応です。

2つ目。祝日だけは、自動では取ってこられません。祝日は年によって日付が変わりますし、ハッピーマンデーのように「◯月の第2月曜日」という決まり方をするものもあって、計算がかなり複雑になります。この記事では、祝日の一覧を別シートに用意しておく方式にします。年に1回だけ更新すれば済むので、こちらのほうが現実的です。

完成形と、準備するもの

作るのは、こういうカレンダーです。

  • A1セルに年(例:2026)
  • B1セルに月(例:8)
  • この2つを書き換えると、下のカレンダーが丸ごと切り替わる

シートの構成はこうします。

場所 入れるもの
A1 年(2026)
B1 月(8)
A2〜G2 曜日の見出し(日 月 火 水 木 金 土)
A3〜G8 カレンダー本体(ここに数式を1つ入れます)

カレンダー本体が6行×7列=42マスなのには理由があります。1か月は最大31日ですが、1日が土曜日から始まると最後の週がはみ出してしまう。どんな月でも収まる大きさが6行なんです。

祝日用に、シートをもう1枚用意します。名前は「祝日」としておきましょう。A列に祝日の日付を、上から順に入れていくだけです。

ステップ1:SEQUENCE関数で42マスを埋める

まずはA3セルに、これを入れてみてください。

=SEQUENCE(6,7,1,1)

すると、1から42までの数字が6行7列に並びます。

SEQUENCE関数は「連続した数字を、指定した行数・列数で自動的に並べる」関数です。中身は次の4つです。

=SEQUENCE(行数, 列数, 開始する数, 増やす数)

今回は「6行、7列、1から始めて、1ずつ増やす」と指示しました。

ここで大事なのは、入力したのはA3セル1つだけという点です。42マス分の数字が、勝手に右と下へ広がっていきます。これをスピルと呼びます。1つの数式が複数のマスに答えを返してくれるので、コピーして貼り付ける作業がまるごと要りません。

さて、並んだのはただの1〜42の数字です。これが日付になれば、カレンダーの形になりそうですよね。

ステップ2:DATE関数で「その月の1日」を作る

日付を作るのはDATE関数の仕事です。

=DATE(年, 月, 日)

A1に年、B1に月が入っていますから、その月の1日はこう書けます。

=DATE(A1,B1,1)

A1が2026、B1が8なら、2026年8月1日になります。年と月のセルを変えれば、この日付も自動で変わるわけです。ここがカレンダー全体の起点になります。

「じゃあ、さっきのSEQUENCEの開始する数を、この日付にすればいいのでは?」

そのとおりです。ただし、それだけではカレンダーになりません。

ステップ3:WEEKDAY関数で「1日は何曜日か」を調べる

カレンダーは、必ず日曜から始まる形で並んでいます。でも、その月の1日が日曜日とは限りません。

2026年8月1日は土曜日です。もし1日を左上のマスに置いてしまうと、日曜の列に土曜が入ることになり、全部ずれてしまいます。

そこで必要なのが「1日は何曜日なのか」という情報です。これを教えてくれるのがWEEKDAY関数です。

=WEEKDAY(日付, 種類)

WEEKDAY関数は、日付を入れると曜日を番号で返してくれます。「種類」に1を指定すると、次のようになります。

曜日
番号 1 2 3 4 5 6 7

試しに、どこか空いているセルに入れてみてください。

=WEEKDAY(DATE(A1,B1,1),1)

2026年8月なら 7(土曜日)が返ってきます。

ステップ4:左上のマスに来る日付を計算する(ここが山場)

ここがこの記事でいちばん大事なところです。

カレンダーの左上(A3セル)に入るのは、その月の1日ではなく、1日を含む週の日曜日です。8月1日が土曜なら、その週の日曜は7月26日。つまり左上には7月26日が入ります。

では、7月26日をどう計算するか。

1日から、曜日の番号を引いて、1を足す。これだけです。

=DATE(A1,B1,1) - WEEKDAY(DATE(A1,B1,1),1) + 1

なぜこれで合うのか、数字を追ってみます。

  • 8月1日は土曜日 → WEEKDAYは 7
  • 8月1日から7を引くと、7月25日(金曜日)
  • そこに1を足すと、7月26日(日曜日)

日曜日のWEEKDAYは1です。1を引いて1を足せば元の位置に戻る——つまり1日が日曜日の月なら、左上はそのまま1日になります。どんな曜日から始まる月でも、この式ひとつで正しい日曜日にたどり着きます。

ここでよくある間違いを1つ。「1日が木曜なら4つ戻ればいい」と考えて、引く数を自分で決めてしまうやり方です。これだと月が変わるたびに数字を直すことになり、自動になりません。引く数はWEEKDAY関数に決めてもらう、というのがポイントです。

計算した日付を、ステップ1のSEQUENCEの「開始する数」に入れます。完成した数式がこちらです。

=SEQUENCE(6,7,DATE(A1,B1,1)-WEEKDAY(DATE(A1,B1,1),1)+1,1)

長く見えますが、やっていることは「左上の日曜から始めて、42日分を1日ずつ並べる」だけです。

ステップ5:表示形式を整えて、日にちだけを表示する

数式を入れると、46229のような5桁の数字が並んだはずです。故障ではありません。

Excelの日付は、1900年1月1日を1として数えた通し番号でできています。これをシリアル値と呼びます。見た目が日付になっているのは表示の設定のおかげで、中身はずっと数字なんです。

なので、表示の設定を切り替えてあげます。

  1. A3〜G8を選択する
  2. 表示形式を「日付」にする(ここで一度、2026/7/26のような形になります)
  3. もう一度表示形式を開いて「ユーザー定義」を選び、種類の欄に d とだけ入れる

d は「日にち」を表す記号です。年も月も消えて、26 のように日にちだけが残ります。これでカレンダーらしい見た目になりました。

ステップ6:その月以外の日を目立たなくする

見た目は整いましたが、まだ問題があります。左上の7月26日〜31日や、最後の週の9月の日付まで、同じ濃さで表示されています。8月のカレンダーなのに、7月と9月が紛れている状態です。

これを条件付き書式でグレーにします。

  1. A3〜G8を選択する
  2. 条件付き書式 → 新しいルール → 「数式を使用して、書式設定するセルを決定
  3. 数式に次を入れる
=MONTH(A3)<>$B$1
  1. 書式でフォントの色をグレーにする

MONTH関数は、日付から「月」だけを取り出す関数です。<> は「等しくない」という意味。そのマスの月が、B1の月と違っていたらグレーにする、という指示になります。

数式に入れる A3 は、選択した範囲の左上のセルを書きます。あとはExcelが各マスに合わせてずらして判定してくれます。B1のほうは $B$1 と固定するのを忘れないでください。ここがずれると、正しく判定されません。

ステップ7:土曜を青、日曜を赤にする

ここでもう一度WEEKDAY関数の出番です。同じ手順で、ルールを2つ追加します。

土曜日(青)

=AND(WEEKDAY(A3,1)=7,MONTH(A3)=$B$1)

日曜日(赤)

=AND(WEEKDAY(A3,1)=1,MONTH(A3)=$B$1)

WEEKDAYが7なら土曜、1なら日曜。ここまではステップ3のとおりです。

問題は、AND関数のほうです。WEEKDAYの条件だけにすると、グレーにしたはずの先月・翌月の土日にまで色が付いてしまいます。そこで「かつ、その月であること」という条件を足しています。AND関数は「AもBも満たすとき」という意味です。

MONTH(A3)=$B$1——ステップ6で使った式と、ほとんど同じものが出てきましたね。同じ考え方を使い回しているだけです。

ステップ8:祝日に色を付ける

最後に祝日です。ここでCOUNTIF関数を使います。

COUNTIF関数は、本来「指定した範囲の中に、条件に合うものがいくつあるか」を数える関数です。

=COUNTIF(探す範囲, 探すもの)

ただ今回は、個数を知りたいわけではありません。知りたいのは「祝日リストの中に、このマスの日付があるかどうか」だけ。あれば1以上、なければ0が返ってくるので、0より大きければ祝日と判定できます。条件付き書式でCOUNTIFがよく使われるのは、この使い方ができるからです。

ルールを追加します。

=AND(COUNTIF(祝日!$A$2:$A$50,A3)>0,MONTH(A3)=$B$1)

書式は「赤の太字」にします。日曜の赤と区別したいので、太字を足しておくと分かりやすくなります。

範囲の 祝日!$A$2:$A$50 は、祝日シートのA2からA50までという意味です。ドルマークで固定するのを忘れないでください。固定しないと、マスごとに探す範囲がずれていってしまいます。行数はご自分のリストに合わせて調整してください。

ルールの順番についても、ひとこと。祝日が日曜と重なる年があります。条件付き書式は上にあるルールが優先されるので、祝日のルールを日曜より上に置いておくと、祝日の太字が勝ちます。順番は「条件付き書式 → ルールの管理」から入れ替えられます。

動かして確認する

準備ができました。B1セルの月を、8から9に変えてみてください。

日付が一斉に入れ替わり、曜日の位置がずれ、土日の色も付き直したはずです。年を変えれば、来年のカレンダーになります。

これが「年月を変えるだけ」のカレンダーです。あとはセルの幅と高さを整えたり、罫線や色を好みで足したりすれば、印刷して使えるものになります。

つまずきやすいところ

=SEQUENCE( を打っても候補に出てこない
Excel 2021より前のバージョンです。この方法は使えません。

#NAME? と表示された
関数名の打ち間違いか、そのバージョンに無い関数を使っています。SEQUENCEが原因のことが多いです。

#SPILL! と表示された
スピルで広がろうとした先に、すでに何か入っています。A3から下・右の42マスを空にしてから、もう一度入れてみてください。

日付が5桁の数字のまま
表示形式が「標準」に戻っています。ステップ5をもう一度。これは故障ではなく、Excelの日付が最初から数字だからです。

先月・翌月の日付にまで色が付く
条件付き書式のAND関数(MONTH(A3)=$B$1)が抜けています。

祝日に色が付かない
祝日シートの日付が「文字列」として入っている可能性があります。左詰めで表示されていたら文字列です。日付として入れ直してください。

まとめ

  • 42マスはSEQUENCE関数が並べてくれる。入力するのは1か所だけ
  • カレンダーの左上に来るのは、1日ではなくその週の日曜日
  • 左上の日付は「1日 − WEEKDAY + 1」で求められる。引く数は自分で決めない
  • 日にちだけの表示は、表示形式のユーザー定義「d
  • 色分けは条件付き書式。「かつ、その月であること」を忘れずに

いちばんの山場はステップ4です。ここさえ通れば、あとは色を付けていくだけでした。

関数は1つずつ覚えようとすると、なかなか身につきません。1つのものを作りながらのほうが、記憶に残ります。カレンダーはそのちょうど良い題材です。SEQUENCE・DATE・WEEKDAY・COUNTIF——今日使った4つは、どれもカレンダー以外でも出番のある関数です。

動画では、実際に画面を動かしながら同じ手順を解説しています。数式を組み立てていく様子は、動いているものを見たほうが分かりやすいと思います。

▼動画で見る
【Excel】年月を変えるだけ!日付と曜日が自動で切り替わるカレンダーの作り方
https://youtu.be/heqTpbAbbQY

「自分の仕事のExcelでもできますか?」というご相談も受け付けています。
今の状況を聞かせていただければ、どこから始めると良いか一緒に整理していきます。