スプレッドシートからGoogleフォームを自動作成!クイズ形式に最適なGAS活用法

Google Apps Script
この記事は約9分で読めます。

スプレッドシートに入力した問題文や選択肢を、そのままGoogleフォームでクイズにしたい——そんな手間を省く方法があります。

今回の記事ではGoogle Apps Scriptを利用して、スプレッドシートのデータから自動的にGoogleフォームを作成する手順をステップバイステップで解説します。個人情報は隠して、安全に効率よくクイズを作成してみましょう。

1. 全体の流れ

スプレッドシートを用意し、質問や選択肢、正解が並んだ表を作成します。
Google Apps Scriptエディタを開き、提供するスクリプトを貼り付けます。
スクリプト中の「スプレッドシートID」や「シート名」を、ご自身のスプレッドシート情報に変更します。
スクリプトを実行すると、新しいGoogleフォーム(クイズ形式)が自動的に作成され、問題と選択肢、正解がセットされた状態で完成します。

2. スプレッドシートの準備

A列:問題文
B列:選択肢(各選択肢を改行で区切り)
C列:正解(B列に書かれた選択肢のうち正解となる文字列と完全一致するよう記載)

たとえば下記のような構成になっているとします(1行目はヘッダー行):

質問文 選択肢 正解
問題1 1. 選択肢A\n2. 選択肢B 1. 選択肢A
問題2 1. AAA\n2. BBB\n3. CCC 3. CCC

注意: 本文中に載せる例では個人を特定する情報は掲載しないでください。実際にはシート名やIDをご自身のものに置き換えて運用します。

3. Google Apps Script(GAS)の準備

  1. Googleドライブ上で「新規」→「その他」→「Google Apps Script」を選択し、新しいGASプロジェクトを作成します。
  2. もしくはスプレッドシートを開いて、ツールバーから「拡張機能」→「Apps Script」を選んでもOKです(スプレッドシートと同一プロジェクトで管理可能)。
  3. エディタが開いたら、後述のコードを貼り付けてください。

4. コード解説(分割して説明)

ここではコード全体をいくつかに分割しながら解説していきます。最後に全文をまとめて掲載します。

(1)スプレッドシート情報の取得


// スプレッドシートのIDやシート名を指定(IDはURLから取得)
function createQuiz() {
  var spreadsheetId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // 例: ご自身のスプレッドシートIDに変更
  var sheetName = 'シート1'; // 例: データが入っているシート名に変更

  // スプレッドシートからデータを取得
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var sheet = ss.getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();
  • spreadsheetId: スプレッドシートのURLの「/d//editの間」にある英数字がIDです。
  • sheetName: そのスプレッドシート内にあるシート名を設定してください。

getDataRange().getValues() でシート内の全データを配列として取得しています。この段階で、dataという2次元配列に、各行・列の情報が格納されます。

(2)Googleフォームの作成とクイズ形式設定


// 新しいフォームを作成し、クイズ形式に設定
var form = FormApp.create('社内テストクイズ');
form.setIsQuiz(true);

FormApp.create('...') で、指定したタイトルのフォームを新規作成します。
setIsQuiz(true) とすることで、クイズ(正答付き)フォームとして設定できます。

(3)問題文・選択肢・正解の処理


// ヘッダー行を除いてループ処理(1行目がヘッダーの場合)
for (var i = 1; i < data.length; i++) {
  var questionText = data[i][0];      // 質問文(A列)
  var choicesText = data[i][1];       // 選択肢(B列/改行区切り)
  var correctAnswer = data[i][2];     // 正解(C列)

  // 改行で選択肢を分割
  var choicesArray = choicesText.split('\n');
  • data[i][0] がA列にあたるため、問題文になります。
  • data[i][1] がB列にあたるため、選択肢テキストを改行で区切っています。split('\n')を使うことで、複数の選択肢を配列に変換しています。
  • data[i][2] がC列にあたるため、正解として使います。

(4)フォームへの選択肢追加と正解設定


// 複数選択式のアイテムを作成
var item = form.addMultipleChoiceItem();
item.setTitle(questionText);

// 各選択肢をフォーム用に作成(正解の場合は true を設定)
var formChoices = choicesArray.map(function(choice) {
  // 前後の空白を除去して比較
  return item.createChoice(choice, choice.trim() === correctAnswer.trim());
});
item.setChoices(formChoices);
}

form.addMultipleChoiceItem() で複数選択式の問題をフォームに追加しています。
item.createChoice(テキスト, 正解かどうかのBoolean) によって選択肢を1つずつ生成し、正解か否かを第2引数で指定しています。
choice.trim() === correctAnswer.trim()true のとき、その選択肢を正解に設定します。
全ての選択肢を配列formChoicesに詰めた後、item.setChoices(formChoices) で一括設定しています。


Logger.log('フォームの作成が完了しました: ' + form.getEditUrl());
}

