【GAS】Google Apps Script 活用事例 Zoomのブレイクアウトルーム用の班分けを乱数で生成するスクリプト
乱数を使って、名簿を並び替えって出来ないかな?
Zoomのブレイクアウトルームのグループ分けを簡単に作れないかなと思う機会があり、スクリプトを書いてみました。他の方の参考になれば幸いです。コロナ禍でのコミュニケーションならではの需要かなと思います。
※ 上記の名前は、なーんちゃって個人情報というジェネレータで作成しております。
スクリプトはこんな感じ
function generateNameValues() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('名簿');
const array = sheet.getRange('B1:E5').getValues().flat();
//indexは0から始まるので、わかりやすいように1を足す
//ランダムに並び替えるために、indexに変換する
const convertedArray = array.map((value, index) => index+=1);
const max = convertedArray.length;
const randoms = generateRandomNumber_(max);
const newNameArray = array.map((value, index) => array[randoms[index]]);
console.log(`オリジナルの配列\n${array}`);
console.log(`indexに変換後\n${convertedArray}`);
console.log(`配列の最大値 ${max}`);
console.log(`ランダムに生成された配列\n${randoms}`);
console.log(`名前を入れ替えた後の配列\n${newNameArray}`);
//2次元配列に変換、貼り付けする
const values = convertArrayToValues_(newNameArray);
sheet.getRange(8, 2, values.length, values[0].length).setValues(values);
}
//重複のないランダムな配列を生成する
function generateRandomNumber_(max){
const randoms = [];
for(let i = 1; i <= max; i++){
while(true){
const temp = Math.floor(Math.random() * max);
//console.log(`生成された乱数 ${temp}`);
if(!randoms.includes(temp)){
//配列 randomsに生成された数字が含まれていなければ追加
randoms.push(temp);
break;
}//if
}//while
}//for
return randoms
}
//1次元配列を、4列の2次元配列に変換する
function convertArrayToValues_(array){
let values = [];
let temp = [];
for(let i = 0; i < array.length; i++){
let count = i + 1;
temp.push(array[i]);
//console.log(temp);
//4で割り切れたらvaluesに追加して、tempを初期化
if(count % 4 === 0){
values.push(temp);
temp = [];
}//if
}//for
console.log(values);
return values
}
おまけ シート上の表から名字のみを取得する
「こういう班分けになりましたー!」とSlackで報告することがありました。上司から、出来たら名字のみで表示してほしい。そして名字と名字の間は、句読点で区切って欲しいとフィードバックを受け、こちらもスクリプトを書いてみました。
名字のみで表示、こういう形です。
function convertToString() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('名簿');
const values = sheet.getRange('A1:E5').getValues();
//元データ
console.log(values);
let string = '';
const array = values.map(array => array.map(value => value.replace(/ .*/,'')).join('、'));
array.map(value => string += value.replace('、',' ').replace(/、$/,'') + '\n');
//文字列に変換
console.log(string);
}
Zoomに関連した記事
自分用メモ 配列内の要素を小さい順に並び替える
//配列の数値を小さい順に並び替える
//convertedArray.sort((first, second) => first - second);
乱数を使った他の記事
この記事が気に入ったらサポートをしてみませんか?