質問編集履歴

1

2022/01/29 23:14

投稿

Por
Por

スコア40

test CHANGED
File without changes
test CHANGED
@@ -1,27 +1,67 @@
1
+ # 追記内容
2
+ 下記参照
3
+ qnoir様,ご指摘ありがとうございます.
4
+
5
+ # 現状
6
+ 現コードでは添付の画像結果が出力されます.
7
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-30/18b4ca30-b4cf-4244-8f3d-6f3285742a55.png)
8
+
9
+
1
10
  # 目的,ゴール
2
11
  スクリプトによって
3
12
  「ボタンを押したときのみ,任意の列の計算を更新する」
13
+ 「C列配置のチェックボックスをTrueにし,かつ,値の貼り付けで完了,かつすでに貼り付けが完了している場合は更新しない」
4
14
  を達成したいです.
5
- 列全体を計算させたい,かつ,値の貼り付けで完了,かつ次回以降は値の貼り付けされた行に関しては更新しない
6
- このようにすることで,API仕様の再計算でリソースが消費されてしまうため,そしてそれを回避する
15
+ このようにすることで,GoogleSheets再計算のたびにAPIリソースが消費されてしまうことを回避する
7
16
  ことが目的です
8
17
 
18
+ # エラー概要
19
+ 図の例では,( K, 9 ), ( K, 10 )が翻訳されるはず,と期待しています.
20
+ 1,
21
+ K列に計算結果を出力させたく,
22
+ "range"定義に合わせて
23
+ 関数により(無理やり)範囲指定したものを実行させていますが,
24
+ エラーが発生しました.
25
+ GoogleTranslate関数の第1引数が範囲指定だから,ということが想定されます.
26
+ 2,
27
+ なお,arrayformula関数で配列式も試しましたが,
28
+ GoogleTranslate関数は複数の対象を一つのセル内に出力するため,断念しました.
29
+
9
- # コード
30
+ # コード
10
31
  ``` GAS
11
32
  // ボタンで指定セルに指定計算結果を, https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11157169156
12
33
  function click() {
13
- var ss = SpreadsheetApp.getActiveSpreadsheet();
34
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
14
- var sh = ss.getActiveSheet();
35
+ var sh = ss.getActiveSheet();
15
- var range = sh.getRange('K2:K')
36
+ var range = sh.getRange('K2:K')
16
- range.setFormula('=IF(C2:C=True, 1, "")');
37
+ range.setFormula('=IF(C2:C=True, GOOGLETRANSLATE(H2:H, "en", "ja"), "")');
17
- range.setValue(range.getValue())
38
+ range.setValue(range.getValue())
18
39
  }
40
+
41
+
19
42
  ```
20
-
21
43
  # お聞きしたいこと
22
- 1, 回答者様が感がてらっしゃるベストプラクティス
44
+ 1, 回答者様が考えてらっしゃるベストプラクティス
23
45
  2, 計算式だけの解決であれば計算式の修正
24
46
  3, 計算式ではない点で修正が必要であれば
25
47
 
26
48
  ご教授いただけたら幸いです.
27
49
  ご返信お待ちしております.よろしくお願いいたします.
50
+
51
+ # すでに頂いているご質問について
52
+ ① 質問のコードで何かエラーが発生しているのでしょうか?
53
+ GoogleTranslate関数の第1引数が範囲指定だから,ということが想定されます.
54
+
55
+ ②もしくは、 質問のコードでは、希望する動作にならないのでしょうか?
56
+ はい,希望する動作になっておりません.関数計算の結果が出力されることを希望しています.
57
+
58
+ 1.今回制御対象とするのは、K列の2行目以降のセル(行数は不定)である。 >>> おっしゃるとおりでございます.
59
+ 2.C列に手入力でデータが入っており、K列の各行は、C列の数値を使って計算した計算結果を表示する。 >>> おっしゃるとおりでございます.
60
+ 3.ボタンを押したら、下記の動作を行うものとする。
61
+ _・「C列に値が入っているが、K列には値の入っていない"行"」に対して
62
+ __ =IF(C▲=True, 1, "") ※▲は各行番号
63
+ __ に該当する数式を設定する。(K列のうち、すでに値貼り付けとなっているセルには数式を設定しない) >>> おっしゃるとおりでございます.
64
+
65
+ 4.各行に数式を設定した直後、数式設定したセルに対して、その計算結果を値貼り付けする。 >>>はい,計算結果が関数のままでないことを達成したいです.
66
+
67
+