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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2311閲覧

GAS + Google Spread Sheet: setValuesでエラーが出ます

takeNZ

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/03/08 01:10

前提・実現したいこと

お世話になります。
完全に初心者なのですが必要に迫られて、
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週間です。
さんざん調べてここまでやっとたどり着きましたが、最後の最後でどうしてもわかりません。
お手伝いいただければ本当に嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

公式のドキュメントを読みましょう。

https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)

values Object[][] A two-dimensional array of values.

引数は2次元配列であることがわかります。たとえ設定する範囲が1行2列でも、2次元配列を渡す必要があるということです。

thisMonthList が2次元配列ですから、thisMonth = thisMonthList[i] で設定した thisMonth は2次元配列ではないですね。

投稿2022/03/08 01:29

編集2022/03/08 01:30
int32_t

総合スコア21929

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

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

takeNZ

2022/03/08 02:34 編集

お忙しいところご回答ありがとうございます!! う~ん…そうなんですよね。もちろんそこは何度も読んでいて、じゃあこうしたらいいのかなぁと思って書いたのが8行目の var thisMonth = [[], []] だったんですが…これではダメなんですね!? どうすればいいのでしょう?
int32_t

2022/03/08 02:34 編集

> var thisMonth = [[], []] 「thisMonth = thisMonthList[i]」で上書きしているので無駄です。 .setValues([thisMonth]); で動くかもしれないですね。
takeNZ

2022/03/08 02:43

おぉぉぉぉぉ~~~!!!!! 動きました!!!!! たったこれだけで~!!!!!! 10時間以上も悩んでいた点が解消しました!! 感謝です🙏🙏🙏 こういうちょっとしたところを解消する情報に出会えなくて苦労してました… ネット以外にもKindleで本も数冊見たし… int32_tさん、お忙しいところ貴重なお時間ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問