GASで祝日判定を行う5つのステップ

GASで祝日を自動判定したいんですけど、どうすればいいのか全然わからなくて…
猫男
猫男
catman
catman
よし、catmanが「GASで祝日判定」をわかりやすく教えてやろう!一緒に5つのステップで進めていこう。

 

GASで祝日判定を行う5つのステップ

次の5ステップを踏んでみよう。

 

Step 1: GASの基本設定

まずは、Google Apps Scriptの基本を押さえておこう。Googleスプレッドシートを開いて、拡張機能から「スクリプトエディタ」を選択するんだ。

function isHoliday(date) {
  // ここに祝日判定のロジックを追加する
}

Step 2: 日付を取得する

次は、祝日判定をしたい日付を取得しよう。以下のように書いて、スプレッドシートから日付を読み込むことができる。

function getDate() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  return sheet.getRange("A1").getValue();
}
これでスプレッドシートのA1に入力した日付が取得できるんですね!
猫男
猫男

Step 3: 祝日リストを持ってくる

Google CalendarのAPIを利用して、カレンダーから祝日を取得する方法もある。まず、Script Editorからリソース > 高度なGoogleサービスを有効にする必要がある。

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());
}

Step 4: 日付の判定ロジックを追加する

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

function isHoliday(date) {
  const holidays = getHolidays();
  return holidays.some(holiday => date.getTime() === holiday.getTime());
}
catman
catman
これで指定した日付が祝日であればtrueが返るようになるさ。

Step 5: 結果をスプレッドシートに記入

最後に、判定結果をスプレッドシートに記録しておこう。

function writeResult() {
  const date = getDate();
  const result = isHoliday(new Date(date)) ? "祝日です" : "祝日ではありません";
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("B1").setValue(result);
}
わぁ、これでスプレッドシートに結果が表示されるようになるんですね!なるほど、これがGASでの祝日判定なんですね。
猫男
猫男

🎯GASで祝日判定 練習問題

この記事の内容を元に、手を動かして理解を深めましょう!

【問題1】スプレッドシートのA1セルの日付で祝日判定しよう

スプレッドシートのA1セルに日付を入力し、
その日が祝日かどうかを判定して、B1セルに「祝日です」または「祝日ではありません」と表示するスクリプトを作成しましょう。

✅ 必要な機能

  • 日付の取得(getDate関数)
  • 祝日リストの取得(getHolidays関数)
  • 日付の祝日判定(isHoliday関数)
  • スプレッドシートへの出力(writeResult関数)

【問題2】別の年の祝日を判定するには?

今のスクリプトは「今年の祝日」だけ判定できますが、
例えば「来年(2025年)」の祝日を判定したい場合、
どこのコードを変更するべきかを考えてみましょう!

📝解答・解説編

【問題1】の解答例

 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);
 } 

✅ スプレッドシートのA1に日付を入力し、writeResult()関数を実行すると、B1に結果が自動で表示されます!

【問題2】の解説

別の年の祝日を判定したい場合は、getHolidays関数の「年」を変更する必要があります。

例えば、来年(2025年)の祝日を判定したいなら、

const year = 2025;

と固定値に変えれば、2025年1月1日〜12月31日の祝日を取得できるようになります!

✅ さらに発展させて、スプレッドシートの別のセル(例:C1)に「年」を入力して、そこから取得するようにもできます!

📚まとめ

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