Googleフォームを活用してアンケートや案件の受注フォームを作成している場合、普通に作成したのでは全て別のシートに回答結果が蓄積されます。
これでは、回答結果を管理する側が毎回別のシートを参照しなければならず、手間が発生します。
どのフォームでも自動的に同じシートに蓄積されていけば楽なのにな〜。
そこで、本記事では複数のGoogleフォームの回答を同一のスプレッドシートにまとめる方法をご紹介します。
参照するべきシートがひとつになるので、あなたの業務効率化に貢献すること間違いなし!
目次
作業手順
複数のGoogleフォームの回答をひとつのスプレッドシートにまとめていくためには、以下の手順で作業を行えばOKです。
- Googleフォームを作成する
- 回答集積用スプレッドシートを作成する
- GASを打ち込む
- トリガー設定をする
Googleフォームを作成する
まずは回答を収集したいGoogleフォームを作成しましょう。
試しに、 質問を以下のように3つ設定したフォームを作成してみます。
- 黒と白はどちらが好きですか?
- 奇数と偶数はどちらが好きですか?
- 今の自分を5点満点で評価するとしたら何点ですか?
作成するとこんな感じ。
フォーム名は「アンケート1」にしておきます。
質問内容は適当です。
回答集積用スプレッドシートを作成する
フォームを作成したら、次に回答を管理するためのスプレッドシートを作成しましょう。
わかりやすいように、「フォーム回答一覧」などの名称にしておくと良いでしょう。
スプレッドシートを作成したら、1行目に質問項目のタイトルを入れておきます。
今回は「好きな色」「好きな数字」「評価」と入力しておきます。
GASを打ち込む
フォームとスプレッドシートの準備ができたので、自動的に回答をスプレッドシートに転記するスクリプトを入力します。
Googleフォームのメニュー欄からApp Scriptを選択して、以下の画面に到達するようにしましょう。
次に、
function myFunction() {
}
など書いているものは、「Ctrl + A」で全選択して削除して、以下のコードをそのまま新しく貼り付けてください。
var ss = SpreadsheetApp.openById("XXX"); // XXXの部分にスプレッドシートのIDを入力する
var sh = ss.getSheetByName("シート1");
var lr = sh.getLastRow();
function onFormSubmit(e){
var data = e.response.getItemResponses();
for (var i=0; i<data.length; i++) {
sh.getRange(lr+1,i+1).setValue(data[i].getResponse());
}
}
コードを貼り付けたら、1行目のXXXの部分に回答集積用として作成したスプレッドシートのIDを入力してください。
これによって、プログラムがどのスプレッドシートを開けばいいのかがわかるようになります。
スプレッドシートのIDを入力できたら、「Ctrl + S」で保存しておきましょう。
名前とかは別に変える必要はありません。無題のプロジェクトのままでOKです。
トリガー設定をする
コードを保存できたら、このコードが発生するトリガー(条件)を設定します。
「イベントの種類を選択」の部分を「フォーム送信時」にして保存しましょう。
これをしないとせっかく入れたGASが動かないのでご注意ください。
ここまでできれば作業終了です。
試しにフォームの回答をしてみて、準備したスプレッドシートに回答結果が反映されたら成功です。
もしここまで作業をしてうまくいかない場合は、以下をチェックしてみてください。
- スプレッドシートのIDを間違えていないか
- シート名を間違えていないか
- トリガーの設定ができているか
- 許可をしているか
作成したフォームを今後複製するときには、1つだけ注意点があります。
ちょっとしたアレンジ
フォームの回答内容以外にも、スクリプトを工夫すれば必要そうな情報をスプレッドシートに持ってくることができます。
フォームのタイトルを1列目に持ってくる方法
フォームのタイトルを1列目に持ってくる場合は、function onFormSubmit(e)以下のコードを、次に記載する内容に変更してください。
function onFormSubmit(e){
var data = e.response.getItemResponses();
var formName = FormApp.getActiveForm().getTitle();
for (var i=0; i<data.length; i++) {
sh.getRange(lr+1,i+2).setValue(data[i].getResponse());
sh.getRange(lr+1, 1).setValue(formName);
}
}
たとえば、複数のフォームの中のどれに回答してもらえたのかを管理するときに使用すると便利です。
回答時間を1列目に持ってくる方法
フォームの回答がいつされたのかを記録しておきたい場合は、function onFormSubmit(e)以下のコードを、次に記載する内容に変更してください。
function onFormSubmit(e){
var data = e.response.getItemResponses();
var timeStamp = e.response.getTimestamp();
for (var i=0; i<data.length; i++) {
sh.getRange(lr+1,i+2).setValue(data[i].getResponse());
sh.getRange(lr+1,1).setValue(timeStamp);
}
}
回答期限を過ぎた回答者や1日のうちに回答した回答者を管理する際に有用なコードです。
回答の連番を1列目に持ってくる方法
回答番号を1列目に持ってきたい場合は、function onFormSubmit(e)以下のコードを、次に記載する内容に変更してください。
function onFormSubmit(e){
var data = e.response.getItemResponses();
for (var i=0; i<data.length; i++) {
sh.getRange(lr+1,i+2).setValue(data[i].getResponse());
}
}
そして、回答集積用スプレッドシートを作成したときの3項目の左側に1列追加して、「連番」と入力します。
その後A2セルに以下の数式を打ち込んでください。
=arrayformula(if(B2:B="","",row(B2:B)-1))
この数式によって、回答が入力されていくと自動的に連番が記録されていきます。
複数人で回答結果を眺めて議論する際などには、連番があると便利かもしれません。
まとめ
複数のGoogleフォームの回答結果を1つのスプレッドシートにまとめる方法をご紹介しました。
GASがあればだいたいのことができる、と思ってていただければいいんじゃないかと思います。
今後ほかにも有用なものがあったらご紹介していきます。