【コピペOK】GASで営業日を判定・計算する方法を解説!
Google Apps Script(GAS)を業務利用する場合に通常の日数だけでなく営業日を計算したいことがあります。
そこで、GASで特定日時が営業日か判定する方法から営業日を計算する方法について解説します。
GASで営業日か判定・計算したい
Google Apps Script(GAS)を使って、業務効率化に取り組む方は多いです。
業務の中でGASを使うにあたって、営業日の日数をしたり、営業日かどうか判定することが求められます。
- 〇営業日後にレポートを提出する
- 毎月第■営業日に請求書を送付する
- 営業日の場合に処理を実行する
業務においては営業日を基準にしたトリガーにした業務が多いためです。
GASで上記のような業務を自動化する場合には、営業日の判定や計算が必要になります。
営業日は土日と祝日がベース
営業日を計算するにあたっては、土日の休日に加えて、日本だと祝日を考慮する必要があります。
2023年時点では年間16日の祝日が法律で定められています。
日本の祝日は日付が決まっているものもあれば、春分の日や秋分の日のように決まっていないものもあります。
こうした土曜日と日曜日の休日に加え、日本の祝日を営業日として含めなければなりません。
GAS単体では土日判定しかできない
営業日かどうかは、前述した通り、各日付が土曜・日曜・祝日に該当しているかで判定します。
Google Apps Script(GAS)では日時情報を扱うDateクラスで曜日を取得して、土日の判定が可能です。
しかし、日本の祝日に関する情報はDateクラスでも保持していません。
そのため、GAS標準の方法では土日かどうかによる営業日の計算や判定は可能ですが、祝日までは判定不可能です。
Googleカレンダーが日本の休日(祝日含む)を公開
Google Apps Script(GAS)単体では営業日の計算・判定は難しいとお伝えしました。
しかし、Googleカレンダーを利用することでGASでの営業日計算と営業日判定が実現できます。
実はGoogleカレンダーには「日本の祝日」というカレンダーが公開されています。
カレンダーの祝日の日付には、その日が何の祝日かという情報が記録されています。
※2023年7月だと7月17日(月)に海の日が設けられています。
この日本の祝日カレンダーはGoogleが管理しているものなので、毎年きちんと更新されるので安心です。
GASでGoogleカレンダーを読み込み祝日を取得し、曜日による土日取得を行えば、営業日の判定や営業日の計算ができます。
GASで営業日か判定するサンプルコード
実際にGoogle Apps Script(GAS)で、営業日かどうか判定する方法を解説します。
引数に指定した日付が営業日かどうか判定し、以下のようにBooleanの結果を返すisBusinessDay関数を作成してみます。
- 営業日の場合はtrue
- 営業日でない場合はfalse
下記のサンプルコードをコピペすれば誰でもGASで営業日判定が可能です。
//引数の日付が休日(土日、祝日)か判定する関数
function isBusinessDay(date) {
//曜日(0:日曜~6:土曜)を取得し、土日と判定された場合はfalseを返す
const weekInt = date.getDay();
if (weekInt <= 0 || 6 <= weekInt) {
return false;
}
//祝日を判定するため、日本の祝日を公開しているGoogleカレンダーと接続する
const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
//イベント(祝日)が設定されているか取得し、イベントが有る場合はfalseを返す
const event = calendar.getEventsForDay(date);
if (event.length > 0) {
return false;
}
return true;
}
営業日判定関数「isBusinessDay」では、まず引数の日付オブジェクトの曜日を取得して土日か判定し、土日の場合はfalseを返します。
さらにGoogleカレンダーで日本の日付を取得し、引数指定した日に祝日のイベントがあるか判定して、祝日が存在する場合はfalseを返します。
土日でもなく、祝日でもない場合にisBusinessDay関数を営業日としてtrueを返します。
実際に営業日をきちんと判定できているかcheckDate関数で試してみます。
function checkDate(){
let date = new Date(2023,6,17);
console.log(date);
console.log(isBusinessDay(date));
}
※GASの場合、Dateオブジェクトでの月情報は(0-11)で指定するため、6=7月です。
2023年7月17日(月)は曜日だけなら平日で営業日ですが、祝日(海の日)であるため、false=営業日ではないと判定できています。
さらに、翌日の7月18日(火)は正しく営業日と判定しています。
紹介した営業日判定のGASサンプルコードを使えば、すぐに営業日が判定できるので、ぜひ活用してみてください。
営業日の日数を計算するGASサンプルコード
次に営業日の日数を計算するGoogle Apps Script(GAS)の関数のサンプルコードも作成してみます。
//今日から引数に指定した日付までの営業日を計算する関数
function calBusinessDay(date) {
//今日のDateオブジェクトを定義する
const today = new Date();
//引数指定した日から今日までの営業日の日数をカウントする
let count = 0;
//今日から引数の日付になるまでwhileループ
while(date >= today){
//引数の日付が営業日か判定し、trueの場合はカウントアップ
if(isBusinessDay(date)){
count++;
}
//引数の日付を1日前にする
date.setDate(date.getDate()-1);
}
//今日から引数の日付までの営業日のカウント結果を帰す
return count;
}
前述のGASで営業日を判定するisBusinessDay関数を営業日計算に利用しています。
今日から指定日付までの日数だけ営業日判定し、trueの日数をカウントして、戻り値にカウント結果を返しています。
function testCalBusinessDay(){
let date = new Date(2023,6,12);
console.log(new Date());
console.log(date);
console.log(calBusinessDay(date));
}
上記で営業日計算の関数が正しく稼働するかテスト実行してみます。
7月10日(月)、7月11日(火)、7月12日(水)の営業日は3日なので、正しい結果です。
さらに、7月17日(月)の祝日を含んだ形で営業日数を計算すると、祝日も考慮して正しい営業日が出力されています。
このように営業日の判定する関数を活用すれば、営業日の日数を計算することもGASで簡単に実現可能です。
※上記のGASサンプルコードをコピペすれば、営業日計算も実装できます。
年末年始や夏季休暇も考慮したGoogleカレンダー用意も
これまでの営業日の計算や判定では、土日と祝日による営業日判定を行いました。
しかし、会社や組織によっては独自の休日を設けていたり、夏季休暇や年末年始も営業日から除外したいケースもあります。
その場合は、独自の休日と夏季休暇・年末年始の休みを登録したGoogleカレンダー用意するのがオススメです。
祝日に加えて営業日ではない日が登録されたGoogleカレンダーに上記のサンプルコードを差し替えるだけで、年末年始や夏季休暇も考慮した営業日判定関数になります。
まとめ・終わりに
今回、Google Apps Script(GAS)で営業日を判定する関数に加えて、営業日の日数を計算するサンプルコードを紹介しました。
GASの標準機能だけでは土日しか判定できませんが、日本の祝日を管理するGoogleカレンダーを利用することで営業日かどうか判定する関数が作成できます。
記事で紹介した営業日判定の関数のサンプルコードをコピペすれば、すぐにGASで営業日を判定する処理に組み込むことができます。
さらに、営業日判定の関数を応用することで営業日の日数を計算も可能です。
ぜひ、営業日をトリガーにした処理をGASで行いたい場合には営業日判定・営業日計算の関数のサンプルコードを活用ください。
ディスカッション
コメント一覧
まだ、コメントがありません