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

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

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

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

Google Apps Script

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1121閲覧

【GAS】配列で取得したデータを、setValuesで書き込みたい

norique

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/07/31 11:37

前提・実現したいこと

gasで在庫管理をおこなっています。

他のシステムにデータをわたすため、
コード、サイズ、カラーを結合したコードを、別途つくりたいと思いますが、
setValuesでエラーが出て、書き込むことができません。

ABC列には以下のようなデータが入っています。
A列 商品コード (2行目以降に、AA123、BB123、DG458などのデータ)
B列 サイズ (2行目以降に、S、M、Lなどのデータ)
C列 カラー (2行目以降に、Red、Blue、Yellowなどのデータ)

これを下のように結合して、E列に書き込みたいです。
AA123-A-Red、BB123-M-Blue、DG458-L-Yellow

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

結合した配列データのnewCodeを、setValuesできない状況です。

Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues.

該当のソースコード

gas

1function editCode() { 2 3var file = SpreadsheetApp.openById('aaaaa'); 4var sheet = file.getSheetByName('bbbbb'); 5 6var objCode = sheet.getRange('A2:A').getValues(); 7var lastRow_length = objCode.filter(String).length; 8 9var editCode = sheet.getRange('A2:C').getValues(); 10var newCode = []; 11for (var i = 0; i < lastRow_length; i++){ 12 newCode.push(editCode[i][0] + '-' + editCode[i][1]+ '-' + editCode[i][2]); 13} 14 15sheet.getRange('E2:E').setValues(newCode); 16 17} 18

試したこと

データの行数はその都度変わるので、最終的に変数にしたいですが、
sheet.getRange('E2:E')を決め打ちで、getRange('E2:E50')のようにしてもダメでした。

ご教授のほど、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分の解釈があっているか微妙ですが、以下のコードで出来るかと思います。

GAS

1function editCode() { 2 var file = SpreadsheetApp.openById("aaaaa"); 3 var sheet = file.getSheetByName("シート1"); 4 5 var values = sheet.getRange("A2:C").getValues(); 6 var values_set = values.map(function (v, i) { 7 if (v[0]) { 8 return [v.join(`-`)]; 9 } else { 10 return [``]; 11 } 12 }); 13 sheet.getRange(`E2:E${values_set.length + 1}`).setValues(values_set); 14} 15

投稿2021/07/31 20:56

fake_shibe

総合スコア806

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

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

norique

2021/08/02 23:13 編集

期待通りの動作で、速度も速いです。 ・(`E2:E${values_set.length + 1}`)で、変数を含む文字列「`」の使い方。 ・for文ではなく、if文の使いどころ。 など、ご教授いただいたコード勉強して理解を深めたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問