回答編集履歴

2

依頼により各行にコメントを挿入

2023/10/24 11:12

投稿

YellowGreen
YellowGreen

スコア731

test CHANGED
@@ -3,32 +3,58 @@
3
3
  ここからコードを全てコピペしてお試しください。
4
4
  (追記)
5
5
  データが異なる場合に、ログを表示するようにしました。
6
-
6
+ (追記2)
7
+ 各行にコメントを入れました。
7
8
  ```js
8
9
  function cellReplace() {
10
+ //このスクリプトがあるスプレッドシートから指定の名前のシートをssとして取得
9
11
  var ss = SpreadsheetApp.getActive().getSheetByName("シート1");
10
- //ト取得
12
+ //タの先頭の行番号を変数nに代入
11
13
  var n = 5;
12
- //5行目から始めたいため
14
+ //今日の日付を生成し、変数todayに格納
13
15
  let today = new Date();
16
+ //日付をyyyy/MM/ddの書式の文字列に変換して変数todayに代入
14
17
  today = Utilities.formatDate(today, "JST", "YYYY/MM/dd")
15
- //日付取得てフォマット当てはめ
18
+ //条件を設定せずに繰り返処理を開始(無限ルプ)
16
19
  for (; ;) {
20
+ //B列のn行目のセル範囲をrangeBとして取得
17
21
  var rangeB = ss.getRange("B" + n);
22
+ //C列のn行目のセル範囲をrangeCとして取得
18
23
  var rangeC = ss.getRange("C" + n);
24
+ //A列のn行目のセル範囲に表示されている文字を変数rangeAに代入
19
25
  var rangeA = ss.getRange("A" + n).getDisplayValue();
26
+ //変数rangeAの値が無いか0(理論値で偽)のとき
20
27
  if (!rangeA) {
28
+ //繰り返し処理(無限ループ)を抜ける
21
29
  break;
30
+ //直近のifの条件を満たしたときの処理はここまで、
31
+ //elseが続くのでその後は条件を満たさなかったときの処理が始まる
22
32
  } else {
33
+ //変数rangeAの値が変数todayの値と一致しない
34
+ //または、rangeBのセル範囲から取得した値が「記載済み」と一致しないとき
23
35
  if (rangeA != today || rangeB.getValue() != "記載済み") {
36
+ //ログに変数todayの値とセル範囲rangeBから取得した値を表示
24
37
  console.log('today: ' + today + ' rangeB: ' + rangeB.getValue());
38
+ //直前のifの条件を満たしたときの処理はここまで
25
39
  }
40
+ //変数rangeAの値が変数todayの値と一致し、
41
+ //かつ、rangeBのセル範囲から取得した値が「記載済み」と一致するとき
26
42
  if (rangeA == today && rangeB.getValue() == "記載済み") {
43
+ //rangeBのセル範囲から取得した値の「記載済み」の部分を「未記載」に置換した上で
44
+ //rangeBのセル範囲に上書き
27
45
  rangeB.setValue(rangeB.getValue().replace("記載済み", "未記載"));
46
+ //rangeCのセル範囲から取得した値の「◎」の部分を空白に置換した上で、
47
+ //rangeCのセル範囲に上書き
28
48
  rangeC.setValue(rangeC.getValue().replace("◎", ""));
49
+ //直前のifの条件を満たしたときの処理はここまで
29
50
  }
51
+ //nの値に1を加算する
30
52
  n++;
53
+ //最初のifの条件を満たさなかったとき(else以降)の処理はここまで
31
54
  }
55
+ //for(;;)以降の処理はここまでを繰り返す
32
56
  }
57
+ //for(;;)の繰り返し処理(無限ループ)を抜けたらここに到達
33
58
  }
34
59
  ```
60
+

1

ログ採取を追加しました。

2023/10/24 06:33

投稿

YellowGreen
YellowGreen

スコア731

test CHANGED
@@ -1,6 +1,8 @@
1
1
  できるだけ元のコードをそのままにしてありますが、
2
2
  似ていて異なる文字が使われていたりしたので、
3
3
  ここからコードを全てコピペしてお試しください。
4
+ (追記)
5
+ データが異なる場合に、ログを表示するようにしました。
4
6
 
5
7
  ```js
6
8
  function cellReplace() {
@@ -9,7 +11,7 @@
9
11
  var n = 5;
10
12
  //5行目から始めたいため
11
13
  let today = new Date();
12
- today = Utilities.formatDate(today, "JST", "YYYY/MM/dd");
14
+ today = Utilities.formatDate(today, "JST", "YYYY/MM/dd")
13
15
  //日付取得してフォーマット当てはめ
14
16
  for (; ;) {
15
17
  var rangeB = ss.getRange("B" + n);
@@ -18,6 +20,9 @@
18
20
  if (!rangeA) {
19
21
  break;
20
22
  } else {
23
+ if (rangeA != today || rangeB.getValue() != "記載済み") {
24
+ console.log('today: ' + today + ' rangeB: ' + rangeB.getValue());
25
+ }
21
26
  if (rangeA == today && rangeB.getValue() == "記載済み") {
22
27
  rangeB.setValue(rangeB.getValue().replace("記載済み", "未記載"));
23
28
  rangeC.setValue(rangeC.getValue().replace("◎", ""));