【GAS】土日・祝日を除外!平日(営業日)だけスクリプトを自動実行する方法

GASのトリガーを月~金で設定したら、祝日にもGASが実行された…

GASが実行される日を、土日・祝日を除いた本当の営業日だけにしたい…

これは、GASでトリガーを設定しようとする際、非常によくある悩みです。

GASの標準トリガーは「毎週月曜日」といった曜日の指定はできますが、「祝日かどうか」は一切考慮してくれません

祝日なのにクライアントに自動通知が飛んでしまったらちょっと気まずいですよね…

この記事では、土日・祝日の両方を除外し、平日(営業日)にだけスクリプトを実行させる方法について解説します。

誰でも使えるようにするため、コピペで完結するようにしています。

ぜひとも最後までご覧ください。

目次

コピペで使える「平日(営業日)」実行コード

以下の2つのステップで実現します。

GASの立ち上げ方法は省略してます。
立ち上げ方法から知りたい方は以下の記事をご参照ください。

ステップ1:以下のスクリプトを貼り付ける

まず以下のコードをスクリプトに貼り付けてください。

JavaScript
/**
 * この関数をトリガーで「毎日」実行するように設定します。
 */
function triggeredFunction() {
  const today = new Date();
  // --- チェック1:土日(0=日, 6=土)でないか ---
  const dayOfWeek = today.getDay();
  if (dayOfWeek === 0 || dayOfWeek === 6) {
    Logger.log("土日(" + dayOfWeek + ")のため、処理をスキップします。");
    return;
  }

  // --- チェック2:祝日でないか ---
  // Googleカレンダーの「日本の祝日」カレンダーのID(# を使用)
  const holidayCalendarId = "ja.japanese#holiday@group.v.calendar.google.com";
  const calendar = CalendarApp.getCalendarById(holidayCalendarId);
  // 今日の日付でイベント(=祝日)があるかを取得
  const events = calendar.getEventsForDay(today);
  
  if (events.length > 0) {
    // 祝日が見つかった場合
    Logger.log("祝日(" + events[0].getTitle() + ")のため、処理をスキップします。");
    return;
  }

  // --- チェックを両方クリアした場合 ---
  // 平日(営業日)の時だけ、以下の本処理を実行
  mainProcess();
}

/**
 * 実際に実行したいメインの処理
 */
function mainProcess() {
  Logger.log("平日(営業日)です。メインの処理を実行します。");
  
  // ここに、あなたが実行したい本来の処理(メール送信、スプレッドシート集計など)を記述します。
  
}
JavaScript

スクリプトの意味を知りたいという方は、後ほど解説してますのでご安心ください!

こちらを貼り付けたらスクリプトを保存して実行してください。

実行すると権限の承認画面も出てくると思うので、そちらの承認作業もお願いします。

実行方法と権限の承認が分からない方に向けてこちらで解説しています!

スクリプトの実行と権限の突破方法

ステップ2:トリガーを「毎日」に設定する

まず最初にGASの画面でトリガーを設定しましょう。

  • 画面左の「トリガー」をクリック
  • 右下にある「トリガーを追加」をクリック
画面左の「トリガー」をクリックして右下にある「トリガーを追加」をクリック

出てきた画面の中で実行したい日付と時間帯を設定しましょう。

  • イベントのソースを「時間主導型」に変更
  • 時間ベースのトリガーのタイプを「日付ベースのタイマー」に変更
  • 時刻を自分のお好みの時間に設定
  • 最後に「保存」をクリック

実行する関数を triggeredFunction にしてください。

これで毎日決まった時間に平日と土日以外自動でスクリプトが実行される設定が出来ました。

コードのポイント解説

これどうやって動いてるの?

という方のために、ポイントだけサクッと解説します。

このスクリプトは、mainProcess()(本処理)を実行する前に、2つのチェックポイントを設けています。

1. チェックポイント①:土日判定

