前提・実現したいこと
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/ツールのバージョンなど)
回答は急ぎません。
次回から自分で解決できるようになりたいので、
非エンジニアビギナーでも理解できるレベルでの解説を
いただけると助かります。
お手数をおかけいたしますが、どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/11 10:27
2023/02/11 10:58