LoginSignup
1
1

More than 1 year has passed since last update.

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

Posted at

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

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
  3. You can use dark theme
What you can do with signing up
1
1