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

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

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

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

Q&A

解決済

1回答

473閲覧

GAS for文 転記のやり方

gatti

総合スコア3

Google Apps Script

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

1グッド

0クリップ

投稿2022/09/25 00:10

編集2022/09/25 00:24

前提

ここに質問の内容を詳しく書いてください。
備品の発注履歴を記録していくシートを作りたいと考えています。
ですが、うまく作動せず悩んでいます。

実現したいこと

元データのI列のセルに日付が入っていたら、別シートに転記されるようにしたいです。

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

転記されません

該当のソースコード

function sonota() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var base = ss.getSheetByName('その他');//元データ var Bretsu = base.getRange('B:B').getValues(); var Blr = Bretsu.filter(String).length; var LastRow = base.getRange(1,1,Blr,9).getValues();//その他のデータ全取得 //Logger.log(LastRow); for(var i=2; i<=LastRow; i++){ if(base.getRange(i,8).getValue() !== ""){ var saki = ss.getSheetByName('発注履歴');//転記先 var Aretsu = saki.getRange('A:A').getValues(); var Alr = Aretsu.filter(String).length; Logger.log(Alr); var day = base.getRange(i,9).getValue(); var mono = base.getRange(i,2).getValue(); Logger.log(day) saki.getRange(Alr+1,1,1,1).setValue(day); saki.getRange(Alr+1,2,1,1).setValue(mono); } } }

試したこと

補足情報(FW/ツールのバージョンなど)

Cocode👍を押しています

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

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

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

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

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

YAmaGNZ

2022/09/25 01:39

ログを出力しているようですがどのように出力されますか? また、エディタからデバッグ実行できますが、途中で止めたりすればその時の変数の内容が見れたりします。 デバッグは行いましたか?
gatti

2022/09/25 02:25

Lastrowのみ出力され、あとのAlrとdayは何も出力されませんでした。 デバックを行ってみました。Alr,day,mono がundefendと表示されていました。
YAmaGNZ

2022/09/25 03:47

その出力されたLastrowの値は正しいのでしょうか? 最終行の行番号を期待しているのにデータの配列になっていませんか?
guest

回答1

0

ベストアンサー

不具合の原因

  • for() {}が全く動いていなかった。
    • forの中にconsole.log('Hi')だけ書いた状態でも動いていませんでした。
  • forの繰り返し回数指定i<=LastRow;のLastRawが数値ではなかった。
  • var LastRow = ...で取得しているのは「その他」シートから取得したデータが格納された配列であり、数値ではありませんでした。

解決方法

.lengthを追加して、var LastRow = base.getRange(1,1,Blr,9).getValues().length;としました。
これによりデータの行数が数値として取得されます。
試してみたところ無事転記がされていました。

javascript

1function sonota() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var base = ss.getSheetByName('その他'); 4 5 var Bretsu = base.getRange('B:B').getValues(); 6 var Blr = Bretsu.filter(String).length; 7 var LastRow = base.getRange(1,1,Blr,9).getValues().length; //その他のデータの長さを取得 8 9 for(var i=2; i<=LastRow; i++){ 10 if(base.getRange(i,8).getValue() !== ""){ 11 var saki = ss.getSheetByName('発注履歴'); 12 var Aretsu = saki.getRange('A:A').getValues(); 13 var Alr = Aretsu.filter(String).length; 14 console.log(Alr); 15 16 var day = base.getRange(i,9).getValue(); 17 var mono = base.getRange(i,2).getValue(); 18 console.log(day) 19 20 saki.getRange(Alr+1,1,1,1).setValue(day); 21 saki.getRange(Alr+1,2,1,1).setValue(mono); 22 } 23 } 24}

投稿2022/09/26 02:11

Cocode

総合スコア2314

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問