ループ終了後に、form.getEditUrl() で作成したフォームの編集用URLをログ出力しています(実行後にGASのログから確認可能)。

コード全文

まとめると、次のようなコードになります。実際には「spreadsheetId」「sheetName」の部分をご自身の環境に合わせて変更してください。


function createQuiz() {
  // スプレッドシートのIDやシート名を指定(IDはURLから取得)
  var spreadsheetId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // 例: ご自身のスプレッドシートID
  var sheetName = 'シート1'; // 例: データが入っているシート名

  // スプレッドシートからデータを取得
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var sheet = ss.getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();

  // 新しいフォームを作成し、クイズ形式に設定
  var form = FormApp.create('社内テストクイズ');
  form.setIsQuiz(true);

  // ヘッダー行を除いてループ処理(1行目がヘッダーの場合)
  for (var i = 1; i < data.length; i++) {
    var questionText = data[i][0];      // 質問文(A列)
    var choicesText = data[i][1];       // 選択肢(B列/改行区切り)
    var correctAnswer = data[i][2];     // 正解(C列)

    // 改行で選択肢を分割
    var choicesArray = choicesText.split('\n');

    // 複数選択式のアイテムを作成
    var item = form.addMultipleChoiceItem();
    item.setTitle(questionText);

    // 各選択肢をフォーム用に作成(正解の場合は true を設定)
    var formChoices = choicesArray.map(function(choice) {
      return item.createChoice(choice, choice.trim() === correctAnswer.trim());
    });
    item.setChoices(formChoices);
  }

  Logger.log('フォームの作成が完了しました: ' + form.getEditUrl());
}

5. 実行と確認

  1. GASエディタでこのスクリプトを貼り付け、「保存」 します。
  2. 「実行」 ボタンを押すと、権限確認のポップアップが表示されるため、指示に従って権限を付与します。
  3. スクリプトが最後まで実行されると、Logger.log(...) でフォーム編集用URLが表示されます。Apps Scriptの実行ログ(表示ログ) からURLをコピーしてアクセスし、フォームが正しく生成されているかを確認してください。

ポイント: クイズの点数設定やフィードバックを自動設定したい場合は、Google Apps Script公式ドキュメントを参照しながら setPoints()setFeedback() などのメソッドを追加実装できます。

6. まとめ

  • スプレッドシートで問題と選択肢、正解を整理し、GASスクリプトを用いてフォームを自動生成すると、多数の問題を一括作成できて便利です。
  • 公開時は個人情報に注意して実施し、スクリプトの冒頭にあるspreadsheetIdなどは必ずご自身のものに差し替えてください。
  • クイズ形式のフォームであれば、スコアや自動採点が可能になります。社内テストやクイズ企画などに役立ててみてください。

以上がスプレッドシートからGoogleフォーム(クイズ形式)を自動作成する一連の手順です。ぜひ活用して、作業の効率化にお役立てください。

コメント