複数のGoogleフォームの回答を同一のスプレッドシートにまとめる方法

複数のGoogleフォームの回答を同一のスプレッドシートにまとめる方法

Googleフォームを活用してアンケートや案件の受注フォームを作成している場合、普通に作成したのでは全て別のシートに回答結果が蓄積されます。

これでは、回答結果を管理する側が毎回別のシートを参照しなければならず、手間が発生します。

ゆう
ゆう

どのフォームでも自動的に同じシートに蓄積されていけば楽なのにな〜。

そこで、本記事では複数のGoogleフォームの回答を同一のスプレッドシートにまとめる方法をご紹介します。

ゆう
ゆう

参照するべきシートがひとつになるので、あなたの業務効率化に貢献すること間違いなし!

作業手順

複数のGoogleフォームの回答をひとつのスプレッドシートにまとめていくためには、以下の手順で作業を行えばOKです。

Googleフォームの回答をまとめる作業手順
  1. Googleフォームを作成する
  2. 回答集積用スプレッドシートを作成する
  3. GASを打ち込む
  4. トリガー設定をする

Googleフォームを作成する

まずは回答を収集したいGoogleフォームを作成しましょう。

試しに、 質問を以下のように3つ設定したフォームを作成してみます。

  • 黒と白はどちらが好きですか?
  • 奇数と偶数はどちらが好きですか?
  • 今の自分を5点満点で評価するとしたら何点ですか?

作成するとこんな感じ。

Googleフォームでアンケートを作成した画像

フォーム名は「アンケート1」にしておきます。

ゆう
ゆう

質問内容は適当です。

回答集積用スプレッドシートを作成する

フォームを作成したら、次に回答を管理するためのスプレッドシートを作成しましょう。

アンケートの回答集積用スプレッドシート作成画像

わかりやすいように、「フォーム回答一覧」などの名称にしておくと良いでしょう。

スプレッドシートを作成したら、1行目に質問項目のタイトルを入れておきます。

今回は「好きな色」「好きな数字」「評価」と入力しておきます。

GASを打ち込む

フォームとスプレッドシートの準備ができたので、自動的に回答をスプレッドシートに転記するスクリプトを入力します。

Googleフォームのメニュー欄からApp Scriptを選択して、以下の画面に到達するようにしましょう。

Googleフォームからスクリプトエディタへ遷移するための動線を示した図
3点リーダ、スクリプトエディタの順にクリックしましょう。
スクリプトエディタ初期画面
スクリプトエディタをクリックすると、こんな画面になります。

次に、

GAS
function myFunction() {
  
}

など書いているものは、「Ctrl + A」で全選択して削除して、以下のコードをそのまま新しく貼り付けてください。

GAS
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

スプレッドシートのIDは、アドレスバーに表示されるアドレス部分に記載されています。

https://docs.google.com/spreadsheets/d/XXX/edit#gid=0 の「XXX」の部分のことです。

ゆう
ゆう

これによって、プログラムがどのスプレッドシートを開けばいいのかがわかるようになります。

スプレッドシートのIDを入力できたら、「Ctrl + S」で保存しておきましょう。

名前とかは別に変える必要はありません。無題のプロジェクトのままでOKです。

トリガー設定をする

コードを保存できたら、このコードが発生するトリガー(条件)を設定します。

「イベントの種類を選択」の部分を「フォーム送信時」にして保存しましょう。

注意点

トリガーを設定して保存しようとするとアカウントの選択を促されたのち、警告メッセージが出てきます。以下の手順で操作してください。

  • 左下の「詳細」をクリック
  • 「無題のプロジェクト(安全ではないページ)に移動」をクリック
  • 「許可」をクリック
ゆう
ゆう

これをしないとせっかく入れたGASが動かないのでご注意ください。


ここまでできれば作業終了です。

試しにフォームの回答をしてみて、準備したスプレッドシートに回答結果が反映されたら成功です。

もしここまで作業をしてうまくいかない場合は、以下をチェックしてみてください。

  • スプレッドシートのIDを間違えていないか
  • シート名を間違えていないか
  • トリガーの設定ができているか
  • 許可をしているか
ゆう
ゆう

作成したフォームを今後複製するときには、1つだけ注意点があります。

フォーム複製時の注意点

GASを打ち込んだフォームを複製すれば、GASもそのまま引き継がれます。

コード自体を編集する必要はありませんが、毎回許可を与える作業が必要になることにご注意ください。

ちょっとしたアレンジ

フォームの回答内容以外にも、スクリプトを工夫すれば必要そうな情報をスプレッドシートに持ってくることができます。

フォームのタイトルを1列目に持ってくる方法

フォームのタイトルを1列目に持ってくる場合は、function onFormSubmit(e)以下のコードを、次に記載する内容に変更してください。

GAS
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)以下のコードを、次に記載する内容に変更してください。

GAS
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)以下のコードを、次に記載する内容に変更してください。

GAS
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があればだいたいのことができる、と思ってていただければいいんじゃないかと思います。

今後ほかにも有用なものがあったらご紹介していきます。

スポンサーリンク