質問編集履歴

2

一部変更

2023/06/08 12:24

投稿

Noeru
Noeru

スコア1

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  Googleスプレッドシートで、特定の列全体のセル内の特定の単語だけ着色したい
18
18
  https://teratail.com/questions/173480
19
+
20
+
19
21
  function ChangeKeyWordColor() {
20
22
 
21
23
  // 列の指定 1→A列、2→B列、3→C列・・・

1

質問内容に追記

2023/06/08 12:22

投稿

Noeru
Noeru

スコア1

test CHANGED
File without changes
test CHANGED
@@ -6,3 +6,64 @@
6
6
  GASは初心者の為、コードを書いてくださると助かります。
7
7
 
8
8
  よろしくお願いします。
9
+
10
+ 追記
11
+ 下記のコードにて、キーワードを赤のみに変更して実行
12
+ 次にキーワードを青のみに変更して実行
13
+ すると、セルの中に『赤青』が入ってる場合、赤しか赤字にならない。
14
+ 同一セルに対象の文字列が含まれる場合どうも上手くいかず、理由が分かりません。
15
+
16
+
17
+ Googleスプレッドシートで、特定の列全体のセル内の特定の単語だけ着色したい
18
+ https://teratail.com/questions/173480
19
+ function ChangeKeyWordColor() {
20
+
21
+ // 列の指定 1→A列、2→B列、3→C列・・・
22
+ var col = 3;
23
+
24
+ // 色の指定
25
+ var color = '#ff0000';
26
+
27
+ // キーワードの指定
28
+ var keywords = ['あいうえお', 'かきくけこ', 'さしすせそ'];
29
+
30
+ var sheet = SpreadsheetApp.getActiveSheet();
31
+ var last_row = sheet.getLastRow();
32
+ var row = 1;
33
+ var values = sheet.getRange(row, col, last_row).getValues();
34
+
35
+ for (var i = 0; i < last_row; i++) {
36
+
37
+ var cell_value = values[i];
38
+ var reg_test = new RegExp(keywords.join("|"));
39
+
40
+ // セルの値の中にキーワードが無ければ、スキップして次のセルへ
41
+ if (reg_test.test(cell_value) === false) {
42
+ continue;
43
+ }
44
+
45
+ // リッチテキストを作成して、セルのテキストを設定
46
+ var rich_text = SpreadsheetApp.newRichTextValue().setText(cell_value);
47
+
48
+ keywords.forEach(function (value) {
49
+
50
+ var regexp = new RegExp(value, "g");
51
+ var result;
52
+
53
+ // キーワードの開始位置をグローバル検索
54
+ while (result = regexp.exec(cell_value)) {
55
+
56
+ var start_pos = result.index;
57
+ var end_pos = start_pos + value.length
58
+
59
+ // テキストスタイルを設定
60
+ rich_text = rich_text.setTextStyle(
61
+ // 開始位置、終了位置、色
62
+ start_pos, end_pos, SpreadsheetApp.newTextStyle().setForegroundColor(color).build()
63
+ );
64
+ }
65
+ });
66
+ // キーワードに色がついたテキストをセルに設定
67
+ sheet.getRange((i + 1), col).setRichTextValue(rich_text.build());
68
+ }
69
+ }