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

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

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

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

Q&A

解決済

2回答

10588閲覧

範囲の行数には 1 以上を指定してくださいのエラー表示

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2019/07/01 03:51

前提・実現したいこと

別ファイルのスプレッドシートに内に14シートがあります。
左から3つ目から14つ目までのシートからB列、E列、G列、H列、AA列の3行目~最終行が欲しいデータです。
アクティブシートにB列~AA列までコピーしたものを貼り付けて不要な列を削除するコードを書いたのですが、
エラーで途中で止まります。
どこと直したらいいのでしょうか?知恵をお貸しください。

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

エラーメッセージ 範囲の行数には 1 以上を指定してください。(行 23、ファイル「データ表示」) ### 該当のソースコード

GoogleAppsScript

1function dateOpen() { 2 3 var sh2 = SpreadsheetApp.getActiveSpreadsheet(); 4  var sh1 = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXX")//コピー元 5 6 var sheet2 = sh2.getSheetByName('データ'); //コピー先 7 var lastRow = sheet2.getLastRow();//コピー先シートA2以降クリア 8 var lastCol = sheet2.getLastColumn(); 9 if(sheet2.getRange("A2") != ""){ 10 sheet2.getRange(2, 1, lastRow-1, lastCol-1).clearContent(); 11 } 12 var copy_column_range = 26 //コピーする列数 13 //全てのシートをデータシートにコピー 14 var c_sheet_cnt = sh1.getSheets().length; //コピーするシート数 15 var last_l_row = 4; //3行目からコピー 16 var dt_all_sheet = []; // 全てのシートのデータの配列 17 //全てのシートのデータを配列に格納してから書き出し 18 19 for (var i=2;i<c_sheet_cnt;i++){ 20 var sheet = sh1.getSheets()[i]; 21 var new_l_row = sheet.getLastRow(); //各シートの最終行を取得 22 23 var copyValue = sheet.getRange(2,3,new_l_row-1,copy_column_range).getValues(); 24 var dt_all_sheet = dt_all_sheet.concat(copyValue); 25 var last_l_row = last_l_row + new_l_row-1; 26 } 27 //sheet内容を書き出し 28 29 sheet2.getRange(2,1,dt_all_sheet.length,copy_column_range).setValues(dt_all_sheet) 30 sheet2.deleteColumns(2,2);元シートのB列 31 sheet2.deleteColumns(3,1);元シートのE列 32 sheet2.deleteColumns(5,18);元シートのG、H、AA列 33 34 35} 36
### 試したこと 最初はエラーが起きず、表示されたのですがなぜかエラーがでるようになりました。 ”var copyValue = sheet.getRange(2,3,new_l_row-1,copy_column_range).getValues();” がエラー箇所なので、2,3を1,1にしたのですが変わりません。 ### 補足情報(FW/ツールのバージョンなど) こちらの質問を参考に作成いたしました。 https://teratail.com/questions/112018

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1function q197998() { 2 const sh2 = SpreadsheetApp.getActiveSpreadsheet(); 3 const sh1 = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXX")//コピー元 4 5 const sheet2 = sh2.getSheetByName('データ'); //コピー先 6 const lastRow = sheet2.getLastRow();//コピー先シートA2以降クリア 7 const lastCol = sheet2.getLastColumn(); 8 if(sheet2.getRange("A2") !== ""){ 9 sheet2.getRange(2, 1, lastRow, lastCol).clearContent(); 10 } 11 const B = 1; 12 const E = 4; 13 const G = 6; 14 const H = 7; 15 const AA = 26; 16 const dat = sh1.getSheets().slice(2).reduce(function(acc, sheet) { 17 return acc.concat(sheet.getDataRange().getValues().slice(2).map(function(r) {return [r[B], r[E], r[G], r[H], r[AA]];})); 18 },[]); 19 //sheet内容を書き出し 20 sheet2.getRange(2,1, dat.length, 5).setValues(dat) 21}

投稿2019/07/01 16:08

編集2019/07/02 11:24
papinianus

総合スコア12705

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

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

退会済みユーザー

退会済みユーザー

2019/07/02 03:59

回答ありがとうございます。上記の通りにしたらほしい結果が表示されました。 本当にありがとうございます!
papinianus

2019/07/02 11:24

ご満足いただけて良かったです
guest

0

エラーの内容的に、シートの最終行が1または0のシートがあるようです。
エラー自体は下記のようにすることで回避できそうです。

GAS

1if (new_l_row > 1) { 2 var copyValue = sheet.getRange(2,3,new_l_row-1,copy_column_range).getValues(); 3 var dt_all_sheet = dt_all_sheet.concat(copyValue); 4}

それ以外にも課題はありそうですが…。

投稿2019/07/01 07:22

macaron_xxx

総合スコア3191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問