この記事でわかること
- Google Apps ScriptでGoogleフォームに質問を追加する方法がわかる。
スプレッドシートからGoogleフォームの質問の選択肢を追加したい。
Google Apps Script(GAS)を使ってGoogleフォーム(Google Forms)に質問を追加します。
なぜGASを使うかというとプルダウン形式の質問で選択肢(リストアイテム)が多い質問があり手入力が大変だったからです。Googleスプレッドシートに選択肢のデータソースがあるのでそれを活用します。
使用するGoogleフォーム
▲今回のターゲットとなるGoogleフォームです。
▲プルダウン形式の質問があり108個の選択肢(言語)を追加する必要がありました。選択肢が多いのでGASでやれたらいいなと思いました。
補足追記:GASじゃなくてもコピペでできた。
スプレッドシートの列をコピーして、フォームの 選択肢入力画面のところにペーストすればブラウザでマウス操作するだけで選択肢を一括追加できることがわかりました。ですので今回のケースではGASよりもマウスでのコピペ操作の方が楽かもしれないです。
ですが、スプレッドシートのA列とB列を文字列結合して回答を追加する場合など、もう少し面倒なことをする場合にはこの記事で紹介するようなGASが活用できるシーンはあるかと思います。
(STEP1)スプレッドシートの準備
リストアイテムの元データとなるスプレッドシートを用意しましょう。下図のシートを用意しました。こちらのシートはB列以降にもデータが入っているため、必要となるA列だけ抜き取って使用することにします。
▲スプレッドシートのデータです。この情報をもとにGoogleフォームの質問を作成します。今回使用するのはこのシートのA列のみです。
(STEP2)Google Apps Scriptでスクリプトを作成する。
今回は、スプレッドシートのコンテナバインドスクリプトとして作成していますが、フォームのコンテナバインドから作成してもかまいません。
▲コンテナバインドスクリプト、スタンドアローンスクリプトの作成方法は上の記事で解説していますのでご覧ください。
function addQuestions() { //activeなスプレッドシートの1枚目のシートを取得する。 let srcst = SpreadsheetApp.getActive().getSheets()[0]; //回答に使用するスプレッドシートのデータA列のみを取得する。 let values = srcst.getRange(1, 1, srcst.getLastRow() , 1).getValues(); //フォームをフォームIDから取得する。 let fm = FormApp.openById(formId); //フォームにリストアイテム形式の質問を追加する。 //質問1 let q1 = fm.addListItem(); q1.setTitle("翻訳前言語"); //質問のタイトル q1.setHelpText("翻訳前の言語を選択してください。"); //質問の説明文 q1.setChoiceValues(values); //質問の選択肢 q1.setRequired(true); //回答が必須かどうか //質問2 let q2 = fm.addListItem(); q2.setTitle("翻訳後言語"); q2.setHelpText("翻訳後の言語を選択してください。"); q2.setChoiceValues(values); q2.setRequired(true); }
▲上記のコードを記述します。
スタンドアローンスクリプトで作成した場合はSpreadsheetApp.getActive()
を、SpreadsheetApp.openById
に変更する必要があります。
GASを実行しましょう。
フォームを確認してみましょう。「翻訳前言語」「翻訳後言語」という2つの質問が追加できているかと思います。
Google Apps Scriptコードの解説
//activeなスプレッドシートの1枚目のシートを取得する。 let srcst = SpreadsheetApp.getActive().getSheets()[0]; //回答に使用するスプレッドシートのデータA列のみを取得する。 let values = srcst.getRange(1, 1, srcst.getLastRow() , 1).getValues();
▲スプレッドシートのA列を変数に格納します。
フォームの取得
//フォームをフォームIDから取得する。 let fm = FormApp.openById(formId);
▲フォームを操作するにはまずFormApp.openById()
でターゲットとするフォームを取得します。(開きます。)
フォームにリストボックスの質問を追加する
let q1 = fm.addListItem();
▲addListItem
でリストボックスタイプの質問を追加します。
フォームにリストボックスの質問を追加する
q1.setTitle("翻訳前言語"); //質問のタイトル q1.setHelpText("翻訳前の言語を選択してください。"); //質問の説明文 q1.setChoiceValues(values); //質問の選択肢 q1.setRequired(true); //回答が必須かどうか
▲追加したリストボックスタイプの質問に追加情報を設定します。
setTitle() | 質問のタイトルを追加します。 |
setHelpText() | 質問の説明文を追加します。 |
setChoiceValues() | 質問の選択肢をリスト形式でわたします。ここではスプレッドシートから取得したリスト変数を渡しています。 |
setRequired() | 回答が必須かどうかを設定します。 |
関連記事
まとめ
この記事では、Googleフォームの回答をスプレッドシートから作成する方法について解説しました。
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
GAS初学者の方がテキスト1冊買うならこれ一択です。幅開く網羅されているので基本が身に付きます。
動画で学ぶならコチラがおすすめです。UdemyのGAS講座はいくつかありますが、他の講座と比較しても圧倒的レビュー数と高評価です。万が一の返金保証があるので安心して購入ができます。
▲Google Apps Scriptの入門書として間違いのない一冊です。ノンプログラマーの方にもわかりやすく解説されています。V8ランライム対応版にアップデート済みため情報も新しいです。
▲こちらGoogle Apps Scriptの本ではないですが、Google Workspace(旧G Suite)を自動化したりアプリ化するには、Google AppSheetという選択肢もあります。Google AppSheetはノーコードでアプリを作成できます。
▲Google for Educationの使い方にとどまらず実際の運用ででてくる問題への対処方法などもかかれていて面白いです。教師の方達の共著なので現実的な内容となっています。