LoginSignup
2
2

【GAS】Googleフォームで4択問題を作る

Posted at

1 目的

Googleスプレッドシートに問題を入力しておいて、Googleフォームでテスト・クイズを作ります。問題の形式は4択問題、ラジオボタンとします。フォームに手入力するよりスプレッドシートの方が問題の入力がしやすそうですし、再利用なども簡単そうです。スプレッドシートのコンテナバインドプロジェクトです。

2 スプレッドシート

シートは、設定用シートと、問題用シートがあり、それぞれにデータを入力しておきます。

設定用シートは、例では、sheet1という名前にしています。フォームの題名、フォームの説明、問題のシートの名前、問題の数を入力しておきます。スクリプトを実行してフォームが作成されたら、設定シートにフォームのURL(編集用)が入ります。
Ss_sheet1.png

問題用シートは、1行目が項目名で、2行目以下に問題、正解、解説、配点を入力しておきます。空欄がないようにして下さい。(一応エラーにならないようにはしています)
Ss_sheet2.png

3 スクリプト

create4takuForm.gs
function create4takuForm() {
  const myspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const mysheet1 = myspreadsheet.getSheetByName('sheet1'); //設定用シート
  const data1 = mysheet1.getRange(2, 2, 4).getValues();
  const formTitle = data1[0]; //フォームの題名
  const formDescription = data1[1]; //フォームの説明
  const mysheet2 = myspreadsheet.getSheetByName(data1[2]); //問題用シート
  const quiz_num = data1[3]; //問題の数
  let myform =FormApp.create(formTitle); //フォームを作成
  myform.setDescription(formDescription);
  myform.setIsQuiz(true);  //テストにする
  myform.setShowLinkToRespondAgain(true); //再回答するリンクを表示
  myform.setCollectEmail(false); //メールアドレスを収集しない
//問題文データを取得
  let questionList = mysheet2.getRange(2, 1, quiz_num, 9).getDisplayValues();
  //空欄を無くす
  for(let i = 0; i < quiz_num; i++) {
    for (let j = 0; j < 9; j++) {
      if (questionList[i][j] == '') {
        questionList[i][j] = j;
      }
    }
  }
  for(i = 0; i < quiz_num; i++) {
    let choices;
    let item = myform.addMultipleChoiceItem(); //ラジオボタン
    //選択肢と正解かどうか
    choices = [
      item.createChoice(questionList[i][2],questionList[i][7]==1),
      item.createChoice(questionList[i][3],questionList[i][7]==2),
      item.createChoice(questionList[i][4],questionList[i][7]==3),
      item.createChoice(questionList[i][5],questionList[i][7]==4)
    ]
    //問題文をセット
    item.setTitle(questionList[i][0]+'\n'+questionList[i][1]); //問題のタイトルと問題
    item.setChoices(choices); //選択肢
    item.setPoints([questionList[i][8]]); //配点
    item.setRequired(true); //回答必須
    //フィードバックをセット
    item.setFeedbackForCorrect(FormApp.createFeedback().setText(questionList[i][6]).build());
    item.setFeedbackForIncorrect(FormApp.createFeedback().setText(questionList[i][6]).build());
  }
//作成したフォームの編集用URLをシートに書き込む
  mysheet1.getRange('B6').setValue(myform.getEditUrl());
//終了メッセージ
  console.log('フォーム「' + formTitle + '」を作成しました');
}

4 使い方

設定用シートにボタンを作ってそこからcreate4takuForm関数を実行するようにしました。フォームができると、設定用シートの「フォームのURL(編集用)」にURLが入りますので、ここからフォームを開き、設定をして、「送信」すればリンクができますのでこれを回答者に知らせます。「成績の発表」を「送信直後」にするように設定したかったのですが、GASでは出来そうになかったので手動で設定しています。問題用シートを作りためておけばどんどんフォームを作ることができます。

5 参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2