【GASで自動化】Googleスプレッドシートで祝日を自動取得する方法|勤怠管理・シフト作成を効率化

自動化事例

「毎年の勤怠管理表の作成が大変…」
「シフト表を作るたびに、祝日を一つひとつ手で調べて入力している…」

企業の労務や総務をご担当の方で、このようなお悩みをお持ちではないでしょうか。

特に、法改正やオリンピックなどで祝日が不規則に変動すると、その確認と修正作業は大きな負担になりがちです。手作業による入力ミスは、給与計算にも影響を及ぼしかねません。

本記事では、Googleスプレッドシートの「Google Apps Script(GAS)」という機能を活用して、日本の祝日を自動で取得し、シートに反映させる方法を解説します。

一度設定してしまえば、来年以降もボタン一つで最新の祝日リストが完成します。プログラミングの専門知識は不要です。コピー&ペーストで実装できるよう、手順を一つひとつ丁寧に説明しますので、ぜひこの機会に日々の業務の自動化に挑戦してみましょう。

祝日の手入力・手動管理が引き起こす課題

祝日情報を手作業で管理していると、単純な手間に加えて、見過ごせないビジネス上のリスクが発生する可能性があります。

  • 入力ミスや確認漏れのリスク
    「海の日」や「スポーツの日」のようなハッピーマンデー制度による移動や、年によって日付が変わる祝日の管理は特に注意が必要です。手作業では、どうしても入力ミスや確認漏れが発生しやすくなります。
  • 法改正への対応の遅れ
    近年では、オリンピック開催に伴う祝日の移動など、特別な法改正による変更がありました。こうしたイレギュラーな変更を手作業で追いかけ、正確に反映させるのは非常に煩雑な作業です。
  • 属人化による業務停滞
    特定の担当者だけが祝日の管理方法を把握している場合、その担当者が不在の際に業務が滞ってしまう「属人化」のリスクも考えられます。

これらの課題は、勤怠管理や給与計算の正確性を損なうだけでなく、担当者の貴重な時間を奪い、より重要な業務への集中を妨げる原因にもなります。

GASで祝日を自動取得する3つのメリット

Google Apps Script(GAS)を使って祝日取得を自動化することで、これらの課題を解決できます。

  1. 業務効率の向上
    毎年の面倒な確認・入力作業から解放され、ボタン一つで正確な祝日リストを作成できます。
  2. 人為的ミスの防止
    Googleカレンダーに登録されている公式の祝日情報を直接取得するため、入力ミスや更新漏れがなくなります。
  3. 法改正にも自動で対応
    Googleカレンダー側が法改正による祝日の変更に対応するため、私たちは常に最新の情報を手間なく利用できます。

【実践】GASを使って祝日を自動で取得する手順

ここからは、実際にGASを使って祝日を自動取得する具体的な手順を解説します。
専門的な知識は不要です。一つひとつのステップを真似しながら進めていきましょう。

GASを初めてお使いになる方や、スクリプトエディタの基本的な操作方法、初回実行時の承認プロセスについては、こちらの記事で詳しく解説しています。

ステップ1:スプレッドシートを準備する

まずは、祝日リストを作成するためのGoogleスプレッドシートを準備します。

  1. Googleドライブを開き、「+ 新規」から「Googleスプレッドシート」を選択して、新しいシートを作成します。
  2. ファイル名を「祝日リスト管理」など、分かりやすい名前に変更しておきましょう。
  3. シート下部にあるシート名を「シート1」から「祝日リスト」に変更します。
  4. 1行目に、A列に「日付」、B列に「祝日名」と入力し、ヘッダーを作成します。

ステップ2:Google Calendar APIを有効にする

今回のコードでは、より安定して祝日情報を取得するために「Google Calendar API」という機能を利用します。以下の手順で有効にしてください。

  1. スプレッドシートのメニューバーから「拡張機能」>「Apps Script」を選択してスクリプトエディタを開きます。
  2. エディタ画面の左側にあるメニューから、「サービス」の横の「+」アイコンをクリックします。
  3. 「サービスを追加」という画面が表示されたら、リストの中から「Google Calendar API」を選択し、「追加」ボタンをクリックします。
  4. 左側のメニューに「Calendar」が追加されれば準備完了です。

ステップ3:祝日取得のコードをコピー&ペーストする

APIの準備ができたら、以下のコードをエディタ画面に貼り付けます。

