残業を減らす!Officeテクニック
Excelで「万年カレンダー」を自作! 日付処理の極意を駆使したエクセル使いの技を伝授
自分好みのフォーマットに変更可能
2023年12月4日 06:45
昨今ではスマートフォンでスケジュールを管理することが多いでしょう。クラウドでパソコンとも同期して便利ですよね。しかし、自宅には見やすい壁掛けのカレンダーが欠かせないという人もいるはずです。
また、家族やサークルの仲間の予定など、複数の人が閲覧したり、書き込んだりする場合は、やはり「紙」のカレンダーが重宝します。ただ、市販品を購入するにしても、場面ごとに用意するのはコストがかかります。
そこで、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/8/26」を直接入力せずに、計算で求めたいわけです。
このような場面に使えるのが、WEEKDAY(ウィークデイ)関数。指定した日付に対応する曜日の数値を返します。例えば「2024/9/1」の曜日を調べるには「=WEEKDAY(A1,2)」のように入力します。結果は「7」、日曜日であることがわかります。
引数[種類]によって返される数値は変化しますが、「1」または省略で「1~7(日~土)」と、「2」で「1~7(月~日)」だけ覚えておいてください。
曜日の数値が求められることによって、ある日付の“○日前”の曜日が計算できるようになります。「2024/9/1」は日曜日なので、直前の月曜日は“6日前”です。
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)
日付は「表示形式」で整える
現状で日付が「yyyy/m/d」形式となっているので、カレンダーのタイトルと日付の表示を「表示形式」で整えておきましょう。[セルの書式設定]ダイアログボックスは[Ctrl]+[1]キーで呼び出せます。
土日を塗り分ける定番の数式
土日の塗り分けには[条件付き書式]を利用して、WEEKDAY関数で曜日を判定します。ただし、指定する数式は“条件”にする必要があるので、以下のように、数式の末尾に「=7」や「=1」を追加します。
=WEEKDAY(A3)=1
=WEEKDAY(A3)=7
これらの条件式は、セルA3のみを判定しているように見えますが、あらかじめセル範囲を選択してから操作することで、含まれるセルすべてに条件式が適用されます。セル参照は相対参照(ここでは「A3」)で指定します。
祝日の塗り分けは「リスト」と数式が必要
祝日の判定には、COUNTIF(カウント・イフ)関数を利用します。COUNTIF関数は指定した条件に一致する値を数える(カウントする)関数です。『あらかじめ用意した「リスト」にカレンダーの日付があるかどうかを数える』と考えます。[条件付き書式]の条件式として入力する数式は以下の通り。
=COUNTIF($J$3:$J$23,A3)=1
この例では、カレンダーの日付をセルJ3~J23のリストにあるかどうかを数えます。該当する日付があれば、結果は「1」となるので、数式の末尾に「=1」とします。
祝日リストは内閣府のWebページなどを参考に用意しておいてください。
当月以外の日付の処理
ここまでの操作で、月ごとのカレンダーの切り替えと、土日祝日の色分けが自動化されています。試しに月を変更してみましょう。
うまく動作しているようですが、セルA3は9月30日、セルE7~G3は11月1~3日。また、8行目はすべて11月の日付なので、10月のカレンダーには不要ですね。これらの日付を[条件付き書式]で制御しましょう。
まず、10月以外の日付の文字をグレーにして、塗りつぶしを「なし」と設定してみます。[条件付き書式]を設定するセル範囲はセルA3~G8です。指定する条件は以下の通りです。
=MONTH($A$1)<>MONTH(A3)
MONTH(マンス)関数を利用して、日付から「月」を取り出してカレンダーの日付と比較します。セルA1には当月(ここでは10月)の日付が入力されているので、“等しくない”という条件を満たせば、当月以外と判定できます。
最後に8行目を制御します。週頭のセルA8の日付が当月でなければ、文字色を「白」と設定します。[条件付き書式]を設定するセル範囲はセルA8~G8になります。また、8行目全体に書式を適用させるために、比較のセル参照は「$A8」のように複合参照になることがポイントです。
=MONTH($A$1)<>MONTH($A8)
ほかの月に切り替えて確認してみましょう。以下は8月と9月の例です。6週目のない8月では、8行目の日付が非表示になっています。9月では、8行目に9月30日が表示されて、セルB8~B8の日付はグレーになっています。
これで万年カレンダーは完成です。あとは好みの用紙サイズに調整して印刷するだけです。もし、意図通りに動作しない場合は[条件付き書式]の設定範囲や“ルール”の優先順位を[条件付き書式ルールの管理]ダイアログボックスで確認してみましょう。