Excelでカレンダーを作る(1)
Excelでカレンダーを作る(2)はこちら
Excelでカレンダーを作る(3)はこちら
データの取得と変換(PowerQuery)はこちら
企業によっては決算処理の関係で20日締めを月度単位とするカレンダーのところもあるので、21日から始まるカレンダーをExcel関数、表示形式、条件付き書式で作ってみました。
Step1「起算日の週の日曜日を求める」
この図は、表示形式を削除し数式を表示したものです。セル B4 以外はとてもシンプルなことが分かると思いますので、ポイントだけ説明します。
セル B1 に年、D1 に月度、H1 に起算日の数字を入力しています。入力値は数式で利用するため数値になっていることが重要です。「2021年」のように文字を付けてしまうと計算できずエラーになるので注意してください。
セル B4 は、起算日からその週の日曜日を求める数式です。
=LET(i,EDATE(DATE($B$1,$D$1,$H$1),-1),i-(WEEKDAY(i)-1))
具体的には、起算日が月曜日だと起算日-1、火曜日だと起算日-2 というように計算し日曜日の日付を求めています。
【ポイント 1】EDATE
起算日をEDATE関数で求めます。入力値から DATE ( 2021, 5, 21 ) を作り、EDATE ( "2021/ 5/21", -1 ) で 1ヶ月マイナスにして、起算日の2021/ 4/21 を計算します。
※EDATE関数を使わなくても DATE(年, 月-1, 日)で計算できることが後に分かりました。Excelバージョンの違いによる確認はしていませんが、こっちの方がシンプルかも知れないです。
【ポイント 2】WEEKDAY
起算日の曜日をWEEKDAY関数で求めます。ただし 日=0、月=1、火=2・・・土=6 とする必要があるので WEEKDAY ( 起算日 ) -1 と計算します。
※WEEKDAY関数には、月曜を1とするオプション(2)がありますが、WEEKDAY ( 起算日, 2 )にすると日曜日が 7になってしまうのでNGです。
【ポイント 3】
最後に、起算日 ("2021/ 4/21") から 水 (3) を引いて 日曜日 ("2021/ 4/18") を計算します。
=EDATE(DATE(2021,5,21),-1)-(WEEKDAY(EDATE(DATE(2021,5,21),-1))-1)
計算式にするとそこそこ長くケアレスミスの可能性もあるため、起算日の計算を別のセルで行うのも良いと思います。
※図の数式は、Microsoft365で追加されたLET関数を使い、起算日の計算を変数 i に置き換えています。
Step2「表示形式を設定する」
表示形式は、標準で準備された形式だけでなく、ユーザーで定義することもできます。セルの書式設定 > ユーザー定義 を開き、種類に次のような設定をします。
セル B1,D1,H1(年,月度,起算日 入力部)
それぞれの種類に「0”年”」「0”月度”」「0”日”」を記入して設定します。これでセルが数値の場合に「年」「月度」「日」が付けた表示になります。
※「0"年";;;"数値のみ可"」のように設定すると、誤って文字が入力された場合に「数値のみ可」と表示させることもできます。
セル B4:H9(カレンダー部)
このセル範囲には「d」を設定します。dayのdです。〇月〇日の〇日のみを表示します。
※Excelには数値を1900/1/1以降の日付に対応させて表示する形式が準備されています。例えばセル B4の計算結果は44304で、この数値は1900/1/1から数えて44304日目となります。
この記事が気に入ったらサポートをしてみませんか?