
#67 フォームの回答を集計しやすいように整形する
Google フォームで設問を作成して、アンケートや調査を行うケースが多くなったのではないでしょうか?

これまでのアナログ媒体(紙)で回収した回答ではなくなることで、回答の集計や分析もスムーズに行えるようになるかと思います。
しかしながら、Google フォームでどのように設問を作ればいいのか、どのようにフォームで回収した回答を集計するのがいいのかを悩んでいるケースがありませんか?
この記事では、フォームで回収した回答を、集計しやすいように整形(分割)した事例を紹介します。
どんなプログラム?
今回のフォームは、下図のような感じになっています。
回答者には、設問1から設問9までの設問(9個)に回答してもらうのですが、設問3~設問7は同様の回答内容(選択肢)となっています。

このような Google フォームで回答を回収すると、下図の 2行目のように、それぞれの設問ごとに列が割り当てられ、その対応する列に回答が記録されます。
今回のプログラムでは、指定した設問については、回答を分割して記録します。下図の例では、設問3~設問7までの回答について、分割を行っています。 ※分割する設問の数が 5つ(設問3~設問7)なので、下図の 2行目の回答が、11~15行目の 5行に分割されています。

Google スプレッドシートの QUERY 関数を使って、回収した回答を集計。抽出したりもできますが、QUERY 関数はデータを加工してくれるわけではないため、GAS のプログラムで前処理として加工を行いました。
今回のプログラムは、汎用的なものとなるようにプログラム中の定数を変更することで、流用できるように考慮してみました。
実際のプログラム
作成したプログラムは、以下のような感じです。約90行のプログラムとなっていますが、半分くらいは説明のためのコメントなので、実際のプログラムは 50行程度です。
分割する回答の「開始番号」「終了番号」は、スプレッドシートに書き出される「タイムスタンプ」「メールアドレス」に続く設問が 1 となります。
「開始番号」から「終了番号」までの設問と回答が、分割して書き出され、その他は、そのまま書き出されます。
「開始番号」は 14行目の SPLIT_START、「終了番号」は 15行目の SPLIT_END で設定します。
分割された回答は、シート「分割済み回答」に書き出されます。Google フォームで回収した回答が記録される元シートは、何も加工していません。
分割された回答の「タイムスタンプ」と「メールアドレス」、分割されていない回答は、同じものが書き出されます。
使い方
自身が利用している Google アカウントでログインしている状態で、下記の URL にアクセスします。GAS のプログラムが保存されたスプレッドシートが、自身の Google ドライブにコピーされます。
https://docs.google.com/spreadsheets/d/1r53iWD3sY9niHaAkYlTLdzNecP_Y5aKjvmPJTiASFwM/copy

コピーされたスプレッドシートには、回答を分割するための GAS のプログラムが含まれています。
上図のようなシート「説明」が含まれていますが、プログラムの動作を説明するためのものであり、このシートはプログラムの動作には関係ありません。
分割のために必要なのは、スプレッドシートに含まれている GAS のプログラムだけです。特別なサービスやライブラリをりようしているわけではないので、このスプレッドシートに含まれているプログラムを別のスプレッドシートに貼り付けても動作します。
このスプレッドシートに、Google フォームの回答を書き出すようにするか、このスプレッドシートに含まれているプログラムを、処理するスプレッドシートに貼り付けてください。
スプレッドシートの用意ができたら、分割する設問をプログラムの冒頭で定義してある SPLIT_START と SPLIT_END で、分割する設問の範囲を指定します。 ※この 2つの定数を設定をしなければ意図したようには動作しません。
プログラムの設定を行ったら、下図のようにトリガー関数を設定して、フォームの回答に応じて処理するように設定します。

ここまでの設定を行うと、設定完了です。
設問3~設問7が分割されるように設定されていると、以下のように 2件の回答が寄せられたら、2件の回答が 10件に分割されます。


最後に
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 90行程度のスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
今回のプログラムは、汎用的に使えるように考慮したものの、そのまま利用できるものではないかもしれません。このような GAS のプログラムで前処理しておくことで、集計しやすくなるケースもあるでしょう。
頻繁に利用するテクニックではないかもしれませんが、このようなテクニックもあることを、どこか記憶の片隅に覚えておいてください…