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列には常時表示しておきたい注意事項が書いてあったからです。
<並べ替え後のイメージ図>
A | B | C | (中略) | L | M | |
1 | 20xx/05/04 8:13:50 | 入力データ | 入力データ | 入力データ | ※注意事項が書いてある | |
2 | 20xx/05/03 8:22:30 | 入力データ | 入力データ | 入力データ | ||
3 | 20xx/05/01 21:09:17 | 入力データ | 入力データ | 入力データ | ||
4 | 20xx/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スプレッドシートの内容をタイムスタンプの降順に並べ替える でした。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新人エンジニア研修講師2024年12月20日バイト言葉とは何か? 新人エンジニア向けに解説
- 新人エンジニア研修講師2024年12月20日ワークフローシステムとは何か? 新人エンジニア向けに解説
- 新人エンジニア研修講師2024年12月17日新人エンジニア研修で教えたい「正しい生成AIの使い方」 新人研修講師の方に向けて解説
- 新人エンジニア研修講師2024年12月17日新人エンジニア向けの「ビジネス文書の書き方」について、新人研修講師の方に向けて解説