【GAS】保育園に提出するシフト表の自動作成プログラムを作ってみた。
うちの子の行く保育園では、個人事業主/フリーランスであっても、シフト表の提出が必要なのです。
GAS(Google Apps Script)の勉強も兼ねて、自動作成するプログラムを作ってみました。
1.わたしのGASスキル
Excel VBA作成は出来ます。GASは、文法と実行の仕方とHello World よりちょっとわかるくらいの初心者。
Excel VBAの知識をもとに GASを使いこなすための勉強中。
※ なかなか時間が取れませんが…💦
2.作りたいGASプログラムの条件
年月を指定したら、決まったフォーマットで日付/曜日/勤務時間 を自動出力。出来れば祝日も反映させたい。
勤務時間は、土日祝日以外の平日に 9:00-17:00と出力したい。
3.プログラムの実装
日付をループ処理する方法を、ネットで検索。
さらに、祝日判定処理も検索。結構あっさり出てきて、方法も簡単だったので、GASって便利だなぁ~と思いました。
以下が出来上がったプログラム。
function myFunction() {
//
const wktime = "9:00-17:00";
const youbi = ["日","月","火","水","木","金","土"]
const syuku = "祝";
const st = SpreadsheetApp.getActiveSheet();
// 行数のインクリメント用
let i;
// タイトルから月初日を変数に入れる
let dt = new Date(st.getRange(1,1).getValue());
// 祝日判定用
const id = 'ja.japanese#holiday@group.v.calendar.google.com'
const cal = CalendarApp.getCalendarById(id);
//const events = cal.getEventsForDay(date); ※ 使い方 if(events.length) return true
//タイトル以外のコンテンツをクリア
st.getRange("A2:G17").clearContent();
// 1- 15日
for(i = 2; i < 17; i++) {
// 日付、曜日(祝日判定)、平日なら勤務時間を入力
st.getRange(i,1).setValue(Utilities.formatDate(dt,"JST", "yyyy/MM/dd"));
if(cal.getEventsForDay(dt).length){
st.getRange(i,2).setValue(syuku); // 祝日
} else {
st.getRange(i,2).setValue(youbi[dt.getDay()]);
if(dt.getDay()!=0 && dt.getDay()!=6){
st.getRange(i,3).setValue(wktime); // 9:00-17:00
}
}
dt.setDate(dt.getDate() +1); // 1日進める
}
// 16 - 月末日
for(i = 2; i <= 17; i++) {
//console.log(st.getRange(i, 5).getValue());
st.getRange(i,5).setValue(Utilities.formatDate(dt,"JST", "yyyy/MM/dd"));
if(cal.getEventsForDay(dt).length){
st.getRange(i,6).setValue(syuku); // 祝日
} else {
st.getRange(i,6).setValue(youbi[dt.getDay()]);
if(dt.getDay()!=0 && dt.getDay()!=6){
st.getRange(i,7).setValue(wktime); // 9:00-17:00
}
}
dt.setDate(dt.getDate() +1); // 1日進める
if(dt.getDate() == 1) break; // 翌月1日になったら処理終了
}
}
ループ処理とか、もう少しまとめてキレイに出来ると思いますが、まだまだ初心者なのでこれくらいで。
わかりやすさ&デバッグのしやすさ最優先で♬
祝日判定処理、準備が以下の2行。
const id = 'ja.japanese#holiday@group.v.calendar.google.com'
const cal = CalendarApp.getCalendarById(id);
使い方が以下。
if(cal.getEventsForDay(dt).length){
st.getRange(i,6).setValue(syuku); // 祝日
} else...
これはすごいな~と思いました。
GoogleカレンダーというサービスをしているGoogleならではの便利さですよね、きっと。
4.プログラムの動作
gifアニメーションで見るとこんな感じ。
入力は年月だけ。実行は拡張機能→マクロ→myFunctionで実行するか、Alt+Shift+Ctrl+7を押して実行します。
5.作った感想
1時間くらいで動作確認まで全部出来たので、満足感が高いです。
やっぱり、あんまり悩んで悩んで…だと、面倒になっちゃいます。プログラムって。
GASの難点は、初めてプログラム実行するときに「実行許可」の手順をしないといけないこと。
でも、一度それをしてしまえば、ExcelVBAの実行となんら変わらない。
さらに、Excelと違って、ソフト代は無料。
※ ネット代だけ必要ですね。厳密にいえば。
プログラムってどんなものかやってみたい学生さんとか、社会人さんにはおすすめしたいプログラム実行環境&言語です!
この記事が参加している募集
お読みいただき、ありがとうございました☆ スキorコメントでどの記事が役立ったかリアクションして頂ければ、それ関連の記事をたくさん書くよう頑張ります♬ https://chitose-it.com https://asagao-startup.com