Excelで汎用性のあるカレンダーの作り方について解説します。
完成データはこちらからダウンロードできます。↓
完成形は下記動画です。
使っている関数や条件付き書式は他のExcelテンプレートでも応用が効く仕様になっているので、
是非学んでみてください。
月初(1日)にはDATE関数を使っています。
DATE関数:日付データを返します。
構文:=DATE(年、月、日)
例えば、=DATE(2025,12,5)であれば、2025/12/5を返します。
上記については、引数に年のセルC2:「2025」,月のセルC3:「12」、直接数値「1」を代入しています。
よって、12/1を返しています。(西暦は表示形式で非表示にしています。)
これによって、「年」セル、「月」セルに入る数値と月初日の日付を連動させています。
カレンダーの2日目以降にはIF関数、MONTH関数を使っています。
=IF(B6="","",IF(MONTH(B6+1)=$C$3,B6+1,""))
IF関数とは、引数に論理式を入れて、その論理式が合致していればAの条件、合致しなければBの条件のように条件分岐する関数です。
構文:IF(論理式,真の場合の処理,偽の場合の処理)
上記の場合、まず、B6が空白の場合という論理式を設定しています。
(B6セルは上図の赤枠セルの1つ上のセルを指しています)
つまり、関数を設定しているセルの1つ上のセルが空白ならば、空白にする。そうでなければ、以下の条件が設定されています。
偽の場合:IF(MONTH(B6+1)=$C$3,B6+1,””)
上記について、論理式は以下の通りです。
MONTH(B6+1)=$C$3
まず、MONTH関数について説明
MONTH関数は、日付関数から月だけを取り出す関数です。
例えば、下記の通り、MONTH関数の引数に2025/4/15を入れます。結果:月の4を返します。
よって、これらを踏まえると、論理式:MONTH(B6+1)=$C$3を訳すと、関数を設定しているセル(B7セル)がC3のセルの月数の値と同一ならばとなります。
IF(MONTH(B6+1)=$C$3,B6+1,””)
真の場合(同一であるならば)、B6+1の数値、つまり(B6に入っている日付の)次の日付を返します。
IF(MONTH(B6+1)=$C$3,B6+1,“”)
偽の場合(同一ではないならば)、何も入りません。
結論:これによって日にちが増加した時に、月が変わった場合は(例)1/31→2/1などは何も入りません。
月が変わらなければ(例)1/30→1/31などは次の日にちが入ります。
この関数によって、30日までの月、31日までの月などの月による日数の変化に表示を自動対応させています。
TEXT関数:指定の表示形式を返します。このカレンダーでは曜日の列に設定されています。
構文:=TEXT(値、”表示形式”)
TEXT関数はExcelの表示形式を実行する関数と言えば、わかりやすいです。
注意点としては、表示形式と違って、必ず文字列形式で返します。
条件付き書式とは、値に応じてセルの塗りつぶしや文字の色を変えることができる機能です。
上記のような条件付き書式が設定されており、整理すると下記の通りです。
まず、条件付き書式の設定方法を説明します。
上図のような手順で設定します。
=$C6=”土”
数式バーに上記のように入力します。そして、「書式」ボタンでセルの塗りつぶし青に設定します。
=$C6=”日”
数式バーに上記のように入力します。そして、「書式」ボタンでセルの塗りつぶし赤に設定します。
条件付き書式を使いこなすには、相対参照、絶対参照、複合参照を理解する必要があります。
祝日の条件付き書式については、下記の数式です。
=COUNTIF(休日一覧!$C:$C,DATE($C$2,$C$3,DAY($B6)))
COUNTIF関数:範囲の中で1つの検索条件に一致するセルの数をカウントしてくれる関数です。
構文:=COUNTIF(範囲,検索条件)
引数:範囲の中に、引数:検索条件に合うセルの数をカウントします。
これについては、事前に祝日を一覧にした「休日一覧」シートを準備しています。
つまり、範囲:「休日一覧」シートのC列の中に、検索条件:カレンダーの日付列の日付が存在していれば、セルと文字が着色するように設定されています。
このカレンダーは、30日や31日の月に対応して自動で罫線が挿入されたり、消えたりします。
こちらについては下記の数式が設定されています。
=$B6<>””
<>” “ はノットイコールなので、空白でなければ、罫線が設定されます。
頻出関数をたくさん使っていますので、実務でExcelを使う方はExcelの練習と思って作るのも良いかとおもいます。