残業を減らす!Officeテクニック

Excelで「万年カレンダー」を自作! 日付処理の極意を駆使したエクセル使いの技を伝授

自分好みのフォーマットに変更可能

「万年カレンダー」を作る時のコツを公開

 昨今ではスマートフォンでスケジュールを管理することが多いでしょう。クラウドでパソコンとも同期して便利ですよね。しかし、自宅には見やすい壁掛けのカレンダーが欠かせないという人もいるはずです。

 また、家族やサークルの仲間の予定など、複数の人が閲覧したり、書き込んだりする場合は、やはり「紙」のカレンダーが重宝します。ただ、市販品を購入するにしても、場面ごとに用意するのはコストがかかります。

 そこで、Excelでカレンダーを自作してみると意外と面倒なことに気付くはずです。日付を入力して、土日祝日を塗り分けて……と、力技で解決するのはやめておきましょう。

 Excelの画面からカレンダーのテンプレートをダウンロードできますし、Microsoftの公式サイトにも豊富に用意されています。

 今回は“テンプレ”では納得できない人向けに「万年カレンダー」を自作する際のコツをお伝えします。仕組みを覚えてしまえば、いろいろな用紙サイズでオリジナルのカレンダーを作成できるようになりますよ。

月初日を含む週の「月曜日」を求める

 ボックス型のカレンダーでは、7日単位で日付が折り返されて、月曜日、もしくは日曜日が左端になります。例えば、2024年9月のカレンダーでは、左上の日付は「2024/8/26」です。左上の日付が当月とは限りませんよね。

 この日付「2024/8/26」を基準として、2024年9月のカレンダーだけを作成する場合、セルB3には「=A3+1」と入力してセルG3までコピーします。セルA4には「=A3+7」と入力してセルG4までコピー、4行目をまとめて8行目までコピーします。

例えば、2024年9月のカレンダーでは、左上の日付は「2024/8/26」となる
セルB3に「=A3+1」と入力してセルG3までコピーする
セルA4に「=A3+7」と入力してセルG4までコピー、4行目をまとめて8行目までコピーする

 数式のコピーの操作に問題はありませんが、今回は「万年カレンダー」を作成したいので、基準の日付「2024/8/26」を直接入力せずに、計算で求めたいわけです。

 このような場面に使えるのが、WEEKDAY(ウィークデイ)関数。指定した日付に対応する曜日の数値を返します。例えば「2024/9/1」の曜日を調べるには「=WEEKDAY(A1,2)」のように入力します。結果は「7」、日曜日であることがわかります。

 引数[種類]によって返される数値は変化しますが、「1」または省略で「1~7(日~土)」と、「2」で「1~7(月~日)」だけ覚えておいてください。

例えば「2024/9/1」の曜日を調べるには「=WEEKDAY(A1,2)」のように入力する。第2引数[種類]が「1」または省略で「1~7(日~土)」と、「2」で「1~7(月~日)」だけ覚えておこう
結果は「7」。引数[種類]に「2」と指定した場合は日曜日にあたる。つまり「2024/9/1」は日曜日であることがわかる

 曜日の数値が求められることによって、ある日付の“○日前”の曜日が計算できるようになります。「2024/9/1」は日曜日なので、直前の月曜日は“6日前”です。

「2024/9/1」の6日前が月曜日の「2024/8/26」となる

 Excel内部で日付は「シリアル値」という数値で管理されているため、「2024/9/1」から「-6」すれば、直前の月曜日「2024/8/26」を求めることができます。この法則は「○月1日」が何曜日であっても成り立ちます。

 「2024/9/1」はセルA1に入力済みなので、セルA3を「=A1-(WEEKDAY(A1,2)-1)」と書き換えれば、“最初の月曜日”を計算できることになります。なお、日曜始まりのカレンダーの場合は「=A1-(WEEKDAY(A1)-1)」とします。

月曜日始まりの場合
=A1-(WEEKDAY(A1,2)-1)
日曜日始まりの場合
=A1-(WEEKDAY(A1)-1)
セルA3を「=A1-(WEEKDAY(A1,2)-1)」と書き換えれば、「2024/9/1」の直前の月曜日「2024/8/26」を算出できる
日曜日始まりのカレンダーにしたい場合は「=A1-(WEEKDAY(A1,1)-1)」と書き換える

日付は「表示形式」で整える

 現状で日付が「yyyy/m/d」形式となっているので、カレンダーのタイトルと日付の表示を「表示形式」で整えておきましょう。[セルの書式設定]ダイアログボックスは[Ctrl]+[1]キーで呼び出せます。

セルA1を選択して[Ctrl]+[1]キーを押し、[日付]から[2012年3月]を選択する
「○年○月」の表示形式に変更された。入力されている日付は「2024/9/1」
セルA3~G8を選択して[Ctrl]+[1]キーを押し、[ユーザー定義]を選択して[種類]に「d」と入力する
「日」のみの表示に切り替わった

土日を塗り分ける定番の数式

 土日の塗り分けには[条件付き書式]を利用して、WEEKDAY関数で曜日を判定します。ただし、指定する数式は“条件”にする必要があるので、以下のように、数式の末尾に「=7」や「=1」を追加します。

