2021/12/11に更新

【GASで時短】ビンゴカードを生成する

スプレッドシートゲーム

現在選択されているセルを起点に、5x5のビンゴカードを生成するGoogle Apps Scriptです。これを使えばオンライン忘年会でもビンゴ大会ができる・・・かも?

こんな悩みを解決します


  • ビンゴ大会をオンラインでやりたいので、ビンゴカードを自動的に生成したい(ちょっと無理がありますが・・・)

用意するもの


特にありません。スプレッドシートに組み込むだけです。

このスクリプトで出来ること


現在選択されているセルを起点として、5 × 5のビンゴカードを出力します。
ビンゴの数字は完全にランダムなものではなく、
1列目:1〜15
2列目:16〜30
3列目:31〜45
4列目:46〜60
5列目:61〜75
このようになっているそうで、このスクリプトもその仕様に準拠しています。
セルの幅や高さ、フォントサイズも自動的に調整されます。

使い方


1.スクリプトの実行

スクリプトを起動します。
メニューから「ビンゴカードを生成」を実行します。

このようなビンゴカードが出力されます。

2.ビンゴを楽しむ

出力されたビンゴカードで、ビンゴをお楽しみください!
関連アプリ(このページの一番下)にある「選択すると色がついたり消えたり」と組み合わせると色付けが簡単かもしれません。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * 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); // 罫線の指定

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp