#38 回答者ごとに回答を分割する
次のような目的を実現するために、Google スプレッドシートに設定する GAS のプログラムを作成してみました。
どんなプログラム?
具体的には、下図のような動作するプログラムです。
Google フォームによって複数人の複数回の回答が集約される Google スプレッドシートの内容を、それぞれの回答者ごと個別のファイルとして作成し、回答されるたびにそれぞれのファイルにデータを追加していきます。 ※元となるスプレッドシートはそのまま残し、回答者ごとのファイルにその回答者のデータだけを抽出します。
同じ質問で学習の振り返りなどを記録していく場合に、学習者にその記録をフィードバックする用途などに利用できるのではないか、と考えて作成しました。個別に作成されたファイルは、それぞれの回答者とだけ共有しているので、他の回答者からはアクセスできません。
これまでにも同様にフォーム+スプレッドシートで回答を整理していた場合に、QUERY 関数で回答者ごとの抽出が行えるものの、他の回答者の回答も閲覧できてしまう、といった懸念がありました。
このプログラムを利用すれば、①既にスプレッドシートに保存されているデータを分割、②今後追加される回答をリアルタイムに分割、③回答者ごとに分割された内容は回答者のみと共有、と前述の懸念を解消できます。
1.作成したプログラム
以下が作成したプログラムです。 Google フォームで収集したデータを扱うこともあって、プログラムを埋め込んだスプレッドシートを配布してもそのまま使えるわけではないと思います。以下の URL からスプレッドシートをコピーできるようにしておきますが、コピーしたスプレッドシートから GAS のプログラムをコピーすることになるかと思います。
https://docs.google.com/spreadsheets/d/1ctkaSIqYVy9-qWkf0q4wlQ8Wvw52XYNegXjjDx4ky04/copy
以下の 260行余りの GAS のプログラムをそのままコピーしても、同じことになるので、やりやすい方で導入してください。
今回のプログラムは、カスタマイズされる可能性があるかと思ったので、これまでよりも多くコメントを書いてあります。
カスタマイズなどでわからない部分などあれば、コメントなどで質問してください。導入しやすいようにトリガー関数の設定も、スプレッドシートのメニューから行えるようにしてみました。詳細は、後述の「導入方法」をご覧ください。
2.前提条件
スプレッドシートに記録されている 1列目のデータは「タイムスタンプ
スプレッドシートに記録されている 2列目のデータは「メールアドレス」
このメールアドレスで個別のファイルを作成し、共有設定を行います。
「メールアドレスを収集する」を ON にすることで、この条件を満たすはずです。
導入方法
以降の手順で、導入してください。
GAS のプログラムを実行するためのアクセス権限の確認などの操作説明は省略してありますので、以下の記事などを参考に許可してください。
手順1
前述の 260行あまりの GAS(Google Apps Script)のプログラムを、Google フォームに紐付けられた Google スプレッドシートにおいて、「拡張機能」→「Apps Script」で表示される Apps Script のプログラムと置き換えます。
画面上部のプロジェクトの名称も変更しておくとわかりやすいでしょう。
手順2
作成する回答者ごとの個別ファイルを、回答者に「閲覧者」と「編集者」のどちらで共有するのかを、プログラム中の変数 shareMode で指定します。
初期状態は、下図のように 1(閲覧者)が設定されています。
手順3
スプレッドシートを再読み込みし、メニュー「回答の分割」→「既存の回答を分割」を選択して、既にスプレッドシートに保存されている回答を分割します。
この操作は、既存データがなければ行わなくて構いません。
手順4
メニュー「回答の分割」→「トリガー関数を設定」を選択して、以降の回答がそれぞれの回答者ごとのスプレッドシートに分割されるように、トリガー関数を設定します。
前項の手順3で扱っていない回答者からの回答があった場合にも、その回答者用のファイルが作成され、回答が分割されます。
トリガー関数の設定を複数回実行しても、重複して設定されることはありません。
トリガー「フォーム送信時」のトリガー関数が既に設定されている場合、そのトリガー関数の設定は削除されます。
最後に
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 260行余りのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。