回答編集履歴
2
依頼により各行にコメントを挿入
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
|
-
//
|
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
ログ採取を追加しました。
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("◎", ""));
|