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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

3回答

19609閲覧

スプレッドシート 編集時に自動で並び替えをする。

growthposition

総合スコア98

Google Apps Script

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

0グッド

0クリップ

投稿2016/07/09 08:14

編集2016/07/09 08:33

今、スプレッドシートを使って、タスク管理シートを作成しています。
イメージ説明
そこで、F列を重要度順にシートを編集した際に自動で並び替えができるようにしたいです。

###発生している問題・エラーメッセージ
そこで下記、コードを加えたのですが、うまくいきません。

function sortAscending() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("シート2");
var range = sheet.getRange("F2:F1000");
range.sort([1,2,3]);
}

上記でスクリプトの実行をすると

範囲外のセル参照です(行 16、ファイル「コード」)表示しない
のようなエラーが出ます。

※エラー該当箇所
range.sort([1,2,3]);

こちらぜひアドバイスを頂けますと幸いです。

また、トリガーの設定のやり方などは下記を参照に致しました。
http://boxil.jp/magazine/task_kanri_sheet/
お手数をお掛け致しますが
何卒宜しくお願い致します。

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

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

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

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

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

harashow1701

2016/07/09 08:25

調べた情報源と、いまいちわからなかったところの具体的な説明、また、どこまではわかってるかを説明して下さい。
guest

回答3

0

だいぶ、昔のご質問ですが、まだ見てくださっているでしょうか?

まず、シートですが、こんな感じで用意しました。
A,B,Cの優先順位でソートさせた結果ですね。
イメージ説明

growthposition様のエラーコードは

var range = sheet.getRange("F2:F1000");

が原因で出ています。
ようは、複数列に対してソートしているのに、rangeには、F列”だけ”しか入っていないのです。

私のサンプルコードを載せます。
参考にしてください。

Javascript

1var book = SpreadsheetApp.getActive(); 2var sheet = book.getSheetByName("シート1"); 3 4function sort(){ 5 var range = sheet.getRange("A2:C10"); 6 range.sort([1,2,3]); 7}//func_sort

ちなみに、 sort([1,2,3]) は、指定範囲の1列目、2列目、3列目を指します。
以下、ドキュメントです。
https://developers.google.com/apps-script/reference/spreadsheet/range#sort(Object)

そういえば、トリガーに関する問題は、解決しましたか?

投稿2016/09/30 08:54

編集2016/09/30 08:57
s.maeda

総合スコア147

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

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

0

エラーが出てるならエラーメッセージは書いて欲しいですね。。。

とりあえず今やろうとしてることは、a、b、c列を並び替えてしまってますね。

しかも、sortしようとしてるところは、range外になってます。

重要度順に並び替えるとかは書かれてる情報だけでは、何のことかよくわかんないのでスルーします。

投稿2016/07/09 08:21

編集2016/07/09 08:22
harashow1701

総合スコア854

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

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

growthposition

2016/07/09 08:34

>harashow1701さん いつもありがとうございます。 こちら質問を変更致しました。
harashow1701

2016/07/09 08:45

sortメソッドになぜ、1,2,3を入れてるのですか?意味分かってやってます?公式ドキュメントみて、sortメソッドの使い方をよく読んでみてください。
growthposition

2016/07/11 05:08

>harashow1701 ありがとうございます。 sortメソッドの使い方を見てみます!
harashow1701

2016/07/11 07:40

たぶん、他のサイトのコードを意味も理解せずコピペして使ってるのだと思いますが、公式のドキュメントを常にウィンドウで開いて参照する癖はつけておいた方が良いと思います。使い方も確認してないのに質問してわからないとか、そりゃーわかんなくて当然です。
guest

0

matsuura さんへ

range.sort([1,2,3]);

エラーが出て当然です。
Rangeオブジェクトに対してsortしようとしています。

まず、sortしたいならArrayとして取得しなければなりませんので、getValues()を使う必要があるということです。

ただし、コードを拝見しますと、そのままだとF列のソートになりますよ?
F列をキーとして全体をソートされたいのだと思いますが、このあたりのロジックをもう少し整理されたほうが良いかと思います。

あと、別にトリガー設定をしなくてもonEdit()でご要望のことは実現できますよ。
参考サイトのコードもそうですが、何か入力する度にスクリプトが実行されますので、トリガーとなる列やセルを限定して実行するようにした方がよいです。

動作確認はしていませんし、保証もいたしませんんが、参考スクリプトと参考サイトをあげましたので、あとはご自身で対処してください。

Javascript

1//特定の1列の値が変更されたら実行 2function onEdit(e){ 3 if(e.range.getColumn() == {{列のインデックス値}}){sortAscending();} 4} 5 6function sortAscending() { 7 var ss = SpreadsheetApp.getActiveSpreadsheet(), 8 sheet = ss.getSheetByName("シート2"), 9 arr = sheet.getDataRange().getValues(); 10 11 arr.sort(function(a,b){ 12 //arrは二次元配列であることに注意して処理を記述 13 }); 14}

参考:

投稿2016/07/10 03:10

編集2016/07/10 03:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/07/10 12:41

harashow1701さんへ ご指摘ありがとうございます。 改めてmatsuuraさんへ GASでのsort()は眼中にございませんでしたので、確認せずに回答してしまい申し訳ございませんでした。 ソートするデータ範囲を正しく指定し、range.sort()の引数部分を修正すればエラーは出ないと思います。 ただし、F列の値によっては想定通りの結果が得られない可能性がございます。 その場合はJavascriptのsort()で任意の結果が得られるように実装する必要があります。
growthposition

2016/07/11 05:10

>stshisho >harashow1701 ご指摘ありがとうございます。 大変参考になりました。 こちらをもとに試してみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問