【GAS】Googleスプレッドシートに並べたクイズをランダム出題する

公開:2020/10/05
更新:2020/10/05
3 min読了の目安(約3300字TECH技術記事

はじめに

Googleスプレッドシートに並べてある問題から、ランダムに1つ選んで出題するクイズ機能を作ってみたので、紹介したいと思います。

作ったもの

  1. Googleスプレッドシートに問題と答えを並べます。

  2. メニューからクイズ/出題を選択します。

  3. スプレッドシートに登録された問題からランダムに1つ選び、出題します。

  4. 答えを入力して、OKを押すと...

  5. 自分の入力と解答が表示されます。

覚えた英単語の復習、専門的な勉強、数学の復習、ツールの使い方の暗記、などといった様々な事柄に活用できるのではないでしょうか。

クイズの作り方

1. スクリプトエディタを開く

好きなスプレッドシートを開き、メニューからツール -> スクリプトエディタ を選択します。

2. スクリプトの編集

スクリプトエディタが開くので、以下のスクリプトを貼り付けて保存します。

// シートを開いたタイミングで実行
function onOpen(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在開いているGoogleスプレッドシート
  var myMenu= [];
  myMenu.push({name: "出題", functionName: "showQuiz"}); // メニューへ項目の登録
  sheet.addMenu("クイズ", myMenu); // メニュー追加
}
// 問題をランダムに1つ選び、ポップアップとして出す
function showQuiz() { 
  const ui = SpreadsheetApp.getUi(); 
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 現在開いているシート
  const lastRow = sheet.getLastRow(); // 最後の行
  const row = Math.floor((lastRow - 1) * Math.random()) + 2; // ランダム抽選  
  const range_question = sheet.getRange(row, 1); // セルの取得(問題)
  const range_answer = sheet.getRange(row, 2); // セルの取得(答え)
  
  // 問題を出す
  const response = ui.prompt("問題 " + (row - 1), range_question.getValue(), ui.ButtonSet.OK);
  // OKを押したら答えを出す
  const response_complete = ui.alert(
    "答え", 
    "【問題】\n" + range_question.getValue() + "\n\n【入力】\n" + response.getResponseText() + "\n\n【答え】\n" + range_answer.getValue(), ui.ButtonSet.OK);
}

プロジェクト名は simple_quiz としておきます。

3. Googleスプレッドのリロード

Googleスプレッドシートのページを再読み込みすると、メニューが追加されます。

4. 出題の実行

クイズ -> 出題 を選択します。

5. スクリプトの承認

スクリプトを実行しようとすると、承認が要求されます。

指示に従ってGoogleアカウントへログインすると以下のような画面が出てくるので、詳細をクリックします。

赤線で囲った部分をクリックします。

simple_quizの許可を求められるので、許可します。

以上でスクリプトを実行することができるようになり、クイズ機能が動くようになります。

6. クイズ機能を試してみる

  1. メニューのクイズ -> 出題 を選択します。

  2. スプレッドシートからランダムに抽選された問題が表示されます

  3. 試しにdecemberと入力して、OKをクリックします。

  4. 自分の入力と答えが表示されました。