LoginSignup
0
Organization

【GAS無し】GoogleスプレッドシートでGoogleの祝日カレンダーから自動更新される祝日シートを作成する

TL;DR

  • Googleは日本の祝日カレンダーを公開しており、APIからICS形式で取得できる
  • スプレッドシートでは基本的にICSの正確なパースはできないが、:区切りのCSVとして扱えば重要な値は抽出できる

サンプルシートは以下で公開しています。

本文

記事執筆時点ではICSファイルを直接インポートする機能も、カレンダーをCSVでエクスポートする方法も提供されていませんでした。
仮に提供されているならそちらを使うことをお勧めします。

また、自分は利用していませんが、GASを用いればGoogleカレンダーをより高度に取り扱うことができるため、縛りが無ければそちらの利用をお勧めします。

処理対象とICS形式について

まず、Googleの公開している日本の祝日カレンダーは、以下のエンドポイントから取得できます。

この中身の開始・終了部と1レコード分を抜粋したものが以下です(レコード前後の改行は見やすさのために加えたもので、実際には改行されていません)。

icsファイルから抜粋
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 海の日
... ...

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0