見出し画像

シンプルなカレンダーを作成した話

あらすじ

カレンダーをExcelで作って欲しいとの依頼があり、「そういや、作ったことないしなー」と思ったので依頼を受けました。

要件

  • 西暦を指定すれば1年分のカレンダーが作成できること

  • 土曜日と日曜日と祝日は平日とは異なる色を使用すること

  • 祝日は自動で取得すること

公開できるもの

依頼品をそのまま載せるわけには行かないので、Googleスプレッドシートに移植してゴニョゴニョしたものを公開します。

以下は、元のデータです。2025年以降は、こちらをコピーしてご利用ください(要:Googleアカウント)

使い方

下準備(祝日取得)

  1. 拡張機能→Apps Scriptを選択

  2. 実行

  3. 権限を確認

  4. アカウントを選択

  5. 詳細

  6. 「Holidays(安全ではないページ)に移動」

  7. 許可

  8. 再度、実行

印刷

  1. シートを選択

  2. 西暦と月を指定

  3. 印刷

あとがき

苦労話

第1週の日曜日の日付(左上)を取得するのにとても時間を割きました。結局、指定した年月の1日(例:2024-03-01)が何曜日であるかを週番号(1~7)で取得し、指定した年月の1日を引きます。その後、各曜日の週番号を足すことで第1週が完成します。

コードにするとこんな感じです。

=LET(
year,$C$1,
month,$A$2,
date,DATE(year,month,1),
weekday,WEEKDAY(date,1),
weekdayToNum,SWITCH(A$3,"Sun",1,"Mon",2,"Tue",3,"Wed",4,"Thu",5,"Fri",6,"Sat",7),
weekSun,date-weekday,
weekSun+weekdayToNum
)

第2週以降は下記のコード。要は第1週の土曜日の日付をSEQUENCE関数で単純に足していきます。

=SEQUENCE(5,7,G4+1)

ちょっとした愚痴

Excelでは条件付き書式にCOUNTIF関数を含めてもしっかり動作するのですが、Googleスプレッドシートでは実行できませんでした。

他にも条件付き書式の参照先は同じシート内でないと動作しない縛りもあります。

渋々、作業列を作り対応したのでした。

ここから先は

0字

¥ 300

この記事が気に入ったらサポートをしてみませんか?