カレンダー.xlsx
マクロを使わないで関数と条件付き書式で、カレンダーを作成してみました。
詳しい作り方の前にまずは使い方から
使い方
- A1セルに年を入力(西暦で数字のみを入力)※年は表示形式で設定していますので数字のみを入力してください
- B1セルに月を入力※1から12までの数字のみを入力してください
- 2行目以降にカレンダーが表示されます
注意)C1には数式が入っていますので編集しないでください
日付の求め方
A3からの日付を表示しているセルには、全て同じ数式が入っています。
=DATE($A$1,$B$1,1+(ROW()-3)*7-$C$1+COLUMN())
複雑な式ですので一つづつ解説します。
DATE関数
年、月、日を指定して日付を表す数値を求める関数です。
エクセルは日付や時刻は1900/1/0 0:00:00 からの日数で数値として管理しています。
※1900/1/0が気持ち悪いですが1899/12/31ですね。1900年以前の日付は使えないのでこの表記になってます。
試しに空いているセルに1を入力して表示形式を日付に変えてみましょう。
表示形式は右クリック→セルの書式設定→表示形式タブで変更できます。
1が1900/1/1 0:00:00 になるのがわかると思います。2なら1900/1/2 0:00:00です。
時刻は小数で表します。1時間は1/24 =0.04167ですね。1.04167が1900/1/1 1:00:00です。
本題に戻って、カレンダーの日付はA1セル、B1セルで年、月を指定しています。
日部分が複雑な数式になっています。C1セルとROW、COLUMN関数を使用しています。
C1セルの数式
文字色を白にして見えないようにしてますが、以下の数式が入っています。
=WEEKDAY(DATE(A1,B1,1))
WEEKDAY関数は曜日を求める関数です。
第2引数を省略すると日曜日を1とする値が求められます。
この場合は指定された年月の1日目の曜日を求めています。
ROW関数
セルの行番号を求める関数です。A1なら1、A2なら2です。
COLUMN関数
セルの列番号を求める関数です。A1なら1、B1なら2です。
日付の考え方
指定された年月の1日の曜日を元に考えます。
例えば、A3セルは第1週の日曜日ですが、1日が日曜日以外の場合は前の月になる可能性もあります。
DATE関数の便利な点として、日にちにマイナス値や0をいれても前月の日付に修正した値を返してくれます。
なので、前月になるかどうかを考えて数式を変更する必要はありません。
今回はA列を日曜日にしていますので、ちょうど列番号が曜日と一致します。
C1セルの数式で指定された年月の1日の列がわかります。
例えば2021年8月は1日が日曜日です。A3セルが1日になります。
B3セルは8月2日、C3セルは8月3日になるように数式を考えます。
第1週は日曜日から始まるのでCOLUMN関数で列番号を求めればそのまま日付になりますね。
1週間は7日ですから、第2週以降は行番号から第1週の行番号(3)を引いて7倍した日数を足せばいいですよね。
(ROW()-3) * 7 + COLUMN()
1日が日曜日でない場合はどうなるでしょうか?
例えば2021年9月1日は水曜日ですのでD3セルが1になるようにします。
1日の列番号が日曜日(1)から水曜日(4)にずれるのでさっきの数式から曜日の差分の3を引けばよさそうです。
(ROW()-3) * 7 + COLUMN() - 3
C1セルには1日の曜日が入っていますから、これを使って一般化すると
(ROW()-3) * 7 + COLUMN() - ($C$1 - 1)
最後の1は日曜日の列番号です。これを整理して最終的に以下の数式になります。
=DATE($A$1,$B$1,1+(ROW()-3)*7-$C$1+COLUMN())
DATE関数を使って日付にしているのは、後で条件付き書式で前の月、次の月の日付は灰色にしたいからです。
表示形式を変更して、日のみを表示するようにしています。
表示形式
カレンダー表示にするため、日付を日のみ表示するようにします。
セルのA3からG8までを選択して右クリック→セルの書式設定→表示形式タブ→ユーザー定義で種類に
d
を直接指定しています。
数式を指定した条件付き書式
カレンダーの文字色を変更するのに条件付き書式を使っています。
日曜日や土曜日の色は条件付き書式ではなく、列を指定して普通に文字色で設定しています。
2つの条件付き書式を設定しています。
- 指定された月の日は太字
- それ以外の日は灰
数式を使った条件付き書式は指定した数式がTRUE(0以外の値)の場合に書式が設定されます。
カレンダーの日付範囲A3:G8を選択して条件付き書式を設定しています。
設定した条件はホームタブ→条件付き書式→ルールの管理で確認できます。
=MONTH(A3)<>$B$1 | 文字色:灰色 |
=MONTH(A3)=$B$1 | 太字 |
新しいルールを設定するには以下のように操作します。
- 書式を設定したい範囲を選択する
- ホームタブ→条件付き書式→新しいルールをクリックする
- 「数式を使用して、書式設定するセルを決定」を選択
- 「次の数式を満たす場合に値を書式設定」の下のテキストボックスに数式を入力
- 書式ボタンをクリックして、書式を設定する
- OKをクリックして完了
注意
注意ですが、数式のセルの指定は相対参照になります。必ずアクティブセルを基準とした数式を入力してください。
例えば、今回の場合はA3をアクティブセルにしてG8 までを範囲選択して条件付き書式を設定しています。
アクティブセルが違うと思った通りに反映されませんので気を付けてください。
また、数式の入力にカーソルキーを使うと参照セルが入力されてしまいます。すごくイライラします。
カーソルキーをよく使う方は数式の入力前にF2キーを押すことをお勧めします。すぐ忘れちゃうのですが。
最後に
日付系の関数は実務で意外とよく使います。以前書いたエクセルで工程表も参考になると思います。
数式を使用した条件付き書式も細かい書式が設定できるので便利ですね。