回答編集履歴

7

質問の変更にあわせて回答を修正しました。

2024/01/29 10:45

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -1,22 +1,26 @@
1
- 参照の文字にリンクを貼るということがよくわかりませんが、
2
- リンクを取得したいのであれば、
3
1
 
4
2
  ```js
5
- const url = sheet.getRange(...).getValue();
3
+ const value = sheet.getRange(...).getValue();
4
+ const values = sheet.getRange(...).getValues();
6
5
  ```
7
6
  のようにデータを取得してしまうとセルに表示されている値のみが取得されますので、
8
- リンクを取得したいときは、
7
+ リンクをを含んだままの状態のセルの値(リッチテキスト値)を取得するには、
9
8
  ```js
10
- const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
9
+ const richValue = sheet.getRange(...).getRichTextValue();
10
+ const richValues = sheet.getRange(...).getRichTextValues();
11
11
  ```
12
- てみてください
12
+ のように記述ます
13
+ また、取得したリッチテキスト値をシートに記入するときは、
14
+ ```js
15
+ sheet.getRange(...).setRichTextValue(richValue);
16
+ sheet.getRange(...).setRichTextValues(richValues);
17
+ ```
18
+ のように記述します。
13
19
 
14
- コメント欄での説明では希望の動作がよくわかりませんでしたので、
15
- 仮定での回答になりますが
20
+ 例えば
16
21
  シート1のI列にリンク付きのデータが保存されていて、
17
- その列のデータをシート2のI列に転記する場合は、
22
+ その列のデータをリンク付のデータはリンク付きのままシート2のI列に転記する場合は、
18
- リンク付のデータはリンク付きのまま転記したいということであれば、
19
- 次のスクリプトが参考になるかもしれせん
23
+ 次のスクリプトのようにな
20
24
 
21
25
  ```js
22
26
  function myFunction() {
@@ -38,3 +42,9 @@
38
42
  .setRichTextValues(richValues);
39
43
  }
40
44
  ```
45
+
46
+ お示しのコードでも、
47
+ I 列のデータの取得と記入のところで
48
+ 取得(valueAdd4)のところで、**_.getValues()_** を **_.getRichTextValues()_** に変更し、
49
+ 記入(add4)のところで、**_.setValues()_** を **_.setRichTextValues()_** に変更することで動作するようになると思います。
50
+

6

説明の字句修正

2024/01/29 04:00

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -5,7 +5,7 @@
5
5
  const url = sheet.getRange(...).getValue();
6
6
  ```
7
7
  のようにデータを取得してしまうとセルに表示されている値のみが取得されますので、
8
- リンク付きのデータとして取得したいときは、
8
+ リンク取得したいときは、
9
9
  ```js
10
10
  const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
11
11
  ```

5

コードを単純なものに修正しました。

2024/01/29 03:59

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -4,33 +4,22 @@
4
4
  ```js
5
5
  const url = sheet.getRange(...).getValue();
6
6
  ```
7
- のようにデータを取得するとセルに表示されている値が取得されますので、
7
+ のようにデータを取得してしまうとセルに表示されている値のみが取得されますので、
8
8
  リンク付きのデータとして取得したいときは、
9
9
  ```js
10
10
  const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
11
11
  ```
12
12
  としてみてください。
13
13
 
14
- 仮に、リンク付きの「参照」という値を他のセルに挿入したいということであれば、
15
- ```js
16
- const value = sheet.getRange(...).getValue();
17
- const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
18
- const richText = SpreadsheetApp.newRichTextValue()
19
- .setText(value)
20
- .setLinkUrl(url);
21
- sheet.getRange(...).setRichTextValue(richText.build());
22
- ```
23
- のようにします。
24
-
25
- また、コメント欄での説明では希望の動作がよくわかりませんでしたので、
14
+ コメント欄での説明では希望の動作がよくわかりませんでしたので、
26
15
  仮定での回答になりますが、
27
16
  シート1のI列にリンク付きのデータが保存されていて、
28
- その列のデータをシート2のI列に転記すると仮定した場合、
17
+ その列のデータをシート2のI列に転記する場合
29
18
  リンク付のデータはリンク付きのまま転記したいということであれば、
30
19
  次のスクリプトが参考になるかもしれません。
31
20
 
32
21
  ```js
