前提・実現したいこと
プログラム、GAS、teratail初心者です。
1.GASで複数のシートの値を一つのシートにまとめるプログラムを作成しています。
2.コピーの範囲は2行目から最終行、列は16列です。
3.貼り付け先のシートには、2行目、3列目からの貼り付けをしようとしています。
4.一つずつシートをコピペをしていくと、処理速度が遅くなったため、
全てのシートの値を一度配列に格納して、setValuesでまとめて書き出したいと考えています。
5.配列に格納はできましたが、
書き出しの際に以下のエラーメッセージが発生し、
書き出しがうまくいきません。
以下がコードとエラーメッセージとなります。
こちら解決策をご教授いただけますとありがたいです。
※質問に足りない情報などありましたらご指摘お願いいたします。
発生している問題・エラーメッセージ
◆エラーメッセージ 2 は無効な高さです。6にする必要があります。
該当のソースコード
GAS
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sh_all = spreadsheet.getSheetByName('all'); //コピー先のシート名all var copy_column_range = 16 //コピーする列数 //全てのシートをallシートにコピー。 var c_sheet_cnt = 2; //コピーするシート数 var last_l_row = 2; //何行目からコピーするか※すべてのシート var dt_all_sheet = []; // 全てのシートのデータの配列 //全てのシートのデータを配列に格納してから書き出し for (var i=0;i<c_sheet_cnt;i++){ var sheet = spreadsheet.getSheets()[i]; var new_l_row = sheet.getLastRow(); //各シートの最終行を取得 //シートの値を配列に格納 var copyValue = sheet.getRange(2,1,new_l_row-1,copy_column_range).getValues(); dt_all_sheet.push(copyValue); // シートの値を配列に格納 var last_l_row = last_l_row + new_l_row-1; } //Browser.msgBox(last_l_row); //sheet内容を書き出し sh_all.getRange(2,3,last_l_row,copy_column_range+2).setValues(dt_all_sheet);
試したこと
sh_all.getRange(2,3,last_l_row,copy_column_range+2).setValues(dt_all_sheet);
が違うとエラーが出ていたため、範囲が合っていないと思い下記方法を試しました。
仮シートを二つ作成。
仮シート1には
2行目の1列~16列に1
3行目の1列~16列に2
仮シート2には
2行目の1列~16列に3
3行目の1列~16列に4
の値があります。
・last_l_rowをdt_all_sheet.lengthにした。
→2 は無効な範囲です。18 にする必要があります。とエラー
・直接数字を打ち込んでみた。
→何を打ち込んでも2は無効な高さです~にしてくださいと表示。
他も試しましたが、うまく行かない状況です。
こちらご回答いただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。