回答編集履歴

2

コード全文を追記しました。

2023/06/08 23:44

投稿

YellowGreen
YellowGreen

スコア731

test CHANGED
@@ -38,3 +38,61 @@
38
38
  start_pos, end_pos, SpreadsheetApp.newTextStyle().setForegroundColor(colors[index]).build()
39
39
  ```
40
40
 
41
+ (追記です。)
42
+
43
+ > GASは初心者の為、コードを書いてくださると助かります。
44
+
45
+ ということなので修正後のコード全文を追記しておきます。
46
+
47
+ ```JavaScript
48
+ function changeKeyWordColor() {
49
+ // 列の指定 1→A列、2→B列、3→C列・・・
50
+ var col = 3;
51
+ // 色の指定
52
+ // var color = '#ff0000';
53
+ // キーワードの指定
54
+ // var keywords = ['あいうえお', 'かきくけこ', 'さしすせそ'];
55
+ // キーワードと色の指定
56
+ var keysAndColors = [
57
+ ['赤', '#ff0000'],
58
+ ['青', '#0000ff'],
59
+ ['緑', '#008000'],
60
+ ['黄', '#ffff00'],
61
+ ];
62
+ //それぞれの配列に再構成
63
+ var keywords = keysAndColors.map(v => v[0]);
64
+ var colors = keysAndColors.map(v => v[1]);
65
+ var sheet = SpreadsheetApp.getActiveSheet();
66
+ var last_row = sheet.getLastRow();
67
+ var row = 1;
68
+ var values = sheet.getRange(row, col, last_row).getValues();
69
+ for (var i = 0; i < last_row; i++) {
70
+ var cell_value = values[i];
71
+ var reg_test = new RegExp(keywords.join("|"));
72
+ // セルの値の中にキーワードが無ければ、スキップして次のセルへ
73
+ if (reg_test.test(cell_value) === false) {
74
+ continue;
75
+ }
76
+ // リッチテキストを作成して、セルのテキストを設定
77
+ var rich_text = SpreadsheetApp.newRichTextValue().setText(cell_value);
78
+ // keywords.forEach(function (value) {
79
+ keywords.forEach(function (value, index) {
80
+ var regexp = new RegExp(value, "g");
81
+ var result;
82
+ // キーワードの開始位置をグローバル検索
83
+ while (result = regexp.exec(cell_value)) {
84
+ var start_pos = result.index;
85
+ var end_pos = start_pos + value.length
86
+ // テキストスタイルを設定
87
+ rich_text = rich_text.setTextStyle(
88
+ // 開始位置、終了位置、色
89
+ // start_pos, end_pos, SpreadsheetApp.newTextStyle().setForegroundColor(color).build()
90
+ start_pos, end_pos, SpreadsheetApp.newTextStyle().setForegroundColor(colors[index]).build()
91
+ );
92
+ }
93
+ });
94
+ // キーワードに色がついたテキストをセルに設定
95
+ sheet.getRange((i + 1), col).setRichTextValue(rich_text.build());
96
+ }
97
+ }
98
+ ```

1

変数宣言を元のコードに合わせました。

2023/06/08 23:13

投稿

YellowGreen
YellowGreen

スコア731

test CHANGED
@@ -21,8 +21,8 @@
21
21
  ['黄', '#ffff00'],
22
22
  ];
23
23
  //それぞれの配列に再構成(インデックスは同じまま)
24
- const keywords = keysAndColors.map(v => v[0]);
24
+ var keywords = keysAndColors.map(v => v[0]);
25
- const colors = keysAndColors.map(v => v[1]);
25
+ var colors = keysAndColors.map(v => v[1]);
26
26
  ```
27
27
  そして色の指定の際にキーワードに対応した色にするためにキーワードのindexを引数に追加します。
28
28
  ```js