【簡単】Googleフォームとスプレッドシートを連携させた時に必ず書きたいGASスクリプト

フリーランスのWeb制作者、i-nob(@inobapen)です。

LPなどの静的ページでお問い合わせフォームの情報を受け取るのに便利なのが【Googleフォーム】と【Googleスプレッドシート】です。

自前で組んだフォームから送信された内容をGoogleフォームで受け取る→スプレッドシートで回答を蓄積できるという形で、デザイン性を損なわずにノーコストでPHP環境不要のフォーム実装ができる方法として知られています。

自前のフォームとGoogleフォームを紐付ける方法はこちらの記事が分かりやすいです↓

さて、本題はここから。

Googleフォームでは回答を蓄積させるためにスプレッドシートと連携させる機能が備わっています。

が…標準でタイムスタンプの最新順(降順)での並び替えが適用されていません。

これだと最新の回答が一番上の行に表示されないので、毎回スプレッドシートを開いた時に並び替え操作をすることに…不便ですよね?

そこで、今回はそんな時のために

フォームからの回答を常にタイムスタンプの最新順で並び替えるGoogle Apps Script(GAS)スクリプト

をご紹介したいと思います。

短くて設定も簡単なので、ぜひ導入してみて下さい!

1:並び替え用のスクリプトを書く準備をする

スプレッドシートのメニューから【ツール】→【スクリプトエディタ】を選択すると、GASの編集画面に移ります。

適当にプロジェクト名を変更し、初めて画面を開いたならスクリプトファイルとして【コード.gs】というファイルが開かれているので、そのファイルのエディターにコードを書いていきます。

もし上記のgsファイルが無ければ、【ファイル +】の+部分をクリックして【スクリプト】を選択すると新しいファイルを作成できます。

2:並び替え用スクリプトを書く

例として、1行目が項目名が入っているものとしてA列にタイムスタンプがあり、2行目から実際の回答データが入っているものとします。

書くコードは以下の通り↓

function allSort() {
 let data = SpreadsheetApp.getActiveSheet();
 let lastRow = data.getLastRow();
 let lastCol = data.getLastColumn();
 data.getRange(2, 1, lastRow, lastCol).sort({column: 1, ascending: false});
 }

関数名はallSortとしました。

変数dataでは、アクティブなシートを読み込んで入れています。

変数lastRowとlastColは、各々最後の行と列を取得する記述で範囲の可変を可能にしています。

そして、アクティブなシートの並び替え範囲をgetRange(シートの2行・1列目から最後の行、列まで)で指定し、sortメソッドで基準となる列(1列目)を降順(ascending: false)で並び替え処理する…という内容です。

スクリプトはこれだけでOK!

書いた後は保存しましょう。

3:トリガーを設定する

最後に、どんなきっかけでこのスクリプトが動いて欲しいかトリガーを設定しましょう。

画面左側に時計マークのアイコンがありますが、ここがトリガーを管理するところなのでクリック→画面下の【トリガーを追加】から新しいトリガーを追加します。

下の画像のように設定します↓

画像1

ポイントはイベントの種類で【フォーム送信時】を選択すること。

こうするとフォームから回答が追加された時にallSort関数を呼び出して処理してくれます。

作業は以上で完了です、お疲れ様でした!

補足:スクリプトの承認について

スクリプトを書いて保存すると、「スクリプトからスプレッドシートを操作するための承認」が必要になります。

スクリプトがスプレッドシートへアクセスすることを許可するかを問われますので、許可してあげて下さい。

…以上、Googleフォームからの送信内容を最新順で常にスプレッドシートに格納させる方法のご紹介でした。

そんなに複雑なフォームでなければ、Googleフォーム+スプレッドシートで大抵は事足りると思います。

バリデーションや送信後にサンクスページに飛ばすという処理なども必要ですが、コストを掛けずにデザインに違和感なく機能するフォームを実装できる方法でもありますので、ぜひ覚えておきたい手法ですね。

それでは今回はこの辺で!

この記事が気に入ったらサポートをしてみませんか?