現在選択されているセルを起点に、5x5のビンゴカードを生成するGoogle Apps Scriptです。これを使えばオンライン忘年会でもビンゴ大会ができる・・・かも?
特にありません。スプレッドシートに組み込むだけです。
現在選択されているセルを起点として、5 × 5のビンゴカードを出力します。
ビンゴの数字は完全にランダムなものではなく、
1列目:1〜15
2列目:16〜30
3列目:31〜45
4列目:46〜60
5列目:61〜75
このようになっているそうで、このスクリプトもその仕様に準拠しています。
セルの幅や高さ、フォントサイズも自動的に調整されます。
スクリプトを起動します。
メニューから「ビンゴカードを生成」を実行します。
このようなビンゴカードが出力されます。
出力されたビンゴカードで、ビンゴをお楽しみください!
関連アプリ(このページの一番下)にある「選択すると色がついたり消えたり」と組み合わせると色付けが簡単かもしれません。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00028/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('ビンゴカードを生成', 'generate_bingo_card');
// メニューを画面に追加する
menu.addToUi();
}
function generate_bingo_card() {
// ビンゴに使用する数字をしまっておく配列
let bingo_numbers = [];
// ビンゴは左列から1-15/16-30/31-45/46-60/61-75の範囲の値が入る。
// それぞれの値を用意しておく
for (let i = 0; i < 5; i++) {
bingo_numbers[i] = [];
for (let j = 1; j <= 15; j++) {
// ビンゴに使う数字は1列目なら0 * 15 + 1-15、2列目なら 1 * 15 + 1-15、3列目なら 2 * 15 + 1-15・・・
bingo_numbers[i].push(i * 15 + j);
}
}
// 結果書き込み用の配列
let values = [];
// ビンゴカードの数字を1行ずつ作成する
for (let i = 0; i < 5; i++) {
values[i] = [];
// 1列ごとに1-15/16-30/31-45/46-60/61-75のいずれかが入る
for (let j = 0; j < bingo_numbers.length; j++) {
// 乱数をもとに配列のkeyを指定する
// 最大値は残っている数字の数だけ
let key = Math.floor(Math.random() * bingo_numbers[j].length);
// 結果用配列に入れる
if (i == 2 && j == 2) { // 中心部分はFREEとする
values[i].push('FREE');
} else {
values[i].push(bingo_numbers[j][key]);
}
// 一度使った数字は使えないので削除する
bingo_numbers[j].splice(key, 1);
}
}
Logger.log(values);
// スプレッドシートの取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// アクティブシートの取得
const sheet = ss.getActiveSheet();
// アクティブセルの取得
const active_cell = sheet.getActiveCell();
// アクティブセルの行番号を取得
const active_row = active_cell.getRow();
// アクティブセルの列番号を取得
const active_col = active_cell.getColumn();
// 書き込み範囲のrangeを取得。アクティブセルから5行と5列だがvaluesのlengthを取っている
const range = sheet.getRange(active_row, active_col, values.length, values[0].length);
// セルへ値書き込み
range.setValues(values);
// セルの幅を調整する
for (let i = active_col; i < active_col + values[0].length; i++){
sheet.setColumnWidth(i, 100);
}
// セルの高さを調整する
for (let i = active_row; i < active_row + values.length; i++){
sheet.setRowHeight(i, 100);
}
// テキストを調整する
range.setFontSize(20); // フォントサイズを指定
range.setHorizontalAlignment('center'); // 水平方向の位置を指定
range.setVerticalAlignment('middle'); // 垂直方向の位置を指定
range.setBackgroundRGB(255,255,255); // 背景色を指定
range.setBorder(true,true,true,true,true,true,"RED", SpreadsheetApp.BorderStyle.SOLID_THICK); // 罫線の指定
}