TL;DR
- Googleは日本の祝日カレンダーを公開しており、
APIからICS形式で取得できる - スプレッドシートでは基本的に
ICSの正確なパースはできないが、:区切りのCSVとして扱えば重要な値は抽出できる
サンプルシートは以下で公開しています。
本文
記事執筆時点ではICSファイルを直接インポートする機能も、カレンダーをCSVでエクスポートする方法も提供されていませんでした。
仮に提供されているならそちらを使うことをお勧めします。
また、自分は利用していませんが、GASを用いればGoogleカレンダーをより高度に取り扱うことができるため、縛りが無ければそちらの利用をお勧めします。
処理対象とICS形式について
まず、Googleの公開している日本の祝日カレンダーは、以下のエンドポイントから取得できます。
この中身の開始・終了部と1レコード分を抜粋したものが以下です(レコード前後の改行は見やすさのために加えたもので、実際には改行されていません)。
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:日本の祝日
X-WR-TIMEZONE:UTC
X-WR-CALDESC:日本の祝日と行事
BEGIN:VEVENT
DTSTART;VALUE=DATE:20240923
DTEND;VALUE=DATE:20240924
DTSTAMP:20230227T153753Z
UID:20240923_1phfmrt6k7jjcr1d5lbv7550uc@google.com
CLASS:PUBLIC
CREATED:20220927T105018Z
DESCRIPTION:祝日
LAST-MODIFIED:20220927T105018Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:秋分の日 振替休日
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
パッと見訳が分からないかもしれませんが、ここからは以下のことが読み取れます。
- キーと値は
:で分割されている - レコードには開始・終了が定義されている(= フィルタリングしても元々のレコード順で抽出できる)
言い換えると、:区切りのCSVとしてインポートし、キーに対応する必要な値だけ抽出できるということです。
実際に処理する
:区切りのCSVとしてのインポート
:区切りのCSVとしてのインポートは、=IMPORTDATA("https://calendar.google.com/calendar/ical/ja.japanese%23holiday%40group.v.calendar.google.com/public/basic.ics", ":")で行えます。
結果は以下のような内容がずらっと並びます。
| BEGIN | VCALENDAR |
| PRODID | -//Google Inc//Google Calendar 70.9054//EN |
| VERSION | 2 |
| CALSCALE | GREGORIAN |
| METHOD | PUBLISH |
| ... | ... |
必要な値を抽出する
確認した所、DTSTART;VALUE=DATEキーに日付が、SUMMARYキーに祝日の名前が入るようでした。
サンプルシートではそれぞれ以下のように抽出を行っています。
DTSTART;VALUE=DATE |
SUMMARY |
|---|---|
=FILTER(B2:B1000, A2:A1000 = "DTSTART;VALUE=DATE") |
=FILTER(B2:B1000, A2:A1000 = "SUMMARY") |
結果は以下のようになります。
見て分かる通り日付順にはなっていませんが、ここまで抽出できれば後はどうとでもできるでしょう。
DTSTART;VALUE=DATE |
SUMMARY |
|---|---|
| 20240923 | 秋分の日 振替休日 |
| 20240922 | 秋分の日 |
| 20230923 | 秋分の日 |
| 20240715 | 海の日 |
| 20230717 | 海の日 |
| ... | ... |