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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

2491閲覧

Googleスプレッドシートで特定のシt-トの特定の列に特定の文字列が入力されたらメールで通知したい

Toyo32

総合スコア3

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/06/02 02:42

前提

Googleスプレッドシートで、
特定のシートの特定の列に特定の文字列が入力されたら、メールで通知したい。

実現したいこと

ある回答をGooleフォームから受け付け、フォームで入力された値をGoogleスプレッドシートに表示させています。
1つのスプレッドシートの内にシートが3つあり、この3つ目のシート、シート名【Googleフォーム回答】のC列に特定の値「参加者」が入力されたら、指定のメールアドレスに通知したいです。

以前、同じような質問をさせていただきましたが、シートが3つに増えてしまい、3つとも同じ形式をとっているため、1つ目、2つ目のシートに回答があった際も通知のメールが飛んでしまうようになってしまいました。

Google Apps Scriptでの記述方法を教えていただけないでしょうか。

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

下記のソースコードではメールが飛ばなくなってしまいました。

該当のソースコード

function notification(){ const recipient = 'sample@hgu.jp'; //通知を飛ばす先のgメールアドレス const subject = 'Googleフォーム新規回答あり';//通知タイトル const body = 'https://docs.google.com/spreadsheets/sample';//確認するシートのURL var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在アクティブなスプレッドシートを取得 var sheet = ss.getSheets()[2]; // そのスプレッドシートにある3つめのシートを取得 var cell = sheet.getActiveCell(); // そのシートにあるアクティブなセルを取得 if(myCell.getColumn()==3 && myCell.getValue()=="参加者"){ //C列に参加者と入力があったか判定 GmailApp.sendEmail(recipient, subject, body);//通知メールを送信 } }

試したこと

var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得
var myCell = mySheet.getActiveCell(); //アクティブセルを取得

入力のあったシートから情報を取得するという上記ソースコードから
特定のシートを指定するソースコードを追加しました。

エラー表示はないですが、メールが送信されなくなりました。
シートの指定方法が良くないのだと思いますが、どこが間違っているのかわかりません。

ご教授いただけないでしょうか。

補足情報(FW/ツールのバージョンなど)

今後、シートの数が増える可能性もあるので、できればシート名を指定する方法を教えていただきたいです。
どうぞよろしくお願い致します。

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

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

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

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

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

k.a_teratail

2022/06/02 04:16

> if(myCell.getColumn()==3 && myCell.getValue()=="参加者") こちらの「myCell」という変数はどこに定義しているのでしょうか? 未定義の変数に対して、メソッドを実行しようとしてもエラーになります。 もしかして、ソースコードは一部抜粋なのでしょうか?
Toyo32

2022/06/02 04:49

>k.a_teratail 様 ソースコードはこれで全部です。 元々、スプレッドシートのシートが1つだったので、そのシートのC列に「参加者」が入力されたらメールで通知をするためのソースコードとして、 function notification(){ const recipient = 'sample@gmail.com'; //通知を飛ばす先のgメールアドレス const subject = '新規入力あり';//通知タイトル const body = ''https://docs.google.com/spreadsheets/d/samplxxxxxxxx';//確認するシートのURL var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var myCell = mySheet.getActiveCell(); //アクティブセルを取得 if(myCell.getColumn()==3){ //C列に入力があったか判定 GmailApp.sendEmail(recipient, subject, body);//通知メールを送信 } } 上記コードを教えていただきました。 今回はそのスプレッドシートにシートが追加されたため、入力があったら通知するシートを指定してメールを送信したかったのですが、シートを指定するコードを入れても、メールが飛ばなくなってしまいました。 この場合、Cセルに「参加者」が入力されたらというコードはどのように書き換えたらよいのでしょうか?
guest

回答2

0

ベストアンサー

var cell = sheet.getActiveCell(); // そのシートにあるアクティブなセルを取得 if(myCell.getColumn()==3 && myCell.getValue()=="参加者"){ //C列に参加者と入力があったか判定

cellとmyCellで名前が一致していないですね。
ただシートを指定してもgetActiveCell()は現在表示しているシートのセルを取得してそうです。
別シートのアクティブセルが取得できなさそうならIfの条件に現在のアクティブシート名を追加してはどうでしょう

if(ss.getSheetName() == "シート名" && cell.getColumn()==3 && cell.getValue()=="参加者")

投稿2022/06/02 05:40

bebebe_

総合スコア504

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

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

Toyo32

2022/06/02 06:56

>bebebe_ 様 ご教授いただき、ありがとうございます。 無事、メールを送信することができました。 大変助かりました。ありがとうございました。
guest

0

getSheetByNameを使うとシート名を指定することができます。

js

1var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在アクティブなスプレッドシートを取得 2var sheet = ss.getSheetByName('【Googleフォーム回答】'); // 「【Googleフォーム回答】」というシート名のシートを取得

上記で問題ないとは思いますが、スプレッドシート自体を特定したい場合はopenByUrlを使います。

js

1var ss = SpreadsheetApp.openByUrl('スプレッドシートのURL'); // 指定したURLのスプレッドシートを取得 2var sheet = ss.getSheetByName('【Googleフォーム回答】'); // 「【Googleフォーム回答】」というシート名ののシートを取得

投稿2022/06/02 04:16

編集2022/06/02 04:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Toyo32

2022/06/02 05:01

>qnoir 様 シートの指定方法をご教授いただきまして、ありがとうございます。 教えていただいたコードに修正しましたが、メールを送信することができませんでした。 何か他に修正が必要な個所がお分かりになりましたら、ご教授いただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問