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 | 海の日 |
... | ... |