祝日・曜日をチェックして自動処理!GASで簡単スケジュール管理

はじめに

GAS(Google Apps Script)を使って、特定の日付に処理を実行するスクリプトを作成します。このスクリプトでは、曜日や祝日を判断しながら、効率的にスケジュール管理や通知などを行う方法を学べます。
例えば、月曜日に特定のメールを送ったり、祝日には通知を抑制したりといった場面で役立ちます。

なお、GASのセットアップや基本的な開発環境の整え方については、

で詳しく解説しています。

この記事では、スプレッドシートにカスタムメニューを追加する具体的な方法を解説します。
スプレッドシートをさらに便利にカスタマイズしたい方は、ぜひ最後までお読みください!

平日のみ処理を実行するコード

このスクリプトは、業務の効率化やリソースの最適化を図りたい場面で特に便利です。たとえば、平日のみ実行されるバッチ処理や通知タスクなど、無駄を省いた運用が可能になります。

function executeOnWeekdays() {
  const today = new Date();
  const dayOfWeek = today.getDay(); // 0: 日曜日, 1: 月曜日, ..., 6: 土曜日

  // 平日判定 (月〜金)
  if (dayOfWeek >= 1 && dayOfWeek <= 5) {
    Logger.log("今日は平日です。処理を実行します。");
    // 実行したい処理を書く
  }
}

コード解説

  • new Date():現在の日付を取得します。
  • getDay():現在の日付の曜日を取得します。曜日の番号を取得します。それぞれ以下の値を返します:
    0 日曜日
    1 月曜日
    2 火曜日
    3 水曜日
    4 木曜日
    5 金曜日
    6 土曜日
  • 条件分岐:曜日が 1(月曜日)から 5(金曜日)なら処理を実行。

祝日判定の方法

祝日休みの方も多いと思いますが、祝日をスキップして平日だけ処理を行うことで無駄なタスクを削減できます。

Googleカレンダーから祝日を取得し、平日と祝日を考慮した処理を自動化できます。この方法を使えば、祝日リストを手動で更新する手間を省けます。

サンプルコード

Googleカレンダーから祝日を取得します。

日本のカレンダー
ID: ja.japanese#holiday@group.v.calendar.google.com)

を使用して正確な祝日情報を取得します。平日と祝日を考慮した処理を自動化できます。
この方法を使えば、祝日リストを手動で更新する手間を省けます。

function HolidayToday() {
  const today = new Date();
  const holidayCalendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
  const calendar = CalendarApp.getCalendarById(holidayCalendarId);
  today.setDate(today.getDate() + 9);

  // 日本時間で今日の日付の開始と終了を設定
  const timeZone = 'Asia/Tokyo'; // タイムゾーンを日本に設定
  const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate());
  const endOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);

  const startOfDayFormatted = Utilities.formatDate(startOfDay, timeZone, 'yyyy-MM-dd\'T\'HH:mm:ss');
  const endOfDayFormatted = Utilities.formatDate(endOfDay, timeZone, 'yyyy-MM-dd\'T\'HH:mm:ss');
  
  Logger.log(`開始: ${startOfDayFormatted}, 終了: ${endOfDayFormatted}`);

  // 今日の祝日イベントを取得
  const events = calendar.getEvents(startOfDay, endOfDay);

  // イベントの確認とログ出力
  if (events.length > 0) {
    Logger.log("祝日です");
  } else {
    Logger.log("祝日ではないです");
  }
}

実行結果

祝日の場合
祝日でない場合

コード解説

  • 今日の日付を取得
    new Date()
    現在の日付と時刻を取得します。
  • 日本の祝日カレンダーを取得
    CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com')
    日本の祝日カレンダーを指定して取得します。
  • 今日の日付の開始と終了を設定
    new Date(year, month, day)
    日付範囲を設定します。
    開始: 今日の午前0時。終了: 翌日の午前0時。
  • 日付をフォーマット
    Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy-MM-dd\'T\'HH:mm:ss')
    日付を日本時間に合わせてフォーマットします。(例: 2024-12-23T00:00:00
  • 今日が祝日かを判定
    calendar.getEvents(startOfDay, endOfDay)
    設定した日付範囲内のイベント(祝日)を取得します。

解説: if (events.length > 0) の仕組み

calendar.getEvents() の動作
calendar.getEvents(startOfDay, endOfDay) は、指定した日付範囲内のすべてのイベントを取得します。イベントは配列(リスト)として返され、配列内に1つ以上の要素があれば、その日付範囲にイベントが存在することを意味します。

events.length の意味
配列の要素数を取得します。要素数が1以上であれば、日付範囲内にイベント(祝日)が存在します。
日付範囲に該当するイベントがない場合、空の配列([])が返されます。

  • events.length > 0 の場合
    配列に1つ以上のイベントがあるため、その日が祝日であると判定します。
  • events.length === 0 の場合
    配列が空であるため、その日が祝日ではないと判定します。

そのため 祝日は1以上 ということになります。

実行例

if (events.length === 0) {
  myFunction(); // 平日の場合のみ実行
} else {
  Logger.log("祝日なので処理をスキップします");
}

このように、祝日を判定して処理を分岐させることで、平日のみ行いたい処理を実行することが可能になります。

最後に

GASを使った「平日のみ処理」と「祝日を判定する」スクリプトは、業務の効率化に大いに役立ちます。スケジュール管理やリソースの無駄を防ぐために、ぜひこれらのスクリプトを活用してみてください。

さらに複雑な条件や自動化を実現したい場合は、Googleカレンダーやスプレッドシートとの連携を組み合わせると便利です。あなたの業務がよりスマートになる一助となれば幸いです!

コメント

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