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

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

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

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

受付中

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

reoreo1105
reoreo1105

総合スコア1

AppleScript

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

2回答

0グッド

0クリップ

238閲覧

投稿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に詳しい方ご教示いただけますと幸いです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/06 15:10

こちらの質問が他のユーザーから「過去に投稿した質問と同じ内容の質問」という指摘を受けました。

reoreo1105

2022/11/06 15:06

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

2022/11/06 15:22

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

回答2

1

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

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

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

投稿2022/11/06 15:32

Kotapi

総合スコア5

Cocode👏を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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回きりになると思うんですよね。

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_

総合スコア348

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

AppleScript

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