Google Apps Script

【GAS】Googleカレンダーから前年・今年・来年の祝日を取得してスプレッドシートに出力する方法|関数連携も解説

スポンサーリンク

Googleスプレッドシートを業務で活用していると、「祝日を手入力するのが面倒」「毎年更新するのが大変」と感じることはありませんか?

この記事では、Google Apps Script(GAS)を使って、Googleカレンダーの祝日情報をスプレッドシートに自動出力する方法をわかりやすく解説します。
対象は「前年・今年・来年」の3年分。コピペで使えるスクリプトを掲載し、WORKDAYNETWORKDAYS関数との組み合わせ方法も紹介します。


このスクリプトでできること

  • Googleが提供する「日本の祝日カレンダー」から祝日を取得
  • 前年・今年・来年の3年分の祝日を一括取得
  • スプレッドシートに祝日一覧を出力
  • WORKDAYNETWORKDAYS関数と連携して営業日計算に活用

手順①|スプレッドシートとスクリプトの準備

  1. Googleスプレッドシートを開く
  2. メニューから「拡張機能」→「Apps Script」をクリック
  3. スクリプトエディタが開くので、プロジェクト名を任意で入力
  4. 次のコードを貼り付けて保存しましょう

手順②|祝日を取得するGASコード(コピペOK)

/**
 * 前年、今年、来年の祝日をGoogleカレンダーより取得してスプレッドシートに出力します。
 */
function getHolidayCalendar() {
  const now = new Date();
  const currentYear = now.getFullYear();
  const startDate = new Date(currentYear - 1, 0, 1);  // 前年1月1日
  const endDate = new Date(currentYear + 1, 11, 31); // 来年12月31日

  // カレンダー(祝日)を取得
  const calendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
  const calendar = CalendarApp.getCalendarById(calendarId);
  const events = calendar.getEvents(startDate, endDate);

  const holidays = [["日付", "祝日"]];

  for (const event of events) {
    const date = Utilities.formatDate(event.getStartTime(), 'Asia/Tokyo', 'yyyy/M/d');
    const title = event.getTitle();
    holidays.push([date, title]);
  }

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.clear(); // シート全体をクリア(必要に応じて)

  const range = sheet.getRange(1, 1, holidays.length, 2);
  range.setValues(holidays);
  range.applyRowBanding(SpreadsheetApp.BandingTheme.ORANGE);

  const headRange = sheet.getRange(1, 1, 1, 2);
  headRange.setHorizontalAlignment("center")
           .setVerticalAlignment("middle")
           .setFontColor("#ffffff"); // "#fff" より明示的に
}

スクリプトの中身を解説

① 取得期間の設定

  const now = new Date();
const currentYear = now.getFullYear();
const startDate = new Date(currentYear - 1, 0, 1); // 前年1月1日
const endDate = new Date(currentYear + 1, 11, 31); // 来年12月31日
  • Date オブジェクトで前年〜来年の祝日を対象に設定しています。祝日を取得したい期間を変更したい場合はこちらを変更してください。

② Googleの祝日カレンダーからイベントを取得

  // カレンダー(祝日)を取得
const calendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEvents(startDate, endDate);
  • Googleが提供している「日本の祝日カレンダー」のイベント一覧を取得します

③ 日付と祝日名を整形して配列に格納

  const holidays = [["日付", "祝日"]];

for (const event of events) {
const date = Utilities.formatDate(event.getStartTime(), 'Asia/Tokyo', 'yyyy/M/d');
const title = event.getTitle();
holidays.push([date, title]);
}
  • Utilities.formatDate()で日付を整形(例:2025/1/1)

④ スプレッドシートに出力

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear(); // シート全体をクリア(必要に応じて)

const range = sheet.getRange(1, 1, holidays.length, 2);
range.setValues(holidays);
  • アクティブなシートに祝日一覧を上書き出力します

⑤ 表の装飾(バンド・中央揃え・文字色)

  range.applyRowBanding(SpreadsheetApp.BandingTheme.ORANGE);

const headRange = sheet.getRange(1, 1, 1, 2);
headRange.setHorizontalAlignment("center")
.setVerticalAlignment("middle")
.setFontColor("#ffffff"); // "#fff" より明示的に
  • 見出しの見やすさを向上させるための装飾処理です。装飾が必要ない場合は削除しても問題ありません。

手順③|スクリプトを実行して承認を行う

  1. エディタ上部の関数選択プルダウンから getHolidayCalendar を選択
  2. ▶(実行)ボタンをクリック
  3. 初回実行時に「承認が必要です」と表示されたら、画面の指示に従って許可します

手順④|実行結果を確認する

実行が完了すると、アクティブなシートに祝日の一覧が以下のように出力されます。

日付祝日名
2025/1/1元日
2025/1/13成人の日

見出し行はオレンジのバンドカラーで装飾され、視認性が高くなっています。


出力結果の正確性を確認したい方へ

このスクリプトは Google が提供する「日本の祝日カレンダー」に基づいていますが、
法改正などの正確な情報を確認したい場合は以下の内閣府サイトを参考にしてください。


応用:営業日計算に使う(WORKDAY・NETWORKDAYS関数)

取得した祝日リストは、スプレッドシート関数 WORKDAYNETWORKDAYS と連携できます。

📘 WORKDAY関数:営業日を加算して日付を求める

=WORKDAY(DATE(2025,1,1), 10, A2:A100)
  • → 2025年1月1日から10営業日後の日付を返します(祝日除外)

📘 NETWORKDAYS関数:2日間の営業日数をカウント

=NETWORKDAYS(DATE(2025,1,1), DATE(2025,1,31), A2:A100)
  • → 1月の営業日数(祝日除外)を返します

📘 WORKDAY.INTL関数:土日以外の休日にも対応

=WORKDAY.INTL(DATE(2025,1,1), 5, "0000110", A2:A100)
  • → 金曜・土曜が休日として扱われます(”0″=出勤日、”1″=休日)

よくある質問(FAQ)

Q
スクリプトは毎年更新が必要ですか?
A

いいえ。このスクリプトは現在年を基準に「前年・今年・来年」の3年分を自動取得するので、毎年書き換える必要はありません
ただし、用途によっては取得が必要になる場合も考えられますので、その場合は必要に応じて祝日を取得し直してください。

Q
自動で実行するには?
A

時間主導型トリガーを設定することで、年末に自動実行させることも可能です。

Q
特定のシートに出力するには?
A
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("祝日一覧");

とすれば、指定したシートに出力されます。

Q
独自の休業日も除外したい場合は?
A

祝日リストに手動で追加すれば、関数でも自動的に除外されます。


まとめ

Google Apps Scriptを使えば、毎年の祝日入力やスケジュール更新の手間から解放されます。
さらに WORKDAYNETWORKDAYS 関数と組み合わせることで、納期計算・勤怠管理・日程調整を効率化できます。

スプレッドシートをもっと便利に使いたい方にとって、このスクリプトは非常に実用的です。
ぜひ一度試してみてください。

タイトルとURLをコピーしました