前提・実現したいこと
お世話になります。
完全に初心者なのですが必要に迫られて、
Google Spread Sheet上で動かすGoogle Apps Scriptを見よう見まねで作ってみております。
【やろうとしていること】
1000個のタスクの達成を管理する 「タスク達成表」 を作っています。
今後毎月、1000個のうち数十個ずつ、順序はランダムにタスクが達成されていくことになります。
いま、1000行, 2列の、空の「マスタータスク達成表」が作ってあります。
この同一シート上の右側に、同じ大きさの 「新規完成タスクの呼び出しスペース」 に、今月完成した新規完成したタスクのデータを呼び出せるようにしてあります。
これを、マスタータスク達成表上に、「データが入っている行のみ」コピペしていけるようなスクリプトを作ろうとしています。なぜなら、マスター達成表に既に書き込んであるところには上書きしたくないからです。
最後には、1,000件すべてが埋め尽くされるようなイメージです。
呼び出しスペースの特徴は
-すべてのセルがlookup関数で他のシートから呼び出している
-飛び飛びでしか中身はないので、空白が多く表示されている値は少ない
-データがある行は、2列ともデータが入っている
スクリプトの意図は
-新規完成タスクを const thisMonthList に丸ごと読み込む
-その中から var thisMonth に1行ずつ読み込み、if文によって、データが入っている場合のみ、2列分揃ってコピペする
発生している問題・エラーメッセージ
呼び出すべき新規完成データは複数あるのに、一つ目を呼び出したところで、下のようにエラーメッセージが出てしまう。
情報 [2022/10, 110.00]
Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues.
該当のソースコード
GAS
1function CopyInvoiceMonthAndWordCounts() { 2 3 const ss = SpreadsheetApp.getActiveSpreadsheet(); 4 const sh = ss.getActiveSheet(); 5 6 const thisMonthList = sh.getRange(4, 9, 1000, 2).getDisplayValues(); 7 8 var thisMonth = [[], []] 9 10 for (var i = 0; i <= thisMonthList.length - 1; i++) { 11 12 13 var thisMonth = thisMonthList[i] 14 15 if (thisMonth[0] != "") { 16 17 18 Logger.log(thisMonth) 19 20 sh.getRange(i + 4, 2, 1, 2).setValues(thisMonth); 21 22 } 23 24 } 25}
自分で調べたことや試したこと
プログラミング完全初心者で、まだ1週間です。
さんざん調べてここまでやっとたどり着きましたが、最後の最後でどうしてもわかりません。
お手伝いいただければ本当に嬉しいです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/08 02:34 編集
2022/03/08 02:34 編集
2022/03/08 02:43