Google App Scriptにおける大規模座席表ランダム配分プログラム

とりあえず、まずはセットします。

//スプレッドシートを指定
var bk = SpreadsheetApp.getActiveSpreadsheet();
//シートを指定
var sh = bk.getActiveSheet();

 

さて、前提条件の設定が終わったところで、出席者の人数を集計します。ここでは全4クラス(A~D) で朝会をするという仮の設定にします。

//* クラスの人数を取得 * * * * * * * * * * * * *
var maxA=sh.getRange("B1").getValue(); //A
var maxB=sh.getRange("B2").getValue(); //B
var maxC=sh.getRange("B3").getValue(); //C
var maxD=sh.getRange("B4").getValue(); //D

 集計した出席している生徒の数を配列に収納します。

//クラス人数をそれぞれ配列に収納
var arrABCD= ;
for(i=1; i<=maxA; i++){
arrABCD[i-1] = "A"+i;
}
var arrB=
;
for(i=1; i<=maxB; i++){
arrB[i-1] = "B"+i;
}
var arrC= ;
for(i=1; i<=maxC; i++){
arrC[i-1] = "C"+i;
}
var arrD=
;
for(i=1; i<=maxD; i++){
arrD[i-1] = "D"+i;
}

 

しかしこのままではまだ全クラスまとめているわけではないので、ここで全部まとめます。

//4クラスの配列合体
arrABCD = arrABCD.concat(arrB);
arrABCD = arrABCD.concat(arrC);
arrABCD = arrABCD.concat(arrD);

 

そして、全クラスで何人出席しているのか、計算します。ここは「length」で短縮して書いてます。

//4クラス全人数を計算
var maxTotal=arrABCD.length;

 

「シャッフルアルゴリズム」と書いていますが、簡単に言うとここで乱数を用いてランダムに振り分けます。今まで1から順番に規則を持っていた配列をここでごちゃ混ぜにします。

 

まぁ、完璧他のサイト様のやつを丸パクリしてますが...

 //* シャッフルアルゴリズム * * * * * * * * * * * * *
var cnt=maxTotal;
while (cnt) {
var j = Math.floor( Math.random() * cnt );
var t = arrABCD[--cnt];
arrABCD[cnt] = arrABCD[j];
arrABCD[j] = t;
}

 

最後にセル上に表示させます。

今回はスクリプトのG列とN列を通路として扱いました。

//* セルに表示 * * * * * * * * * * * * * * * * * *
var torima_retu =1; //A列から開始
var torima_gyo=10; //10行目から開始
var torima_cnt=1;  //tate分表示したら列を横に移動用

for(var i = 0 ;i<=maxTotal-1; i++){
if (torima_cnt==19){
torima_cnt=1; //19番目は次の行へ
torima_retu=1
torima_gyo++;
}
if (torima_cnt==7 || torima_cnt==13){
torima_retu++; //7と13番目は通路
}

 //Browser.msgBox(arrABCD[i]);
sh.getRange(torima_gyo,torima_retu).setValue(arrABCD[i]);
torima_cnt++;
torima_retu++
}


}

 

このプログラミングを行ってわかったことは、「Google Apps Script」は「Java Script」にプログラム言語は似ているということでした。

しかしまだ、「欠席者が発生した場合」の処理が終わっていないので、今後の課題は「欠席者の処理」と「クラスをより簡単に増やす方法」です。