今回は、Googleフォームの回答内容を、好みの形でスプレッドシートに集計する方法をご紹介します。
スプレッドシートからGoogleフォームを作成すると、「フォームの回答」というシートが自動で生成され、Googleフォームからの回答を一応は並べてくれるのですが、フォームの質問内容を変えるとすぐレイアウトが崩れたりして思うように集計できない場合も多いです。
そこで今回は、独自にスクリプトを書いてGoogleフォームのアンケート内容をスプレッドシートに集計する方法をご紹介します。
Googleフォームを作成する
スプレッドシートに紐づいたGoogleフォームは、スプレッドシート上部の「ツール」⇒「フォームを作成」から作成する事ができます。
今回は下記のように、回答欄が「お名前」「ご意見」という、シンプルなフォームを作成します。
シートを作成する
次にアンケートを集計するためのシートを作成します。
シート名は「アンケート集計」として、セルA1に「回答日時」、セルB1に「お名前」、セルC1に「ご意見」と記載します。
ちなみにフォームを作成した際、「フォームの回答 1」というシートが出来ています。
ここにもGoogleフォームの回答内容が自動で集計されていきますが、冒頭の理由から今回は無視します(笑)
(ただしスプレッドシートとリンクしたフォームが存在する限り、このシートは削除する事ができません)
Googleフォームの回答内容をスプレッドシートに集計するスクリプト
Googleフォームの回答内容をスプレッドシートに集計するスクリプトは、下記のサンプル1のように記述します。
・サンプル1
function form(e) { var timeStamp = e.namedValues[“タイムスタンプ”]; var ss_id = ‘[スプレッドシートのIDを記載]’; //スプレッドシートのIDを指定 sh.getRange(last_row + 1, 1).setValue(timeStamp); } |
スプレッドシートIDの取得方法についてはこちらの記事をご参照ください。
このサンプル1ですが、まず、
function form(e)
では、Googleフォームの回答結果がeの中に配列で格納されます。
var timeStamp = e.namedValues[“タイムスタンプ”];
var name = e.namedValues[“お名前”];
var opinion = e.namedValues[“ご意見”];
では、
e.namedValues[]
で配列の中の「タイムスタンプ」「お名前」「ご意見」の回答内容をそれぞれ取得し、変数timeStamp、name、opinionに代入します。
また今回はスプレッドシートIDで指定し、シート名も指定しています。
var last_row = sh.getLastRow();
でシートの最終行の値を取得し、変数timeStamp、name、opinionに代入された値を、
sh.getRange(last_row + 1, 1).setValue(timeStamp);
sh.getRange(last_row + 1, 2).setValue(name);
sh.getRange(last_row + 1, 3).setValue(opinion);
のように、行数に
last_row + 1
を指定する事で、最終行の次の行へ、書き込んでいきます。
トリガーを設定する
これでスプレッドシート、Googleフォーム、スクリプトの準備ができましたが、今回のスクリプトを実行するにはトリガーを設定する必要があります。
トリガーの設定は、スクリプトエディタ上部の「編集」⇒「現在のプロジェクトのトリガー」から行います。
現在のプロジェクトトリガーを開くと、「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」というリンクが出ますので、これをクリックすると、「実行」と「イベント」という設定内容が表示されますので、実行には今回実行する関数である「form」を選択し、イベントは「スプレッドシートから」と「フォーム送信時」を選択し、「保存」をクリックします。
ここで「承認が必要です」という画面が表示された場合、こちらの記事をご参照いただき承認を進めてください。
これで先ほど作成したGoogleフォームから回答が送信された場合、関数名「form」のスクリプトが実行されます。
ちなみに少し話がそれますが、スクリプトの内容を大きく変更したりした時など、稀にトリガーが作動しなくなる場合がありますので、その時は「現在のプロジェクトのトリガー」画面の左側にある、×ボタンを押していったんトリガーを削除してから再度設定し直してみてください。
実行結果
スクリプト実行後は、「アンケート集計」シートには下記のように記載されます。
var last_row = sh.getLastRow();
により、フォームから回答が送信され、スクリプトが実行されるたびに最終行を取得しますので、
last_row + 1
により常に最終行の1つ下へと回答内容が記載されていきます。