function getHolidays() {
  // 年の指定(今年)
  const year = new Date().getFullYear();

  // 結果を書き込むスプレッドシートとシートを指定
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('祝日リスト'); // ステップ1で設定したシート名

  // シートの内容をクリア(ヘッダー行を除く)
  if (sheet.getLastRow() > 1) {
    sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).clearContent();
  }
  
  const calendarId = 'ja.japanese.official#holiday@group.v.calendar.google.com';
  // 取得する期間を指定(年の初めから次の年の初めまで)
  const timeMin = new Date(`${year}-01-01T00:00:00+09:00`).toISOString();
  const timeMax = new Date(`${year + 1}-01-01T00:00:00+09:00`).toISOString();

  try {
    // Google Calendar API を使って祝日イベントのリストを取得
    const response = Calendar.Events.list(calendarId, {
      timeMin: timeMin,
      timeMax: timeMax,
      singleEvents: true, // 繰り返しイベントを個別のイベントとして展開
      orderBy: 'startTime' // 開始時間で並び替え
    });

    const holidays = response.items;
    if (holidays && holidays.length > 0) {
      const events = holidays
        // "銀行休業日" や "大晦日" は祝日ではないため除外
        .filter(event => !/銀行休業日|大晦日/.test(event.summary || ''))
        .map(event => {
          // 終日イベントの日付は `event.start.date` に 'YYYY-MM-DD' 形式で格納されている
          return [new Date(event.start.date), event.summary];
        });

      // シートに書き込み
      sheet.getRange(2, 1, events.length, 2).setValues(events);
      
      // 日付の表示形式を "yyyy/mm/dd" に設定
      sheet.getRange(2, 1, events.length, 1).setNumberFormat('yyyy/mm/dd');
    }
  } catch (e) {
    // エラーが発生した場合(APIが有効でない場合など)にメッセージを表示
    Logger.log(e);
    SpreadsheetApp.getUi().alert('エラーが発生しました。「Google Calendar API」が有効になっているか確認してください。');
  }
}

【ポイント】「その他の行事」を含まない祝日カレンダーを指定 

Googleが提供する「日本の祝日」カレンダーには、実は2種類あります。一般的なカレンダーには、祝日だけでなくクリスマスや節分といった「その他の行事」も含まれています。
今回使用するコードでは、「その他の行事」を含まない公式の祝日のみが登録された特別なカレンダーを直接指定しています。これにより、勤怠管理などに不要な情報が混ざるのを防ぎます。さらに、「銀行休業日」や「大晦日」といった祝日ではない日も除外する処理も含まれています。

ステップ4:スクリプトを保存して実行する

コードを貼り付けたら、プロジェクトを保存してスクリプトを実行します。

ステップ5:スプレッドシートで結果を確認する

プログラムが実行されると、スプレッドシートに結果が反映されます。
A列に日付、B列に祝日名が自動で入力されていれば成功です!

【応用】祝日リストを活用して月間の営業日数を計算する

作成した「祝日リスト」は、関数と組み合わせることで、より実務的なデータ分析に活用できます。

ここでは、土日と祝日を除いた「月間の営業日数」を自動で計算する方法を解説します。

例:営業日数の自動計算

NETWORKDAYS.INTL関数(ネットワークデイズ・インターナショナル関数:指定した期間内の稼働日数を返す関数)を使用します。

  1. 新しいシートを追加し、「営業日数計算」などの名前に変更します。
  2. 以下のようにA列に「年月」、B列に「営業日数」とヘッダーを準備し、A2セル以降に計算したい年月を入力します。(例:「2025/04/01」)
  3. B2セルに、以下の関数を入力します。
=NETWORKDAYS.INTL(A2, EOMONTH(A2, 0), 1, '祝日リスト'!A2:A)

関数の解説

  • NETWORKDAYS.INTL(開始日, 終了日, 週末, 祝日)
  • 開始日: A2 (その月の初日)
  • 終了日: EOMONTH(A2, 0) (EOMONTH関数でA2セルに対応する月の末日を自動で取得)
  • 週末: 1 (土曜日と日曜日を週末として指定)
  • 祝日: ‘祝日リスト’!A2:A (GASで作成した祝日リストの日付の範囲を指定)
  1. 入力後、セルの右下に表示される●(フィルハンドル)をドラッグして、数式を下の行までコピーします。

これで、各月の営業日数が自動で算出されるようになりました。プロジェクトの工数計算や売上目標の設定など、様々なビジネスシーンでご活用いただけます。

まとめ

本記事では、GAS(Google Apps Script)を活用してGoogleスプレッドシートに祝日を自動で取得する方法をご紹介しました。

これまで手作業で行っていた祝日の確認と入力作業を自動化することで、業務時間を大幅に削減できるだけでなく、入力ミスといった人為的なエラーを防ぎ、より正確な勤怠管理やスケジュール管理を実現できます。

最初は難しく感じるかもしれませんが、ほとんどがコピー&ペーストで実装できます。

ぜひ、この記事を参考に「祝日管理の自動化」の第一歩を踏み出し、日々の業務効率化にお役立てください。

※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。