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

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

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

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

Q&A

1回答

14030閲覧

google app script にて 範囲外を求めているというエラーでる。(Those rows are out of bounds.

laboumhaein

総合スコア16

Google Apps Script

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

0グッド

0クリップ

投稿2020/03/07 11:09

以下のコードのを動かすと 38行目のコードにエラーが発生します

エラー:Those rows are out of bounds.
範囲外を求めているということらしいのですが、どこを直せばいいかわからないです、、

コードがすごくきたなくて申し訳ないのですがご教授いただきたいです、、、、

宜しくお願い申し上げます。

■コピー元のデータはA列からF列まで入っています。
1、コピー元(A用)のC列からF列をコピーしてB用のA列からD列に貼り付ける。
2、C列には数字が入っています。
3、C列を数字が大きい順にソートします
4、C列をセルを上から見ていき、1という数字に当たったらそこから下を消します。
5、消した後のデータをD列→A列の順番でソートする

ざっくりいうとこういうことをしたいです。

google

1function sort() { 2 3 var sh = SpreadsheetApp.getActive(); 4 sh.insertSheet(1); 5 sh.getActiveSheet().setName('A用'); 6 sh.setActiveSheet(sh.getSheetByName('B用'), true); 7 sh.getRange('C:F').activate(); 8 sh.setActiveSheet(sh.getSheetByName('A用'), true); 9 sh.getRange('\'B用\'!C:F').copyTo(sh.getActiveRange(), 10 SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); 11 12 13 var target_col = 3; 14 var asc = false; 15 var start_row = 2; 16 var start_col = 1; 17 18 var sh = SpreadsheetApp.getActiveSheet(); 19 var last_col = sh.getLastColumn(); 20 var last_row = sh.getLastRow(); 21 var num_rows = last_row - (start_row - 1); 22 var num_cols = last_col - (start_col - 1); 23 var range = sh.getRange(start_row, start_col, num_rows, num_cols); 24 range.sort([{ 25 column: target_col, 26 ascending: asc 27 }]); 28 29 30 var sh = SpreadsheetApp.getActiveSheet(); 31 var last_row = sh.getLastRow(); 32 for(var i = 2; i < last_row; i++){ 33 var range = sh.getRange("C"+ i); 34 var value = range.getDisplayValue(); 35 if(value == "1"){ 36 var start_row = i; 37 var num_row = 2500; 38 sh.deleteRows(start_row, num_row); 39 i = i - 1; 40 } 41 } 42 43 var target_col = 4; 44 var asc = true; 45 var start_row = 2; 46 var start_col = 1; 47 48 var sh = SpreadsheetApp.getActiveSheet(); 49 var last_col = sh.getLastColumn(); 50 var last_row = sh.getLastRow(); 51 var num_rows = last_row - (start_row - 1); 52 var num_cols = last_col - (start_col - 1); 53 var range = sh.getRange(start_row, start_col, num_rows, num_cols); 54 range.sort([{ 55 column: target_col, 56 ascending: asc 57 }]); 58 59 var target_col = 1; 60 var asc = true; 61 var start_row = 2; 62 var start_col = 1; 63 64 var sh = SpreadsheetApp.getActiveSheet(); 65 var last_col = sh.getLastColumn(); 66 var last_row = sh.getLastRow(); 67 var num_rows = last_row - (start_row - 1); 68 var num_cols = last_col - (start_col - 1); 69 var range = sh.getRange(start_row, start_col, num_rows, num_cols); 70 range.sort([{ 71 column: target_col, 72 ascending: asc 73 }]); 74}

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

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

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

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

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

guest

回答1

0

javascript

1// A 用が元、 B 用が先 2// C 列が 1 より大きい\ 3// D が小さい順 → C が小さい順 → B が小さい順 → A が小さい順 4const q245715 = () => { 5 const srcName = "A用"; 6 const dstName = "B用"; 7 const book = SpreadsheetApp.getActive(); 8 const copyData = book.getSheetByName(srcName).getDataRange().getValues().filter(e=>e[2] > 1); 9 if(copyData.length < 1) return; 10 copyData.sort((a,b) => { 11 if(a[3] > b[3]) return 1; 12 if(a[3] < b[3]) return -1; 13 if(a[2] > b[2]) return 1; 14 if(a[2] < b[2]) return -1; 15 if(a[1] > b[1]) return 1; 16 if(a[1] < b[1]) return -1; 17 if(a[0] > b[0]) return 1; 18 if(a[0] < b[0]) return -1; 19 return 0; 20 }); 21 book.getSheetByName(dstName).getRange(1,1,copyData.length,copyData[0].length).setValues(copyData); 22}

投稿2020/03/09 12:18

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問