teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

2021/08/20 12:56

投稿

退会済みユーザー
answer CHANGED
@@ -94,9 +94,9 @@
94
94
  こっちの方が簡単かもしれません。
95
95
  ↓↓↓
96
96
  東海エリアシートのトリガーは現状のまま(変更時発火)にしておきます。
97
- 東海エリアシートの適当なセルに現時点の最終行を記録しておきます。
97
+ アイデアとしては、東海エリアシートの適当なセルに現時点の最終行をスクリプトで記録しておき
98
- フォームの回答がなされて、シートの変更イベントが発火したら、
98
+ フォームの回答が行われて、東海エリアシートの変更イベントが発火したら、
99
- 変更時点の最終行数と記録していた最終行数を比較して、異なれば東海エリアデータが追加されたとみなしグループ通知処理を行いす。
99
+ 変更時点の最終行数と記録していた最終行数を比較して、異なっていれば東海エリアの回答データが追加されたとみなしグループ通知処理を行う、とう流れです。
100
100
 
101
101
  [東海エリア]シートのスクリプト
102
102
  ```js

4

追加

2021/08/20 12:56

投稿

退会済みユーザー
answer CHANGED
@@ -85,4 +85,36 @@
85
85
  ・if文で都道府県を判定するのではなく、エリア設定を別のスプレッドシートに入力しておき、複数エリアに対応させる
86
86
  ・getValues()を使用して動作速度を速める
87
87
  ・getActiveSheetやopenByID 経由ではなく、トリガー関数の引数から回答データを取得する
88
- など、御自分で工夫してみて下さい。
88
+ など、御自分で工夫してみて下さい。
89
+
90
+
91
+ ---
92
+ #別解
93
+
94
+ こっちの方が簡単かもしれません。
95
+ ↓↓↓
96
+ 東海エリアシートのトリガーは現状のまま(変更時発火)にしておきます。
97
+ 東海エリアシートの適当なセルに現時点の最終行を記録しておきます。
98
+ フォームの回答がなされて、シートの変更イベントが発火したら、
99
+ 変更時点の最終行数と記録していた最終行数を比較して、異なれば東海エリアにデータが追加されたとみなしてグループ通知処理を行います。
100
+
101
+ [東海エリア]シートのスクリプト
102
+ ```js
103
+ function SendToGroupLine() {
104
+ ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
105
+ // 記録しておいた最終行数を取得
106
+ oldRowLen = ss.getRange("Z1").getValue();
107
+ // 現在の最終行数を取得
108
+ currentRowLen = ss.getLastRow();
109
+
110
+ if (oldRowLen != currentRowLen) {
111
+
112
+ Logger.log("東海エリアのデータが追加されました")
113
+ // グループ通知処理
114
+
115
+ }
116
+ // 現在の最終行数をZ1セルに記録
117
+ ss.getRange("Z1").setValue(currentRowLen);
118
+ }
119
+
120
+ ```

3

2021/08/20 12:38

投稿

退会済みユーザー
answer CHANGED
@@ -84,4 +84,5 @@
84
84
  たとえば
85
85
  ・if文で都道府県を判定するのではなく、エリア設定を別のスプレッドシートに入力しておき、複数エリアに対応させる
86
86
  ・getValues()を使用して動作速度を速める
87
+ ・getActiveSheetやopenByID 経由ではなく、トリガー関数の引数から回答データを取得する
87
88
  など、御自分で工夫してみて下さい。

2

修正

2021/08/20 12:03

投稿

退会済みユーザー
answer CHANGED
@@ -76,9 +76,12 @@
76
76
  ```
77
77
  (上記コード保存後、**フォーム回答の集計元シート**のトリガーに、「フォーム送信時」に下記SendToGroupLine関数を実行するように設定しておく)
78
78
  トリガー設定例
79
- ![イメージ説明](675bf3578601f6501069e4a81ddcf3e1.png)
79
+ ![イメージ説明](6a4d5485e9057c3eb70df757c9d8d9bd.png)
80
80
  ※東海エリアシート側のトリガー及びスクリプトは不要なので削除しておくこと。残っていると二重に通知が来る。
81
81
 
82
82
  --
83
83
  注意:上記コードは最適化する余地がたくさんありますが、理解しやすいように、あえて質問文記載のコードからあまり変えないようにしています。
84
+ たとえば
85
+ ・if文で都道府県を判定するのではなく、エリア設定を別のスプレッドシートに入力しておき、複数エリアに対応させる
86
+ ・getValues()を使用して動作速度を速める
84
- 勉強が進めていったら最適化してみて下さい。
87
+ など、御自分で工夫してみて下さい。

1

修正

2021/08/20 12:01

投稿

退会済みユーザー
answer CHANGED
@@ -17,12 +17,9 @@
17
17
  【具体案】
18
18
  そこで案として、[エリアシート]側ではなく、フォーム回答の集計元シートの側で、フォームから追加された回答データの都道府県を判定し、条件に当てはまる場合のみグループに送信する方法が考えられます。
19
19
   
20
-
21
20
  下記のように、**フォーム回答の集計元シート**のスクリプトに、
22
21
  都道府県を判定して該当する都道府県の場合はフラグをtrueにして送信するコードを記述します。
23
22
 
24
- (**フォーム回答の集計元シート**のトリガーに、「フォーム送信時」に下記SendToGroupLine関数を実行するように設定しておく)
25
- (エリアシート側のトリガー及びスクリプトは不要なので削除しておく)
26
23
  ```js
27
24
  // フォーム回答の集計元シートのスクリプト。
28
25
  // 下のSendToGroupLine()にフォーム送信時のトリガーを設定しておく。
@@ -77,6 +74,11 @@
77
74
 
78
75
  }
79
76
  ```
77
+ (上記コード保存後、**フォーム回答の集計元シート**のトリガーに、「フォーム送信時」に下記SendToGroupLine関数を実行するように設定しておく)
78
+ トリガー設定例
79
+ ![イメージ説明](675bf3578601f6501069e4a81ddcf3e1.png)
80
+ ※東海エリアシート側のトリガー及びスクリプトは不要なので削除しておくこと。残っていると二重に通知が来る。
80
81
 
82
+ --
81
83
  注意:上記コードは最適化する余地がたくさんありますが、理解しやすいように、あえて質問文記載のコードからあまり変えないようにしています。
82
84
  勉強が進めていったら最適化してみて下さい。