33
- function myFunction2() {
22
+ function myFunction() {
34
23
  // 初期設定
35
24
  const ss = SpreadsheetApp.getActiveSpreadsheet()
36
25
  const sheet1 = ss.getSheetByName('シート1');
@@ -42,16 +31,10 @@
42
31
  const urlCol2 = 9; // シート2の記入先の列(例えばI列)
43
32
 
44
33
  // 特定の列のリンク付の値を他のシートの指定の列に記入
34
+ const richValues = sheet1
45
- const urlRange = sheet1.getRange(startRow1, urlCol1, lastRow1 - startRow1 + 1, 1);
35
+ .getRange(startRow1, urlCol1, lastRow1 - startRow1 + 1, 1)
46
- const urlValues = urlRange.getValues().flat();
47
- const urlRichValues = urlRange.getRichTextValues().flat();
48
- const urls = urlRichValues.map(v => v && v.getLinkUrl());
49
- const richTexts = urls.map((v, i) => [SpreadsheetApp
50
- .newRichTextValue()
36
+ .getRichTextValues();
51
- .setText(urlValues[i])
52
- .setLinkUrl(v)
53
- .build()]);
54
- sheet2.getRange(startRow2, urlCol2, richTexts.length, richTexts[0].length)
37
+ sheet2.getRange(startRow2, urlCol2, richValues.length, richValues[0].length)
55
- .setRichTextValues(richTexts);
38
+ .setRichTextValues(richValues);
56
39
  }
57
40
  ```

4

字句の修正

2024/01/26 23:33

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -22,7 +22,7 @@
22
22
  ```
23
23
  のようにします。
24
24
 
25
- また、コメント欄での説明では希望の動作がよくわかりませんでした
25
+ また、コメント欄での説明では希望の動作がよくわかりませんでしたので
26
26
  仮定での回答になりますが、
27
27
  シート1のI列にリンク付きのデータが保存されていて、
28
28
  その列のデータをシート2のI列に転記すると仮定した場合、

3

スクリプトの例を追加

2024/01/26 23:32

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -4,7 +4,8 @@
4
4
  ```js
5
5
  const url = sheet.getRange(...).getValue();
6
6
  ```
7
- のようにデータを取得するとセルに表示されている値が取得されます
7
+ のようにデータを取得するとセルに表示されている値が取得されますので、
8
+ リンク付きのデータとして取得したいときは、
8
9
  ```js
9
10
  const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
10
11
  ```
@@ -20,3 +21,37 @@
20
21
  sheet.getRange(...).setRichTextValue(richText.build());
21
22
  ```
22
23
  のようにします。
24
+
25
+ また、コメント欄での説明では希望の動作がよくわかりませんでしたが、
26
+ 仮定での回答になりますが、
27
+ シート1のI列にリンク付きのデータが保存されていて、
28
+ その列のデータをシート2のI列に転記すると仮定した場合、
29
+ リンク付のデータはリンク付きのまま転記したいということであれば、
30
+ 次のスクリプトが参考になるかもしれません。
31
+
32
+ ```js
33
+ function myFunction2() {
34
+ // 初期設定
35
+ const ss = SpreadsheetApp.getActiveSpreadsheet()
36
+ const sheet1 = ss.getSheetByName('シート1');
37
+ const sheet2 = ss.getSheetByName('シート2');
38
+ const lastRow1 = sheet1.getLastRow(); // シート1の最終行
39
+ const startRow1 = 2;// シート1の開始行
40
+ const startRow2 = 2;// シート2の開始行
41
+ const urlCol1 = 9; // シート1のリンク付きの列(I列)
42
+ const urlCol2 = 9; // シート2の記入先の列(例えばI列)
43
+
44
+ // 特定の列のリンク付の値を他のシートの指定の列に記入
45
+ const urlRange = sheet1.getRange(startRow1, urlCol1, lastRow1 - startRow1 + 1, 1);
46
+ const urlValues = urlRange.getValues().flat();
47
+ const urlRichValues = urlRange.getRichTextValues().flat();
48
+ const urls = urlRichValues.map(v => v && v.getLinkUrl());
49
+ const richTexts = urls.map((v, i) => [SpreadsheetApp
50
+ .newRichTextValue()
51
+ .setText(urlValues[i])
52
+ .setLinkUrl(v)
53
+ .build()]);
54
+ sheet2.getRange(startRow2, urlCol2, richTexts.length, richTexts[0].length)
55
+ .setRichTextValues(richTexts);
56
+ }
57
+ ```

2

貼り付けの例を追記

2024/01/26 04:45

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -10,3 +10,13 @@
10
10
  ```
11
11
  としてみてください。
12
12
 
13
+ 仮に、リンク付きの「参照」という値を他のセルに挿入したいということであれば、
14
+ ```js
15
+ const value = sheet.getRange(...).getValue();
16
+ const url = sheet.getRange(...).getRichTextValue().getLinkUrl();
17
+ const richText = SpreadsheetApp.newRichTextValue()
18
+ .setText(value)
19
+ .setLinkUrl(url);
20
+ sheet.getRange(...).setRichTextValue(richText.build());
21
+ ```
22
+ のようにします。

1

説明文を追加

2024/01/26 04:34

投稿

YellowGreen
YellowGreen

スコア791

test CHANGED
@@ -1,3 +1,6 @@
1
+ 参照の文字にリンクを貼るということがよくわかりませんが、
2
+ リンクを取得したいのであれば、
3
+
1
4
  ```js
2
5
  const url = sheet.getRange(...).getValue();
3
6
  ```