日曜日の判定
=WEEKDAY(A3)=1
土曜日の判定
=WEEKDAY(A3)=7

 これらの条件式は、セルA3のみを判定しているように見えますが、あらかじめセル範囲を選択してから操作することで、含まれるセルすべてに条件式が適用されます。セル参照は相対参照(ここでは「A3」)で指定します。

[条件付き書式]を適用するセル範囲を選択して、[ホーム]-[条件付き書式]-[新しいルール]の順にクリックして[新しい書式ルール]ダイアログボックスを表示しておく。[数式を使用して、書式設定するセルを決定]を選択して「=WEEKDAY(A3)=1」と入力する。[書式]から任意の背景色とフォントの色を設定して[OK]をクリックする
同様に操作して、「=WEEKDAY(A3)=7」と入力する。[書式]から任意の背景色とフォントの色を設定して[OK]をクリックする
土日が自動的に塗り分けられた

祝日の塗り分けは「リスト」と数式が必要

 祝日の判定には、COUNTIF(カウント・イフ)関数を利用します。COUNTIF関数は指定した条件に一致する値を数える(カウントする)関数です。『あらかじめ用意した「リスト」にカレンダーの日付があるかどうかを数える』と考えます。[条件付き書式]の条件式として入力する数式は以下の通り。

=COUNTIF($J$3:$J$23,A3)=1

 この例では、カレンダーの日付をセルJ3~J23のリストにあるかどうかを数えます。該当する日付があれば、結果は「1」となるので、数式の末尾に「=1」とします。

 祝日リストは内閣府のWebページなどを参考に用意しておいてください。

祝日の「リスト」をあらかじめ用意しておく
土日の判定と同様に、セルを選択して[新しい書式ルール]ダイアログボックスを表示しておく。[数式を使用して、書式設定するセルを決定]を選択して「=COUNTIF($J$3:$J$23,A3)=1」と入力する。[書式]から任意の背景色とフォントの色を設定して[OK]をクリックする
祝日が自動的に塗り分けられた

当月以外の日付の処理

 ここまでの操作で、月ごとのカレンダーの切り替えと、土日祝日の色分けが自動化されています。試しに月を変更してみましょう。

2024年9月のカレンダー
2024年10月に切り替えた。カレンダー左上の日付に注目。カレンダーが自動的に切り替わり、土日祝日の色分けも自動化されているが……

 うまく動作しているようですが、セルA3は9月30日、セルE7~G3は11月1~3日。また、8行目はすべて11月の日付なので、10月のカレンダーには不要ですね。これらの日付を[条件付き書式]で制御しましょう。

 まず、10月以外の日付の文字をグレーにして、塗りつぶしを「なし」と設定してみます。[条件付き書式]を設定するセル範囲はセルA3~G8です。指定する条件は以下の通りです。

=MONTH($A$1)<>MONTH(A3)

 MONTH(マンス)関数を利用して、日付から「月」を取り出してカレンダーの日付と比較します。セルA1には当月(ここでは10月)の日付が入力されているので、“等しくない”という条件を満たせば、当月以外と判定できます。

セルを選択して[新しい書式ルール]ダイアログボックスを表示しておく。[数式を使用して、書式設定するセルを決定]を選択して「=MONTH($A$1)<>MONTH(A3)」と入力する。[書式]から背景色なし、フォントの色をグレーに設定して[OK]をクリックする
10月以外の日付がグレーになり、背景色も「なし」になった

 最後に8行目を制御します。週頭のセルA8の日付が当月でなければ、文字色を「白」と設定します。[条件付き書式]を設定するセル範囲はセルA8~G8になります。また、8行目全体に書式を適用させるために、比較のセル参照は「$A8」のように複合参照になることがポイントです。

=MONTH($A$1)<>MONTH($A8)
セルA8~G8を選択して[新しい書式ルール]ダイアログボックスを表示しておく。[数式を使用して、書式設定するセルを決定]を選択して「=MONTH($A$1)<>MONTH($A8)」と入力する。[書式]から背景色なし、フォントの色を白に設定して[OK]をクリックする
8行目の日付が非表示になった

 ほかの月に切り替えて確認してみましょう。以下は8月と9月の例です。6週目のない8月では、8行目の日付が非表示になっています。9月では、8行目に9月30日が表示されて、セルB8~B8の日付はグレーになっています。

8月のカレンダー。6週目に8月の日付はないため、8行目の日付が非表示になっている
9月のカレンダー。8行目に9月30日が表示されて、セルB8~B8の日付はグレーになる

 これで万年カレンダーは完成です。あとは好みの用紙サイズに調整して印刷するだけです。もし、意図通りに動作しない場合は[条件付き書式]の設定範囲や“ルール”の優先順位を[条件付き書式ルールの管理]ダイアログボックスで確認してみましょう。

[ホーム]-[条件付き書式]-[ルールの管理]の順にクリックして[条件付き書式ルールの管理]ダイアログボックスを表示する。[このワークシート]を選択して、設定済みの“ルール”を確認しよう。[適用先]が正しくないことや、優先順位が前後していることはよくある