ここではSEQUENCE関数などを使い、1セルへの入力だけで表に日付を並べる例を紹介します。
- DATE関数やWEEKDAY関数を利用して、年月に応じたカレンダー(日付欄)を作成できます。
- ARRAYFORMULA関数やSEQUENCE関数を組み合わせることにより、1つのセルに入力するだけで日付を表に展開できます。
手順
まずは罫線を引き、年月の欄(B3とC3)と日付の表(B6:H11)を設けます。
B3とC3には手入力でもいいですが、それぞれ「=YEAR(TODAY())」「=MONTH(TODAY())」と入力すればシステムの年月が反映されます。
ここでいきなりですがB6セルに次のように入力します。
=ARRAYFORMULA(SEQUENCE(6,7,DATE(B3,C3,1)-WEEKDAY(DATE(B3,C3,1))+1))
ちょっと複雑ですが、SEQUENCE関数により日付を連番として生成しています。
このSEQUENCE関数の第1,第2引数で表の行数と列数(6と7)を定めています。第3引数は連番の最初の数字をいくつにするかですが、これを「DATE(B3,C3,1)-WEEKDAY(DATE(B3,C3,1))+1」とすることによりB3セルとC3セルを参照して当該月の初日の曜日を求め、最終的にその週の日曜日の値(シリアル値。日付に対応した数値)を求めています。
これだけで表の中にすべての日付が展開されます。
ただしシリアル値のままですので、表示形式(書式)を改める必要があります。
そこでB6:H11を選択した状態にして「表示形式」→「数字」→「表示形式の詳細設定」→「カスタム数式」と進んで選択します。
ダイアログが現れますので、数式欄に「d」と入力して「適用」をクリックします。
シリアル値に対応した「日」が表示されました。
さて、カレンダーには当該月以外の日付も表示されていますので、それらの日付の数字を薄い色に変えることとします。
そのまま(B6:C11を選択したまま)「表示形式」→「条件付き書式」と選択します。
条件付き書式のペインです。
ここで「範囲に適用」欄の値が「B6:H11」であることを確認します(違っていたら手入力)。
そして「セルの書式設定の条件」では「カスタム数式」を選択し、数式欄には「=MONTH(B6)<>$C$3」と入力します。表内の日付が属する「月」とC3セルに表示されている「月」を比較するというわけです。異なる場合の条件としてスタイルはフォントを灰色、セルの塗りつぶしは「なし」とします。
最後に「完了」をクリックします。
当該月の前後の月の日付が灰色になりました。
あとは文字位置を中央に調整して一応の完成です。
さらに書式を工夫して土日の色を設ける、といった調整が考えられます。
なお、日付の表示にSEQUENCE関数を用いていますので、入力は早いですが「日付を一行おきに表示し、間の行をメモ欄的に使う」ということができないのが弱点です。
そうしたい場合は1セル入力での完成をあきらめ、「2行上の値を参照して+7」といった数式をいくつか配置していくこととなります。