GASで祝日判定する方法〜日本の祝日一覧をカレンダーから取得しよう〜
GASで祝日を自動判定したいんですけど、どうすればいいのか全然わからなくて…

猫男

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コードで祝日判定をできるのかだって?
それじゃあ早速解説していこう。
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
これで指定した日付が祝日であれば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
よし、その調子だ!次は「平日かどうかの判定」や「連休の自動検出」にも挑戦してみよう!