自習監督(助勤)自動決定システム/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になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️