Googleフォームで入力があるたびにGoogleスプレッドシートの内容をタイムスタンプの降順に並べ替える

Googleフォームで入力があるたび

問題は新しいデータほどスプレッドシートの下に入力されてしまうという、Googleフォームの仕様にありました。

Googleフォームで入力があるたびにGoogleスプレッドシートの内容をタイムスタンプの降順に並べ替える処理を書いてみました。

というのも、入力内容が溜まってくると最新の情報を見るために一番下までスクロールする必要があったからです。

ポイントは、範囲指定の方法並べ替えの基準となる列の指定です。

以下のようなソースコードにしました。

function sortByTimeStamp(){
    var sheet = SpreadsheetApp.getActiveSpreadsheet();
    var activeSheet = sheet.getActiveSheet();

    var lastRow = sheet.getLastRow();

    var range = "A2" + ":L" + lastRow;

    var range = activeSheet.getRange(range);
    range.sort([{column: 1, ascending: false}]);
}

並べ替えの範囲は以下のように指定しました。

"A2" + ":L" + lastRow;

範囲指定の左上はA2セルからとしました。

なぜなら、Googleフォームで入力したGoogleスプレッドシートの1行目は項目名(フォームの質問内容)が入るからです。

また、列数は今回L列までと直接記述しました。

あえて、sheet.getLastColumnメソッドは使いませんでした。

なぜなら、M列には常時表示しておきたい注意事項が書いてあったからです。

<並べ替え後のイメージ図>

 ABC(中略)LM
120xx/05/04 8:13:50入力データ入力データ入力データ※注意事項が書いてある
220xx/05/03 8:22:30入力データ入力データ入力データ 
320xx/05/01 21:09:17入力データ入力データ入力データ 
420xx/04/30 23:30:42入力データ入力データ入力データ 
5(以下省略)

入力があるたびに増える行数

sheet.getLastRow();

で取得しました。

並べ替えの基準となるタイムスタンプは、Googleフォームで入力したGoogleスプレッドシートのA列に入っているため

column: 1

と指定しました。

また、降順に並べ替えるため、

ascending: false

と指定しました。

関数名は、「sortByTimeStamp」としました。

あとは、トリガーの設定をしてフォームに入力があるたびに並べ替えが行われるようにします。

以下の設定で大丈夫でした。

実行する関数を選択:sortByTimeStamp
デプロイ時に実行:Head
イベントのソースを選択:スプレッドシートから
イベントの種類を選択:フォーム送信時
エラー通知設定毎日通知を受け取る

今回はタイムスタンプの降順に並べ替えました。

もちろん、並び替えの列は何でも良いので社員番号や学生番号、会社番号や支店番号、さらには商品番号で並べ替えることも可能です。

この記事を見つけていただいた方の参考になりましたら幸いです。

<参考:GAS>

https://developers.google.com/gsuite/aspects/appsscript?hl=ja

以上、Googleフォームで入力があるたびにGoogleスプレッドシートの内容をタイムスタンプの降順に並べ替える でした。