どうも。つじけ(tsujikenzo)です。このシリーズでは 「Googleフォームとイベントオブジェクトを極めよう」 について全6回でお送りします。今日は2回目です。
前回のおさらい
前回は、Googleフォームのかんたんなご紹介と、このシリーズの目標をお届けしました。
今回は、 「フォームの回答を集計しよう」 をお届けしします。
アジェンダ
1. ブラウザを印刷する
2. csvを出力する
3. スプレッドシートへ出力する
4. GASを実行する
ブラウザを印刷する
フォームには、回答を確認する [回答] タブが用意されていて、ブラウザによる回答の確認方法が 3通り あります。
1.集計ページを印刷する
[回答] タブをクリックすると、 テキストやグラフで集計を表示してくれます。
質問の種類によって、円グラフや棒グラフなど、目でみやすい集計が用意されています。
この画面は、印刷(PDF化)できます。 [回答] タブをクリックして、右上の [縦3点メニュー] から、 [印刷] をクリックします。
新しいタブが表示されます。
ブラウザの任意の場所を右クリックして [印刷] をクリックします。ショートカットキー[Ctrl + p]でも可能です。
印刷設定画面が表示されますので、PDFとして保存できます。 紙での印刷 は業務効率を著しく下げる行為です。受け取る側にとっても不便です。なるべくPDFにしてメールで配布しましょう。
2.回答を個別に印刷する
さきほどは、 「回答の集計」 をPDF化しましたが、 「個別の回答」 もすべて印刷できます。 [回答タブ] の [縦3点メニュー] をクリックします。
[すべての回答を印刷] をクリックします。
印刷画面が表示されます。回答ごとに改ページされていますので、見やすいですね。
3.1 回答の集計URLを公開する
さきほどPDF化した回答の集計は、 ある固定された時点の集計 をお知らせするものでした。アンケートのように回答が増え続ける場合は、回答者自信で、 「最新の回答の集計」 を確認できたほうが効率いいですね。
そのために、 「回答の集計のURLを公開する」 という方法があります。[回答] タブをクリックして、右上の [縦3点メニュー] から、 [印刷] をクリックします。
新しいタブが表示されたら、 「分析を公開」 をクリックします。
さらに新しいタブが表示されて 「分析を公開しますか?」 というメッセージが表示されます。 [OK] をクリックします。
設定は以上です。新たに、フォームの回答を送信してみましょう。
送信完了画面に [前の回答を表示] リンクが表示されますので、クリックします。
[回答の集計] が表示されますので、管理者がPDFを送付しなくても、回答者自身で集計を確認できます。
3.2 回答の集計URLを公開する
同様の設定は、 [設定] メニューからも行えます。フォーム編集画面の右上にある [歯車アイコン] をクリックします。
[全般] タブから、回答者が行える操作:の [概要グラフとテキストの回答を表示] にチェックを入れて、最後に、 [保存] クリックします。
見た目はなにも変わりませんが、 [歯車アイコン] もう一度をクリックすると、[概要グラフとテキストの回答を表示] にチェックが入っていることが確認できます。確認できたら [キャンセル] をクリックしてウィンドウを閉じます。
どちらの設定方法でも変わりませんので、覚えやすい方法でかまいません。
csvを出力する
回答の集計は、csvファイルで出力できます。 [回答タブ] から [縦3点メニュー] をクリックします。
[回答をダウンロード(.csv)] をクリックします。
お使いのパソコンによって保存場所は違いますが、zipファイルがダウンロードされます。
zipファイルの中にcsvファイルが格納されていますので、Googleドライブの [マイドライブ] などに移動します。
csvファイルをダブルクリックすると、中身を確認できます。※Excelでcsvを開くと文字化けすることがあります。
csvの活用方法や、GASによる自動エクスポートは、このシリーズでは取り上げません。しかしながら、csvファイルがあると、社内基幹システムへのデータの橋渡しなどに便利です。
ここでは 「フォームの回答はcsvでエクスポートできる」 ということだけ覚えておきましょう。
スプレッドシートに出力する
回答の集計は、任意のスプレッドシートに出力できます。基本的な使い方は、 1つのフォームに対して、1つのスプレッドシート(回答)を用意する ことです。
[回答タブ] の [スプレッドシートアイコン] をクリックします。
回答先(スプレッドシートのことです)の選択画面が表示されます。 [新しいスプレッドシートを作成「スプレッドシート名」] にチェックが入っていることを確認して、最後に [作成] をクリックします。※ここでスプレッドシート名を変更できますが、変更する必要はさほどないと思われます。
まもなく、新しいタブで新規スプレッドシートが開きます。スプレッドシートには、過去に送信した回答が入力されています。
このスプレッドシートは、フォームが保存されているフォルダーと、同じ場所に保存されています。
スプレッドシートの連携解除
スプレッドシートが削除されたり、ゴミ箱を空にされると、ファイルが削除されたことのエラーが表示されます。
しかしながら、スプレッドシートを連携してしているデータは残っていますので、スプレッドシートの連携解除する際は、必ず [フォームのリンクを解除] をクリックする必要があります。
[フォームのリンクを解除] ウィンドウが表示されたら [リンクを解除] をクリックします。こちらに明記されているように、連携を解除しても、既存のデータ(回答)は削除されませんのでご安心ください。※引き続き集計用のスプレッドシートを使用しますので、[キャンセル] をクリックしてウィンドウを閉じます。
GASを実行する(イベントオブジェクトの登場)
最後に、 「GASを使った回答の集計」 をお伝えします。スプレッドシートのリンクを解除してしまった方は、再度、スプレッドシートの連携を行ってください。
まず、スプレッドシートを開きます。
[ツール] メニューから [スクリプトエディタ] をクリックします。
スクリプトエディタが立ち上がらないなど、起動時のエラーが起きる場合は、こちらの記事を参考にしてください。
左上の「プロジェクト名」をクリックすると、プロジェクト名を変更できます。今回はわかりやすくスプレッドシートと同じ名前にしました。最後に [名前を変更] をクリックします。
イベントオブジェクトの取得
GASには [イベントオブジェクト] と呼ばれる、[なにかアクションが起きたときに、アクションに含まれる情報を集めたデータ] が存在します。
「フォームが送信される」というアクションが起きたときに、とくに得たい情報の1つが、 [回答] です。イベントオブジェクトに含まれる[回答]を操作することで、幅広い業務効率化に活用できます。
イベントオブジェクトは、関数に引数(e)として渡されます。関数内で、eを加工することで、さまざまな処理を行います。
function myFunction(e) {
//ここでeを使って、処理を行う
}
ユーザーから送信された [回答] は [e.values] で取得できます。
e.values
このようなコードを書いてみましょう。
function myFunction(e) {
console.log(e.values);
}
スクリプトエディターは、上書き保存を忘れないようにしましょう。
トリガーを設置する
フォームが送信されたら、 myFunction(e) が実行されるように、トリガーを設置します。
スクリプトエディターの左メニューから、 [トリガー] をクリックします。
トリガー画面に切り替わったら、右下の [トリガーを追加] をクリックします。
トリガー設定ウィンドウが開いたら、下記のように設定をして、 最後に [保存] をクリックします。※初回実行時には認証画面が出ると思いますが、適宜認証してください。認証方法は割愛します。
1. 実行する関数を選択・・・myFunctiton
2. イベントのソースを選択・スプレッドシートから
3. イベントの種類を選択・・フォーム送信時
このように、トリガーが1件登録されたら完了です。
トリガーの発火
フォームを送信して、トリガーを発火させましょう。「パーティー招待状」のフォームから回答を送信します。
回答が送信されました。
スクリプトエディターに戻り、左メニューから [実行数] をクリックします。
実行数一覧の一番上に表示されているのが、 [フォーム送信時トリガー] から発火された、ログ(記録)です。クリックすると中身を確認できます。
1次元配列で、[回答] を取得できています。ユーザーはフォームから入力していませんが、回答の先頭には、送信した時刻の [タイムスタンプ] を取得しているのも特徴的です。
この1次元配列を加工することで、「メールを送信する」、「別のフォームを送信する」 など、さまざまな処理を行うことができます。
まとめ
以上で、 「フォームの回答を集計しよう」 をお届けしました。管理者だけでなく、回答を送信したユーザーがどのような形で集計にアクセスできたらよいか、さまざまな選択肢が用意されているので、とても便利ですね。
また、後半では、「スプレッドシート連携のおさらい」 と、 「フォーム送信時をトリガーとしたGASの実行」 をご紹介しました。今後はその中で登場した 「イベントオブジェクト」 について、もう少し深掘りしていきたいと思います。
次回は、「トリガーとイベントオブジェクト」 をお届けします。