見出し画像

自習監督(助勤)自動決定システム/GAS/教務の先生へ

最近、学校現場でもコロナが流行していますよね。
生徒はもちろんのこと、教職員も感染したり、濃厚接触者に認定されたりと、学校現場がバタバタとしています。

お休みの先生が出るたびに、その代替を探すのが大変ですよね。

その時間の授業が空いている先生を探して....。
お願いできそうな先生を決めて.....。
連絡をして.....。
何回もお願いしていると不公平だから、ちゃんと数はカウントして....。
あ...今度はあの先生が急にお休みに....。
また授業が空いている先生を探して....。

繰り返していきます。

これって、自動化できるんじゃね!?
ということを、ふと思い。

サクッと作りました!!🤣笑
(さっきの、悩みがそのままフローチャートになるんですよね!!)

使い方はこんな感じ!!

これで大切なのは、

その学校の先生たちが、年度当初に作っている既存の時間割形式を使うことを前提としている

というところ。

これ用で新しく時間割を作り直すなんてナンセンス

今あるものに合わせて作ってあるので、持続可能性があります。
来年度は、時間割をコピペして買えて、カウントを0に戻すだけ。

もちろん、自分達の学校用でカスタムしたい!!!

というお話があれば、ご相談に乗りますのでご連絡ください😆

プログラムはこんな感じ!

function search() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht1 = ss.getSheetByName('時間割');
 var sht2 = ss.getSheetByName('検索');
 var date = sht2.getRange(2, 1).getValue();
 const lastRow1 = sht1.getLastRow();
 const lastColumn1 = sht1.getLastColumn();
 const lastRow2 = sht2.getLastRow();
 var name = '';
 var count = '';
 var i = 0;
 var cell = '';
 for(let column = 3; column <= lastColumn1; column++) {
   if(sht1.getRange(1,column).getValue() == date){
     for(let row = 2; row <= lastRow1; row++) {
       if(sht1.getRange(row,column).getValue() === ''){
         name = sht1.getRange(row, 2).getValue();//カンマで区切りながら空欄の人の名前を格納していく
         count = sht1.getRange(row, 1).getValue();
         sht2.getRange(i+2,4).setValue(name);
         sht2.getRange(i+2,5).setValue(count);
         i++;
       }
     }
   }
 }
deleteRow();
}
function countAdd(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht1 = ss.getSheetByName('時間割');
 var sht2 = ss.getSheetByName('検索');
 const lastRow1 = sht1.getLastRow();
 const lastRow2 = sht2.getLastRow();
 var beforeCount = '';
 var countm = '';
 var afterCount = '';
 var name = '';
 for(let row2 = 2; row2 <= lastRow2; row2++) {
   name = sht2.getRange(row2, 4).getValue();
   beforeCount = Number(sht2.getRange(row2, 5).getValue());
   countm = Number(sht2.getRange(row2, 6).getValue());
   afterCount = (beforeCount + countm);
     for(let row1 = 2; row1 <= lastRow1; row1++) {
       if(sht1.getRange(row1,2).getValue() == name){
         sht1.getRange(row1,1).setValue(afterCount);
       }
     }
 }
 clear();
}

function deleteRow(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht2 = ss.getSheetByName('検索');
 const lastRow2 = sht2.getLastRow();
  for(let row2 = 2; row2 <= lastRow2; row2++) {
    if(sht2.getRange(row2,4).getValue() === '')
     sht2.deleteRows(row2);
  }
}
function randomSearch(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht2 = ss.getSheetByName('検索');
 const lastRow2 = sht2.getLastRow();
 var results=[];
 var nums = [];
 var i = 0;
 var j = 0;
 var minDate = '';
     for(let row2 = 2; row2 <= lastRow2; row2++) {
       nums[i]= Number(sht2.getRange(row2,5).getValue());
       i++;
     }
     console.log(nums);
     minDate = Math.min.apply(null,nums);
  for(let row2 = 2; row2 <= lastRow2; row2++) {
    if(sht2.getRange(row2,5).getValue() == minDate){
      results[j] = sht2.getRange(row2,4).getValue();
      j++;
    }
 }
  sht2.getRange(2,10).setValue(results[Math.floor(Math.random()*results.length)]); 
  console.log(minDate);
}

function clear(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht2 = ss.getSheetByName('検索');
 const lastRow2 = sht2.getLastRow();
 sht2.getRange(2, 4, lastRow2,6).clearContent();
 sht2.getRange(2, 1).clearContent();
 sht2.getRange(2, 10).clearContent();
}

レクチャーしやすいように作ってあるので、

いや、これこっちも配列にした方が効率いいじゃん😅

とかは、そっと置いといてください笑

コピーも貼っておきますねー。

https://docs.google.com/spreadsheets/d/1y39egUWXoydLEbBt8gAPLo6PpRYsqTdRiHDxOAapv-s/copy

もちろん、各学校用にカスタムもしますので!

何なりと!😎

元々の学校で使っている時間割を使っているので、セル結合があるのだけ気に入らない笑

セルは結合しないで!!!!
動くようにしたからいいけど!!笑

空白行が詰められていくのは気持ち良いですよ笑

あとこれ、席替えとかそういうのにも使えるんじゃね?笑
と、思ったら既に作られています笑


あと、どんなことに使えるかなー🤔

アイディアも絶賛募集中です!👍✨

ソース


何かと0から1を作るのは大変だと思います。学校はどこも似たような問題課題に対応していると思います。それなのに、先生って自分だけで頑張ろうとするんですよね。ボクの資料やnoteが1になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️