下記のような Google スプレッドシート に問題・出題形式・選択肢・回答・配点を集約しておき、Google フォーム を自動で作成します。
Google フォーム のテストを作成
[1] スプレッドシート の準備
こちらからスプレッドシートをコピーしてください。
[2] プログラムを開いてみましょう!
Apps Script からプログラムを確認します。
拡張機能の Apps Script をクリックすると、プログラムの中身を確認できます。
[3] 実行
サンプルで問題が入っていますので、そのまま▶️(実行)をクリックしてみましょう!
ここで実行をクリックすると、権限の承認をする必要があります。
不安な方は、↓の記事を参考にして許可をしてください。
プログラムが実行し終わると下記の表示が、スプレッドシートに現れます!
Google ドライブ を確認してみましょう!
上記のようにフォームができていますね!
[4] 設定について
設定 を確認すると、テストにする にチェックが入っています!
もし、送信直後に採点をしたい場合には、
- 送信直後
- 不正解だった質問
- 正解
- 点数
の項目を オン にしましょう!
また、今回作成された問題は必須になっていないので、必須にしたい場合は、下記のように必須をオンにしてください。
また、ここまでのフォーム作成のプロセスは、スプレッドシートに用意されているテスト作成のボタンからもできます!
問題をランダムに抽出して Google フォーム を作成
次に、複数の問題を用意しておき、その中から指定した数の問題をランダムに抽出して作成する方法です。
[1] スプレッドシートの準備
こちらからスプレッドシートをコピーしてください。
そして、プログラムを開いてみましょう。
プログラムは、左側にある ランダム.gs をクリックすると確認できます。
[2] 実行(問題をランダムに抽出)
今回は、問題をランダムに抽出するという手順を追加しています!
まずは、実行するプログラムの名前が、デバッグの右隣に表示されています。
selectQuestions になっていることを確認して▶️(実行)クリックをしてみましょう。
また権限の承認が出てきますので、先ほどと同じように許可をしてください!
今回は、複数ある問題リストから、5つの問題を抽出するようになっています。
黄色の出題数というセルで問題数を決定しています。
スプレッドシートに 問題抽出シート というのがあり、そこに今回抽出された問題が表示されています!
[3] 実行(フォーム作成)
それでは、フォームを作成してみましょう!
実行するプログラム名を createForm2 にして実行をしてください。
その後 Google ドライブ を確認すると、テストのフォーム が作成されています。
うまくいきましたか??
ただ、いちいちプログラムを開いて、実行するのは面倒ですので、メニューバーに表示するという方法を追加してみたいと思います!
メニューバーの追加
それでは、プログラムをコピペで改良してみましょう!
下記のプログラムを、プログラムの先頭に貼り付けてしてみましょう!
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('テスト作成');
menu.addItem('すべての問題でフォーム を作成', 'createForm1');
menu.addItem('ランダムに問題選択', 'selectQuestions');
menu.addItem('問題抽出シートからフォーム を作成', 'createForm2');
menu.addToUi();
}
function createForm1(){
ShtName = 'フォームテスト';
CreateTestForm(ShtName);
}
function createForm2(){
ShtName = '問題抽出シート';
CreateTestForm(ShtName);
}
↓のようなプログラムにします。
プログラムを編集したので、💾(保存)をしてください。
それでは、この追加したプログラムを実行してみましょう!
onOpen に名前を変えて実行してみましょう。
そうすると、このように、メニューバーに新しくテスト作成というのができます!
ここから実行することで、いちいち App Script を開かなくていいですね!
メニューバーについては、解説は↓でしています。
ここまでどうでしょうか!?
できないところがありましたら、コメント等で気軽にお聞きください!
フォームのURLの取得
メニューバーの追加までをできた方は、最後に、もう一つ機能を追加してみましょう。
作成したフォームのURLを取得して、スプレッドシートに表示するというものです。
// フォーム作成完了表示
var sht3 = SpreadsheetApp.getActive().getSheetByName("フォームのURL");
sht3.getRange(1,2).setValue(Form.getPublishedUrl());
sht3.getRange(2,2).setValue(Form.getEditUrl());
上記のプログラムをプログラムの一番下に下記のようなプログラムがあります。
Browser.msgBox(FormTitle+'の作成が完了しました。\\nフォームはGoogleDriveの『ドライブ』に存在します。');
この上に入れて、保存をすると出来上がります!
完成すると↓のような感じですね。
実行してみましょう!
フォームのURLのシートにURLが表示されています。
最後に、完成版のスプレッドシート
これまでのプログラムが入っていますので、うまくいかなかった方は、どこが違うのかを比べてみると良いですね!
こちらからスプレッドシートをコピーしてください。
この記事のプログラムは、こちらの記事と同じ内容になっていますが、どちらも Google for Education 認定 トレーナー 鈴木江里 のトレーニング資料になります。
コメント
完成版のスプレッドシートの方を使わせていただいて、ランダム問題でフォームにテストを作ってみましたが、答えがフォームに上手く変換されませんでした。
完成版の方では答えは反映されないのでしょうか?
> ななし さん
コメントありがとうございます!
答えは反映されるようにしてあります!
シートの設定や必要事項が適切に入っていないと、正答を設定してくれないので、
Google スプレッドシート に入力する箇所があっているか、入力規則に沿って入れているかをご確認ください!
前回コメントされている方同様に、完成版のスプレッドシートの方を使わせていただいて、フォームテストを作成してみました!
非常に便利です!
入力箇所・規則も合っているはずですが、フォームの答え合わせの際に全て不正解となり、
「正解がありません」と表示されてしまいます。
その場合は、どういった箇所を確認すると良いでしょうか?
※列や行の削除はしておらず、コピーしたものの数字を◯と✕にしただけです
ご確認いただけますと幸いでございます
コメントありがとうございます!
作成された Google フォーム の編集画面を開いていただき、正答が正しく設定されているかをご確認いただければと思います。
正答は、選択肢と全く同じにしないといけないません。
まずはこれをご確認ください。
入力箇所・規則も合っているはずですが、フォームの答え合わせの際に全て不正解となり、
「正解がありません」と表示されてしまいます。
>> これは、チェックボックスということでしょうか?ラジオボタンでお試しいただけると良いかもしれません!!
どこかで設定が違う可能性があるのですが、あとは、実際の画面を見てみないと推測が難しいかもしれません….。
1月28日にコメントさせていただいたものです。
コードを変更 して上手く行ったのでサイトの主さんにも共有させていただきます。
配布いただいたコードの74行目
Choices_array.push(Form_object.createChoice(Sheet_data[i][j]+”, (Sheet_data[i][11]==Sheet_data[i][j])));
参照列が10になっておりました。
10のままですと、問題抽出シートのL列ではなくK列を参照することになり、選択肢8と照合されるみたいです。
参照列を11に変更したところ、無事に回答が反映されるようになりました。
改めて非常に便利なGASの配布ありがとうございます。
また利用させていただきます!