質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Q&A

2回答

610閲覧

GASが都度発火し、何度も通知が来る

reoreo1105

総合スコア5

AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

0グッド

0クリップ

投稿2022/11/06 14:50

編集2022/11/06 14:57

前提

承認依頼システムをGASで作成しております。
2つの条件が一致した場合にSlackに通知されるようにしております。

しかし、2つの条件が揃ったらその行の他のセル(指定していない)を変更すると都度Slackに通知が来てしまう。

実現したいこと

  • スプレッドシート変更時2つの条件以外の通知はこなくしたいです。

2つの条件が揃った行でチェックボックスにチェックを入れただけでもスラックに通知がくるのでなくしたい

発生している問題・エラーメッセージ

特になし

該当のソースコード

function onEdit(e) { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート(book) var activeSheet = activeSpreadsheet.getActiveSheet(); // アクティブシート(sheet) var activeCell = activeSheet.getActiveCell(); // アクティブセル var activeValue = activeCell.getValue(); // アクティブセルの値 var newInputRow = activeCell.getRow(); // アクティブ行 var spreadsheetUrl =  // スプレッドシートのURL ///////////////////////////////////////////////// // slack更新通知 :承認依頼用 (Customer) // //////////////////////////////////////////////// if(activeSheet.getRange(activeCell.getRow(),9).getValue() == "Customer" && activeSheet.getRange(activeCell.getRow(),10).getValue() == "承認依頼中") { //処理; var newInputRow = activeCell.getRow(); var taskNo = activeSheet.getRange(activeCell.getRow(), 1).getValues(); var user = activeSheet.getRange(activeCell.getRow(), 3).getValues(); var region = activeSheet.getRange(activeCell.getRow(), 9).getValues(); // 送信するSlackのテキスト var slackText = "<@U03KCRF5JF5> \n " + user + " さんよりNo." + taskNo + " に *承認依頼* が追加されました! \n 【 *領域* 】 ```"+ region + " ```※返金依頼がない場合でも、返金の必要性がないか注視しましょう  \n" + spreadsheetUrl ; sendSlack(slackText); }

試したこと

トリガーを「スプレッドシート」⇨「変更」と「編集」に変えましたが変わらず全て通知が来てしまいます。

9行目と10行目が一致した場合のみだけSlackに通知お送り、その行の他のセルを変更しても通知がこないようにするにはどこを修正すればよろしいのでしょうか。。

GASに詳しい方ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reoreo1105

2022/11/06 15:06

WEBで色々調べたのですが、トリガーを変更するなどということしかわからず、実際のコードの修正がわからなく質問をさせていただいております、、
reoreo1105

2022/11/06 15:22

同じような質問については一度削除中ですmm
guest

回答2

0

ちょっと文章がよくわからないところもあるので
的確かどうかわからないんですが

どこかの列に「通知済みフラグ」でも作って
通知を飛ばすスクリプトの最後に
「通知済みフラグにTRUEを入れる」
処理を入れればどうでしょうか。

そしてスクリプトの最初に
「通知済みフラグがTRUEでない場合」
を実行条件として加えれば
平和が訪れる気がします。

投稿2022/11/06 15:32

Kotapi

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reoreo1105

2022/11/06 15:38

文章がわかりづらく申し訳ございません、、 【A列】〜【R列】までGSSがあるのですが、【H列】【J列】が特定の文字になった場合のみスラックに通知させているのですが、その後他のセルに文字を入れても発火してしまい同じ文言がSlackに飛んできてしまうという形になります。。
Kotapi

2022/11/06 15:55 編集

なるほど、それであれば、なおさら上記の方法で良いのではないでしょうか? 例えばS列に「通知済み判定」列を作り、空欄orTRUE になる状況を作って準備します。 スクリプトの最初に「S列がTRUEかどうか」を判定しTRUEであれば通知せず 空欄であれば通知する仕組みにしておいて スクリプトの最後にS列を「TRUE」にするように設定しておけば 通知は最初の1回きりになると思うんですよね。
guest

0

トリガーには特定のセルの変更時は指定はできないので処理内容で指定するしかないと思います。
↓の場合はシートに変更があった時、アクティブセルが9列目か10列目かつ同じ行の9列目と10列目の値が一致した時

if(activeCell.getColumn() == 9 || activeCell.getColumn() == 10 && sheet.getRange(newInputRow,9).getValue() == "Customer" && sheet.getRange(newInputRow,10).getValue() == "承認依頼中") {

投稿2022/11/07 00:29

bebebe_

総合スコア504

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問