GASで月間勤務シフトのテンプレートを作成 マンスリーシフト
日別シフトと週間シフト
日別シフトと週間シフトは以下のリンクに有ります。
日別シフトをGASで作る
月間の勤務シフトをGASで作るコードです。
1度組み込んでおくと意外と使えます。
薄い黄色の部分だけ入力すれば自動計算設定となっています。
必要事項を入れたものが下の画像です。
印刷もA4に収まります。
GASとは
GASは簡単に言えばグーグルが提供しているプログラミング言語です。無料で利用できます。
シフト表のサンプルコード
GASをある程度知っている方…下のコードをコピペすれば完了です。
GASをあまりよく分からない方…コードの下に説明を詳しく入れています。ご参照ください。
function マンスリーシフト() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sheetName = "マンスリーシフト";
let sheet;
let suffix = 1;
// シート名が重複しないように調整
while (ss.getSheetByName(sheetName + suffix)) {
suffix++;
}
sheet = ss.insertSheet(sheetName + suffix);
// 新しいシートを選択して表示
ss.setActiveSheet(sheet);
// 1. 列をAH列まで8列増やす
sheet.insertColumnsAfter(3, 8);
// 2. A1に「月間シフト」と太字
sheet.getRange("A1").setValue("マンスリーシフト").setFontWeight("bold");
// 3. B1に「開始日」
sheet.getRange("A3").setValue("月初日");
// 4. D1~D4に使い方の説明文を設定
const usageText = [
["■使い方"],
["①この色のセルを入力"],
["②B3に月初日を入力 例:11/1"],
["③氏名,契約出勤曜日(例:月火水木)、休み希望(○日、○日と複数入力可能)を入力"]
];
sheet.getRange("G1:G4").setValues(usageText);
// 5. A6~C6に「日付」「契約」「休み希望」を設定
sheet.getRange("A6:C6").setValues([["日付", "契約", "休み希望"]]);
// 6. A7~C7に「曜日」「出勤日」「例:1日、14日」を設定
sheet.getRange("A7:C7").setValues([["氏名", "出勤曜日", "例:1日、14日"]]);
// 8. D6に関数=IF(B3="","",B3)を入れる
sheet.getRange("D6").setFormula('=IF(B3="","",B3)').setNumberFormat("d日");
// 9. E6~AH6に日付を動的に変化させる関数を設定
sheet.getRange("E6:AH6").setFormula('=IF(D6="","",IF(MONTH(D$6+1)=MONTH($D6),D$6+1,""))').setNumberFormat("d日");
// 10. D7~AH7に曜日を動的に表示する関数を設定
sheet.getRange("D7:AH7").setFormula('=IF(D6="","",TEXT(D6,"ddd"))');
// 11. D8~AH37に出勤判定関数を設定
sheet.getRange("D8:AH37").setFormula('=IF(D$7="","",IF(AND(SUMPRODUCT(--ISNUMBER(SEARCH(D$7,$B8)))>0,SUMPRODUCT(--ISNUMBER(SEARCH(D$6,$C8)))=0),"出勤",""))');
// 12. C38に「出勤者数」を設定
sheet.getRange("C38").setValue("出勤者数");
// 出勤者数表示
sheet.getRange("D38:AH38").setFormula('=IF(D6="","",COUNTIF(D8:D37,"出勤"))');
sheet.getRange("D38:AH38").setNumberFormat("0名");
// 14. D列~AH列の幅を45に設定
for (let col = 4; col <= 34; col++) { // D列(4)からAH列(34)まで
sheet.setColumnWidth(col, 45);
}
// 15. 指定セルの背景色を明るい黄色3に設定
sheet.getRange("G2:I2").setBackground("#FFF2CC");
sheet.getRange("B3").setBackground("#FFF2CC");
sheet.getRange("A8:C37").setBackground("#FFF2CC");
// 16. シート全体のセルのテキストの縦位置を中央に設定
sheet.getRange("A1:AH38").setVerticalAlignment("middle");
// 17. B3を左寄せに設定
sheet.getRange("B3").setHorizontalAlignment("left");
}
GASの基本から
Dドライブにアクセスして、スプレッドシートを開きます。
拡張機能からAppScriptを選択します。
下のような画面が出てきたら、function myfunctionと書かれている部分をすべて消します。
次に上記のコードをすべて選択して貼り付けます。
保存を押し、実行を押します。
以下、赤印で囲んだところを選択
実行ログに実行完了と表示されたら、スプレッドシートを見て下さい。
カスタムメニューという項目が増えています。このファイルを開けば、次回以降も表示されます。他のファイルには影響はありません。
マンスリーシフトを選択すれば出来上がりです。
この記事が気に入ったらサポートをしてみませんか?