質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2738閲覧

フォームと連携しているスプレッドシートを自動で降順ソートしたい

mutcha

総合スコア7

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/02/04 13:17

フォームと連携しているスプレッドシートを自動で降順ソートしたい

フォームの回答のリンク先であるスプレッドシートに、
回答があれば順次レコードが追加されていきますが、
下にデータがたまっていくため、
量が増えるごとに開くたび下にスクロールしなければなりません。

これを解決しようとこちらのサイトを参考にGASを利用してみたのですが、
エラーが発生してしまいました。
https://www.it-swarm.jp.net/ja/google-sheets/google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E8%87%AA%E5%8B%95%E5%88%86%E9%A1%9E%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/957368243/

スプレッドシートのB列に日付(yyyy/mm/dd)が入力される仕組みで、
その列を自動で降順にしたいです。

発生している問題・エラーメッセージ

TypeError: Cannot read property 'source' of undefined onEdit @ コード.gs:2

該当のソースコード

function onEdit(event){ var sheet = event.source.getActiveSheet(); var editedCell = sheet.getActiveCell(); var columnToSortBy = 2; var tableRange = "A2:AC500"; if(editedCell.getColumn() == columnToSortBy){ var range = sheet.getRange(tableRange); range.sort( { column : columnToSortBy } ); } }

試したこと

エラーになっている'source'の意味をネットで調べましたが、欲しい情報にたどり着けていません。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エディタから実行してエラーが出てませんか?
関数が編集時に動く onEdit(event)なので、エディタからの実行だとeventが空でエラーがでます。

他に気になった点

  • onEditはフォームの回答では動きません。
  • sortが降順の指定が抜けてるので、このまま実行しても昇順の並び替えのままです。
  • フォームの回答は通常は1列目がタイムスタンプですが、2列目でソートで大丈夫ですか?

https://excel-ubara.com/apps_script1/GAS030.html

1枚目に閲覧用シート追加して、関数でフォームの回答のシートを並び替えた方が楽なので、個人的にはそちらをお勧めします。

投稿2021/02/05 00:53

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mutcha

2021/02/07 14:37

ご回答いただき、大変に有り難うございます。 確かにエディタから実行しておりました。そのためエラーが起きていたのですね。 他に気になった点に関しまして、ご質問させて頂きたいのですが、宜しいでしょうか。 ・onEditはフォームの回答では動きません →こちらでは動かない、承知しました。  調べてみたところ、onFormSubmitを利用するということでしょうか。  参考:https://qiita.com/nurburg/items/f6d220e9bd6b11750b17 ・sortが降順の指定が抜けている →失礼いたしました。降順はこのように指定すれば宜しいでしょうか。  range.sort( { column : 2,columnToSortBy } )  参考:https://excel-ubara.com/apps_script1/GAS030.html ・フォームの回答は通常は1列目がタイムスタンプ →その通りです。やはりこちらを降順に指定したいと思います。 確かに難易度が高いように感じます。 おすすめされている関数は、Sort関数を利用する方法でしょうか。 参考:https://spread-sheets.com/function/filter/sort-function/
sawa

2021/02/08 04:15

>調べてみたところ、onFormSubmitを利用するということでしょうか onFormSubmitでもよいです。時間ベースでも、onOpenでも動きます。 >降順はこのように指定すれば宜しいでしょうか。  range.sort( { column : 2,columnToSortBy } ) 違います。参考にしたリンク先をちゃんと見ましたか? >おすすめされている関数は、Sort関数を利用する方法でしょうか はい。これが一番簡単です。元データを触らないですし。 正解を確認してから動くのでなく、まずはご自身で色々試して検証して検索してみましょう。 その上で、また躓いて調べてもわからない場合があれば別質問を。
mutcha

2021/02/10 13:27

有難うございます。確かにその通りですね。 並べ替えのところをよく読んだところ、下記の記述で解決いたしました。 function onFormSubmit(event){ var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); var lastCol = sheet.getLastColumn(); sheet.getRange(2, 1, lastRow, lastCol).sort({column:1,ascending:false}) } 今までこういった類いは外国語を読んでいる感覚でしたが、 おかげさまで苦手意識が少しなくなりました。
sawa

2021/02/15 11:53

ご報告ありがとうございます。自分で回答に辿り着いたこと、とても価値があると思います。安定して稼働しているようなので大丈夫かと思いますが、回答が同時間帯に複数あった場合に、GASで動かすと不具合が起こる可能性もあります。その場合は、幾つかご提示した別の方法もお試しください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問