JavaScript
const dayOfWeek = today.getDay();
if (dayOfWeek === 0 || dayOfWeek === 6) {
  Logger.log("土日(" + dayOfWeek + ")のため、処理をスキップします。");
  return;
}
JavaScript

この中で土日を判定しています。

dayOfWeekという変数の中に入っている曜日のデータで土日を判別します。

0が日曜日で6が土曜日です。

06だったらreturnしてスクリプトを実行しません。

2. チェックポイント②:祝日判定

JavaScript
// --- チェック2:祝日でないか ---
const holidayCalendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(holidayCalendarId);
const events = calendar.getEventsForDay(today);
  
if (events.length > 0) {
  Logger.log("祝日(" + events[0].getTitle() + ")のため、処理をスキップします。");
  return;
}
JavaScript

土日かどうかを判別したら次は祝日かどうかを判別します。

GASの標準機能 CalendarAppを使って祝日かどうかを判別します。

ja.japanese#holiday@group.v.calendar.google.comこれがCalendarAppに使用するIDです。

もし events.length > 0 (=予定が1件以上ある)だったらreturnします。

3. 本処理の実行

JavaScript
// --- チェックを両方クリアした場合 ---
mainProcess();
JavaScript

土日でもなく、祝日でもない。

この2つのチェックを両方ともクリアしたら、mainProcess() を実行できます。

このmainProcess()は自分が実行したい関数に書き換えてください。

このコードだけでは対応できないケース

先ほどのスクリプトで「土日」と「祝日」は、うまく除外できるようになりました。

しかし、このコードだけできない対応できない複雑なケースもあります。

例えば、こんなケースです。

  • 会社の「創立記念日」や「独自の夏季休暇」も、実行日カレンダーから除外したい。
  • 祝日が土曜と重なった場合、会社ルールで月曜が振替休日になる。

このような場合、先ほどのスクリプトでは解決出来ません。

こうなる理由はもちろん、Googleカレンダーは、それぞれのユーザーの独自ルールまでは知らないからです。

会社の独自ルールをGASに理解させるには、ロジックを一気に複雑にする必要があります

複雑な営業日判定は、お任せください

先述したように、GASの標準機能 CalendarAppでは対応しきれないケースになると、ロジックは一気に複雑になります。

もしこのような複雑な営業日判定を必要とするなら私にお任せください

私はGAS開発の専門家として、それぞれの会社のニーズに合わせた自動化をオーダーメイドで開発しています。

先述した方法であなたの業務の課題が解決出来ない場合、ぜひ一度ご相談ください。

あなたの業務に合わせた確実な自動化ロジックを構築します。

「こんなことできる?」という、まだフワッとしたご相談からでも大歓迎です!

まとめ

ここまでGASを使って土日と祝日を除いた日だけスクリプトを実行する方法を解説しました。

上記のスクリプトを実行するだけで、あなたも祝日と土日を除いだ日だけGASを実行することができます。

しかし上記のスクリプトは会社それぞれのルールに合わせたスクリプトにはなっていません

もしもう少し複雑な設定をお望みの場合はぜひ一度GASの専門家である私にご相談ください。

あなたの業務に合わせたGASをオーダーメイドで開発いたします。

ここまで読んでいただきありがとうございました。

私はGoogleが提供するプログラミングツールである、GAS(Google App Script)を活用して面倒なスプレッドシート業務を自動化や効率化するサービスを提供しています

もし今の業務の中で

  • 毎回の手作業に手間を感じる
  • もっと業務を効率化したい
  • ルーティン業務を自動化したい

このような不満を抱えてらっしゃるなら是非一度ご連絡ください。

「こんなことできる?」くらい軽めのご相談でも大歓迎です!

  • URLをコピーしました!

MASAのアバター MASA MASA|GAS開発者

GAS開発者のMASAです。
スプレッドシート業務の自動化や効率化の仕組みづくりを提供しています。
ブログではの自動化や効率化のTipsについて発信しています。

目次