GASで祝日判定する方法〜日本の祝日一覧をカレンダーから取得しよう〜

GASで祝日を自動判定したいんですけど、どうすればいいのか全然わからなくて…
猫男
猫男
catman
catman
よし、catmanが「GASで祝日判定」をわかりやすく解説しよう!

 

GASで祝日判定を行う方法

次のコードを紹介しよう。

 function getDate() {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    return sheet.getRange("A1").getValue();
 }

 function getHolidays() {
    const calendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
    const calendar = CalendarApp.getCalendarById(calendarId);
    const today = new Date(); 
    const year = today.getFullYear();
    const start = new Date(year, 0, 1);
    const end = new Date(year, 11, 31);
    return calendar.getEvents(start, end).map(event => event.getStartTime());
 }

 function isHoliday(date) {
    const holidays = getHolidays();
    return holidays.some(holiday => date.getTime() === holiday.getTime());
 } 

function writeResult() {
    const date = getDate(); const result = isHoliday(new Date(date)) ? "祝日です" : "祝日ではありません";
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.getRange("B1").setValue(result);
 } 

 

最後の「writeResult」を実行すると、現在アクティブのシートのA1セルの日付が祝日かどうか判定して、結果をB1に書き込んでくれるぞ。

 

例えば、A1に「2025-07-21」が入っているとしよう。すると、その日は偶然にも「海の日」だから、

祝日です

とB1に書き込まれるはずだ。

gas 祝日判定

えっ、なぜこのGASコードで祝日判定をできるのかだって?

それじゃあ早速解説していこう。

 

1. 日付を取得する

function getDate() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  return sheet.getRange("A1").getValue();
}

ここでは、祝日判定をしたい日付を取得している。

スプレッドシートから日付を読み込むぞ。

これでスプレッドシートのA1に入力した日付が取得できるんですね!
猫男
猫男

2. 祝日リストをゲット

function getHolidays() {
  const calendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
  const calendar = CalendarApp.getCalendarById(calendarId);
  const today = new Date();
  const year = today.getFullYear();
  const start = new Date(year, 0, 1);
  const end = new Date(year, 11, 31);
  return calendar.getEvents(start, end).map(event => event.getStartTime());
}

Google CalendarのAPIを利用して、カレンダーから祝日を取得している。

Googleが提供している「日本の祝日」カレンダーのIDを取得し(誰でも参照できるもの)、Google Apps Script の CalendarApp から特定のカレンダーを取得。

その年の1月1日〜12月31日を検索対象として、祝日一覧の結果をDate オブジェクトの配列で返しているな。

変数「year」を変えれば、その年の祝日を取得できる。

3. 日付の判定ロジック

function isHoliday(date) {
  const holidays = getHolidays();
  return holidays.some(holiday => date.getTime() === holiday.getTime());
}

次に、取得した日付が祝日かどうかを判定するロジックだ。

getHolidays() 関数を呼び出して、今年の祝日の配列(Dateオブジェクトの配列)を取得。

some関数で、「1つでも条件を満たす要素があるか?」を判定。

 

date(引数で渡された日付)と holiday(祝日の日付)が完全に一致しているかを比較している。

 

catman
catman
これで指定した日付が祝日であればtrueが返るようになるさ。

4. 結果をスプレッドシートに記入

function writeResult() {
  const date = getDate();
  const result = isHoliday(new Date(date)) ? "祝日です" : "祝日ではありません";
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("B1").setValue(result);
}

最後に、判定結果をスプレッドシートに記録する処理だ。

さっき見てきたisHolidayの判定結果がtrueなら「祝日です」、falseなら「祝日ではありません」を返してB1に出力しているぞ。

わぁ、これでスプレッドシートに結果が表示されるようになるんですね。これがGASでの祝日判定か!
猫男
猫男

GASの祝日判定まとめ

  • 祝日情報はGoogleカレンダー(日本の祝日カレンダー)から取得できる
  • 日付の一致を判定すれば、祝日かどうかがわかる
  • 年を変えれば、任意の年の祝日判定もできる!
なるほどー!これで祝日判定がバッチリできるようになりました!
猫男
猫男
catman
catman
よし、その調子だ!次は「平日かどうかの判定」や「連休の自動検出」にも挑戦してみよう!