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

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

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

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

膨大な情報の更新・追加処理

Banana
Banana

総合スコア3

Google+

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

1クリップ

375閲覧

投稿2022/04/19 08:34

Google apps scriptで仕事中に使えるスプレッドシートのシステムを作っています。
スクリプトで効率化する味を占めてしまい、新しい内容に手をつけましたが、コードを書き始めたのが先月中旬からでまだまだ理解の乏しい私には難しく、検索しては継ぎ接ぎをして作り直していますが、エラーが連発してしまい完全に作業が止まってしまいました。
思いつく内容も出切ってしまい、素人目では、もはや何が間違っているのかも正直わかりません。

恐れ入りますが、どうか原因や改善点をご教示いただけないでしょうか?
よろしくお願いいたします。

実現したいこと

シートAとシートPがあり、別のシステムからエクスポートした情報をシートPに貼り付け。
シートPに貼り付けた情報は多いときには500件程のデータを確認することになります。シートAに重複するものがあれば上書き、無ければデータ最下行に追加できるものを目指しています。

・シートPに貼り付けるデータはA-CB列まであり、1行目がヘッダー、それ以降は横軸表記で筐体番号や本体名が並んでいます。
データ量としては日によって増減するため、情報量は一定ではありません。(多いときには500件ほどの量になります。)
・シートAに貼り付けをするときには必要情報のみ抽出して貼り付けたいので、列の順番変更を取り入れています。
・シートA / Pの重複確認のキーワードにはそれぞれに含まれる筐体番号(シートA / P共に3列目)と本体名(シートA / P共に4列目)での確認としています。
・シートAには以上で並び替えた必要情報を随時更新、累積していくため、膨大な量になっていく予定なので、今後フィルターでシートAの情報量も調整していく予定です

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

自信の素人考えではシートAとシートPの両方で変数を作りシートPの内容をシートAで走査、該当があれば更新、無ければ追加。ループに戻りシートPを全部確認し終えた時点で終了。
と、したいのですが、for から ifまではできているのだと思うのですが、setValueの部分でThe parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues.となってしまいます。

エラーメッセージ The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues. ### 該当のソースコード ```ここに言語名を入力 function copyPaste() { const col_A = "A"; const col_C = "C"; const col_M = "M"; const today = new Date(); today.setHours(0, 0, 0, 0);   const today_GetTime = today.getTime(); var ss = SpreadsheetApp.getActiveSpreadsheet(); const p_sh = ss.setActiveSheet(ss.getSheetByName('PASTE'), true).activate(); const a_sh = ss.setActiveSheet(ss.getSheetByName('A CHECK'), true).activate(); // 'A CHECK' const a_Values = a_sh.getRange(col_C + "4:" + col_M + a_sh.getLastRow()).getValues(); // 'PASTE' const p_values = p_sh.getRange(col_A + "1:" + p_sh.getLastRow()).getValues(); // 'PASTE' 貼り付け日でフィルター const p_filtered = p_values.filter(function (element) { return typeof element[0] == 'object' && element[0].getTime() == today_GetTime; }); // Col並び替え const p_MoveCol = p_filtered.map(elm => [elm[0], elm[7], elm[19], elm[3], elm[4], elm[29], elm[15], elm[17], elm[16], elm[26], elm[35]]); for (var p = 0; p < p_MoveCol.length; p++) { // 'PASTE' for (var a = 0; a < a_Values.length; a++) { // 'ARR CHECK' if (p_MoveCol[p][3] === a_Values[a][3] && p_MoveCol[p][4] === a_Values[a][4]) { a_sh.getRange([ a + 1 ] , 3, 1, 12).setValues(p_MoveCol[[p]]); } else { // 行が見つからなかったら新しくデータを挿入 sheet_CopyTo.appendRow([[p]]); return a + 1; } } } };

試したこと

setValues内を変数に変更してみたり、書き順を変えてみたり、[ ]を増やしてみたりと素人ながらに試しましたが全滅でした。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

qnoir

2022/04/20 01:39 編集

「 } else { // 行が見つからなかったら新しくデータを挿入 sheet_CopyTo.appendRow([[p]]);」 の「 sheet_CopyTo」はどこで定義されているのでしょうか。
Banana

2022/04/20 08:01

返答が遅くなってしまい申し訳ありません。 qnoirさんの理解いただけたとおり、(sheet_CopyTo = a_sh)であっています。試し書きしすぎて汚くなり、書き直した際の直し漏れです。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google+

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。