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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

8863閲覧

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

veruvi

総合スコア5

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/03/01 17:43

編集2020/03/01 17:50

前提・実現したいこと

■複数の Google スプレッドシートのデータを集約する
https://qiita.com/kz_takatsu/items/a89e89a4c5e82414ae3f

複数のスプレッドシートからデータを引っ張り、1つに集約しようとしてます
引っ張ってくる元の所が関数が使われているせいか、うまくいきません

エラーメッセージ Exception: 範囲の行数には 1 以上を指定してください。(行 45、ファイル「aggregateData」)

該当のエラー場所

var

1 outputSheet.getRange(curRow, 1, lastRow-curRow, 1) ←ここ 2 .setValue(id); // 識別子の書き込み 3 curRow = lastRow; 4

### コード全文

// Sidebar.htmlが必要 function showSidebar() { var ui = HtmlService.createTemplateFromFile('Sidebar') .evaluate() .setTitle("シート集計"); SpreadsheetApp.getUi().showSidebar(ui); } // スプレッドシートを開いたときに呼ばれる function onOpen() { showSidebar(); } // 集計対象フォルダ以下のファイルを集計 function aggregateData() { var cfg = getConfig(); var targetFolder = DriveApp.getFoldersByName(cfg['集計対象フォルダ']).next(); var files = targetFolder.getFiles(); Logger.log(files); var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(cfg['書き込み先シート']); if (! outputSheet) { var sheetName = String(cfg['書き込み先シート']); Logger.log(sheetName); outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName); } outputSheet.clear(); var curRow = 1; var fileList = []; while(files.hasNext()){ var file = files.next(); var spreadsheet = SpreadsheetApp.open(file); var sheet = spreadsheet.getSheets()[0]; var id = sheet.getRange(cfg['識別子']).getValue(); fileList.push( { "fileName": file.getName(), "id": id } ); var srcRange = sheet.getRange(cfg['読み込み領域']); outputSheet.getRange(curRow, 2, srcRange.getHeight(), srcRange.getWidth()) .setValues(srcRange.getValues()); var lastRow = outputSheet.getLastRow()+1; outputSheet.getRange(curRow, 1, lastRow-curRow, 1) .setValue(id); // 識別子の書き込み curRow = lastRow; } return fileList; } // 集計設定という名前のシートを読み込んで key-valueに落とし込む function getConfig() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var cfgSheet = ss.getSheetByName("集計設定"); var cfgValues = cfgSheet.getDataRange().getValues(); var cfg = {}; for (var i=0; i<cfgValues.length; i++) { cfg[cfgValues[i][0]] = String(cfgValues[i][1]); } return cfg; }

試したこと

①UNIQUEなどの関数を使っていて、消してみると使用できたりしたのですが、何度も計算するうちに打つ手を施してもエラーでなにもできなくなりました
②なぜか読み込み元のファイルコピーして生成するとなぜか成功するが、2度目の読み込みで失敗したりします
「コピーすりゃいけんじゃん!?」と思って同じ手法をやると成功しなくなります

対象部分で使っている関数

=IF(COUNTBLANK($T2),"",COUNTIFS($B$4:$B$84,$T2,$F$4:$F$84,$U$1)) =UNIQUE(P4:P850) =IFERROR(VLOOKUP($T3&$AC$1,$L:$N,3,false),"")

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

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

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

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

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

macaron_xxx

2020/03/01 22:53

これは単純にcurRow = lastRowになる場合があって、lastRow-curRowが0になってるんだと思います。 エラー直前のlastRow, curRowのログをとってみて、なぜその数値になっているか確認してみるしかないと思います。
guest

回答1

0

ベストアンサー

あくまで机上の問題として考えてみました。

javascript

1 var lastRow = outputSheet.getLastRow()+1; 2 outputSheet.getRange(curRow, 1, lastRow-curRow, 1) 3 .setValue(id); // 識別子の書き込み 4 curRow = lastRow;

ここで行数が 1 未満になるということは、lastRow が想定より少なく評価される必要があって、SpreadsheetApp.flush() をする局面かなと想像しました。

ですが、毎回 flush するのは多分あんまり解決としてよくなくて、こういう感じでどうですかね。

javascript

1 //var lastRow = outputSheet.getLastRow()+1; 2 outputSheet.getRange(curRow, 1, srcRange.getHeight(), 1) 3 .setValue(id); // 識別子の書き込み 4 curRow += srcRange.getHeight() - 1;

個人的には、他の質問で全然別のコードで同じことをやろうとしているので、荒らしだと捉えています。

投稿2020/03/04 14:51

papinianus

総合スコア12705

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

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

veruvi

2020/03/05 01:19

こちらで検証してみました! そうしましたら、対象のファイルをちゃんと読み込むようになりました! ただ、空白を40行ほど読み込んでしまうみたいです スプレ上確認すると、文字の記載などはない場所でした
papinianus

2020/03/05 03:21

空白行の問題は別質問で回答しました。 そちらの質問にも回答がついていましたが式などがあると空白ではないと認知されます。式が引用元シートにあるかもしれないですし、そうした調査を考えると、ちょっとこの質問のエラーからは外れます。
veruvi

2020/03/05 04:46

ありがとうございます エラー部分は解消され、動作はしているのでベストアンサーにいたします 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問