【GAS】条件に合致した行にだけ連番を振りたい

前提・実現したいこと

C列に連番を振りたい。
ただし、連番を振る対象は、A列にチェックがある行だけ。
(A列にチェックなしは連番は振らない)

(スプレッドシートイメージ)
イメージ説明

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

(正)
セルC2:1
セルC3:2
セルC4:ブランク
セルC5:ブランク
セルC6:3  としたいが、

現コードだとA列が trueか falseかを問わずセルC2から連番が
振られてしまう。

試したこと

連番ではなく、A列が trueの時に一律"★"を追記 の処理はできました。

なので、一律"★"を追記 の部分を、
A列=true分だけでループをまわし、1はじまりのループカウンタ(j)を
setValue()すればできるか? の発想からコードを書いてみたのですが、
現コードではA列の値を問わず、ループがまわってしまい、失敗して
いそうです。

(処理後のイメージ)
イメージ説明

現コード(orアプローチの仕方) のどこがNGで、どのように
コード修正すればよいか、アドバイスをいただけないでしょうか?

該当のソースコード

下にコード全文記載します

GAS

1function addNumber() { 2 3 /* 4 A列チェックありの行だけで新配列arrTrueを作成 5 */ 6 7 const ss = SpreadsheetApp.getActiveSpreadsheet(); 8 const sheet = ss.getActiveSheet(); 9 const lastRow = sheet.getLastRow(); 10 console.log('lastRow ' + lastRow); //6が出た 11 12 const myValues = sheet.getRange(2, 1, 5, 1).getValues(); 13 console.log('myValues ', myValues); 14 15 const arrTrue = myValues.filter(value => value[0]); 16 console.log("arrTrue.length " + arrTrue.length); 17 console.log("arrTrue ", arrTrue); 18 const trueNum = arrTrue.length; //最終連番 19 console.log('trueNum ' + trueNum); //3が正解 20 21 for (i = 0; i <= 4; i++) { 22 const flag = myValues[i][0]; 23 if (flag === true) { 24 for (let j = 1; j <= trueNum; j++) { 25 //A列=trueの配列arrTrueの要素の数trueNum分だけ処理を行う 26 //sheet.getRange(i + 2, 3, 1, 1).setValue("★"); //できる 27 sheet.getRange(j + 1, 3, 1, 1).setValue(j); //★うまくできない★ 28 } 29 } 30 } 31 SpreadsheetApp.flush(); 32 Browser.msgBox("処理したよ"); 33} 34

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

回答は急ぎません。
次回から自分で解決できるようになりたいので、
非エンジニアビギナーでも理解できるレベルでの解説を
いただけると助かります。
お手数をおかけいたしますが、どうぞよろしくお願いいたします。

コメントを投稿

0 コメント