Googleフォームから転記を自動化する
内容をまとめた本はこちら!▼
Googleフォームに回答があった時に、指定のGoogleスプレッドシートのシートにデータが送信されるように設定することができます。
フォームを送信したら、フォームまたは Google スプレッドシートで個別に回答を収集できます。
フォームの回答の保存先を選択する
- Google フォームでフォームを開きます。
- 左上の [回答] で、[概要] をクリックします。
- 右上のその他アイコン その他次に [回答先を選択] をクリックします。
- オプションを選択します。
- 新しいスプレッドシートを作成: Google スプレッドシートで回答用のスプレッドシートを作成します。
- 既存のスプレッドシートを選択: Google スプレッドシートで既存のスプレッドシートを選択して回答を保存します。
- [作成] または [選択] をクリックします。
- ヒント: 回答用のスプレッドシートには、Google スプレッドシートのホーム画面、Google スプレッドシート アプリ、Google ドライブからアクセスできます。
- フォームを共有して回答を収集する>フォームの回答の保存先を選択する
これを、フォームの送信があって、Googleシートに入力された時に、他のGoogleシートに転記することは可能か…?というお話です。
自動化のイメージ
1.フォームの回答があった時は「フォームの回答1」というシートにデータが自動的に入る。
2.「フォームの回答1」というシートに自動的にデータが入った時に、別のスプレッドシートの「回答の転記」というシートの「末尾行」に自動的にデータが入力される。
というシンプルな仕組みでいきたいと思います。
Googleフォームで送信
まずはGoogleフォームで送信をしてみます。
送信があると、スプレッドシートの連結したシートに回答が入ります。
このタイミングと同時に、別のファイルへ転記をしてみます。
ということで、準備は終わったのでここからが本番です…!
スクリプトエディタ
[rml_read_more]
まずは、スクリプトエディタを開きます。
関数名を定義する
まずは「PostToAnotherFile()」などの名前で、関数を作ります。
ファイルを取得する
それぞれのファイルを取得します。
function PostToAnotherFile() {
//今のアクティブファイルを取得する
var ss1_copy = SpreadsheetApp.getActiveSpreadsheet()
//転記先のスプレッドシートIDを入力する
var ss2_copy_to = SpreadsheetApp.openById("XXXXX(ID)")
これで、フォーム回答ファイルと転記先のファイルが取得できます。
シートを取得
それぞれのシートを取得します。
// フォームの回答シート
var s_name_from = ss1_copy.getSheetByName('フォームの回答 1');
// 転記先のシート
var s_name_to = ss2_copy_to.getSheetByName('回答転記');
最終行+1行を取得
//最終行+1行
var lastRow_PlusOne = s_name_to.getLastRow() + 1
転記先のシートには最終行+1(空白行)への転記が必要ですので、+1しています。
転記元の最終行データを取得
var data = s_name_from.getRange(s_name_from.getLastRow(), 1,1, s_name_from.getLastColumn()).getValues();
getRangeで最終行のデータを取得します。
引数は(最終行(位置)、1列目(位置)、1行分(行数)、最終列(列数))
これで、最終行のデータが全てdata変数に格納されます。
setValueで書き込み
s_name_to.getRange(lastRow_PlusOne, 1,1,s_name_from.getLastColumn()).setValue(data);
getRangeで転記先の(最終行+1行に、1列目から、 1行分、 転記元の列数分)転記元の最終行のデータをsetValue()で書き込みます。
??なぜか、1列目のデータが行の全てのセルに転記されてしまいます。
dataの値はログを見る感じだと取れているので、setValue()に問題があるのかもしれません。
まとめ
長くなりそうでしたので、続きは別のページへ!!
Googleスプレッドシートを使えば色々と自動化ができます!
内容をまとめた本はこちら!▼
続きはこちら▼
ご参考下さい(^^)