見出し画像

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と書かれている部分をすべて消します。

次に上記のコードをすべて選択して貼り付けます。
保存を押し、実行を押します。

以下、赤印で囲んだところを選択

実行ログに実行完了と表示されたら、スプレッドシートを見て下さい。
カスタムメニューという項目が増えています。このファイルを開けば、次回以降も表示されます。他のファイルには影響はありません。
マンスリーシフトを選択すれば出来上がりです。


この記事が気に入ったらサポートをしてみませんか?