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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

834閲覧

スクリプト 特定行に変更があったら特定の人にメール通知

naoysd___

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/11/27 07:42

JS初心者です。

管理表(スプレッドシート)のS列に変更が加わったら特定の人(R列)にメールを送信したいのですが、
変更をしてもメールが送信されません。
お分かりになる方いらっしゃれば添削お願い致します。

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

該当のソースコード

function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを取得 var Sheet = ss.getSheetByName("管理表");//取得するシートの記入 var Cell = Sheet.getActiveCell().getA1Notation();//セルの範囲を取得 var rowSheet=Sheet.getDataRange().getLastRow();//使用している範囲の最終行を取得 var To={ '送りたい人':'○○○@gmail.com'};//通知対象者と対応するメール通知先を連想配列で格納 var person=Sheet.getRange('R'+ Sheet.getActiveCell().getColumnIndex()).getValue();  /*メールに差し込むログ*/  メール内容本文 if (person in To == true){ MailApp.sendEmail(To[person],Subject, Body); } }; }

試したこと

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

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

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

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

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

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

guest

回答2

0

最終的に下記のようなコードになりました。
kaoru3151様ありがとうございました。

function test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを取得
var sh=ss.getSheetByName("管理表");
var rowSheet=sh.getDataRange().getLastRow();//使用している範囲の最終行を取得
var myCell = sh.getActiveCell(); //アクティブセルを取得

//○○の部分は完了とかのステータスが入る列番号(R列とか) if ( sh.getRange('S' + myCell.getRow()).getValue() !== '完了'){ return; }

var Name=sh.getRange(myCell.getRow(),18).getValue();//名前
var To={'○○':'○○○@gmail.com'
};//アドレス
var Cc1="▲▲▲@gmail.com";//アシスタント

var person = sh.getRange('R' + myCell.getRow()).getValue();

var Subject = '件名'; //
var Body = '本文'; //

if (person in To == true){ MailApp.sendEmail(To[person],Subject, Body,{cc:Cc1});//メールを送信}

}
}

投稿2018/12/06 04:28

naoysd___

総合スコア12

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

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

0

ベストアンサー

function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを取得 var Sheet = ss.getSheetByName("管理表");//取得するシートの記入 var Cell = Sheet.getActiveCell().getA1Notation();//セルの範囲を取得 var rowSheet = Sheet.getDataRange().getLastRow();//使用している範囲の最終行を取得 // var To = {'送りたい人':'○○○@gmail.com'}; //通知対象者と対応するメール通知先を連想配列で格納 var To = {'tanaka': 'ooo@gmail.com'}; // 例えば、送りたい人が'tanaka'さんで // スプレッドシート(管理表)のR列にtanakaを入れて、 var person=Sheet.getRange('R'+ Sheet.getActiveCell().getColumnIndex()).getValue(); Logger.log(person);  /*メールに差し込むログ*/ //  メール内容本文 if (person in To == true){ var Subject = '件名'; // 下のSubjectの定義がなかったため var Body = '本文'; // 下のBodyの定義がなかったため MailApp.sendEmail(To[person],Subject, Body);   // 送り先がooo@gmail.comになるため自分にエラーメールが返ってくる } };

投稿2018/11/27 08:40

編集2018/11/27 08:41
kaoru3151

総合スコア50

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

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

naoysd___

2018/11/27 08:48

ご回答ありがとうございます。 添削していただいた通りに変更してみましたが、メール送れませんでした。。
kaoru3151

2018/11/27 08:54 編集

「Logger.log(person);」をおいているので、logを見てみて、personに値があるか見てみてください。 値がないと、「if (person in To == true)」となっているので、メールのところはスルーすると思います。
kaoru3151

2018/11/27 08:58

「var person=Sheet.getRange('R'+ Sheet.getActiveCell().getColumnIndex()).getValue();」となっているので、変更(S列)した行と同じ行にR列の値がないと「if (person in To == true)」はfalseになるはずです。
kaoru3151

2018/11/27 09:01

ログは、スクリプトエディターでmyFunctionを実行したあとに、上部メニューの表示→ログで確認できます。
naoysd___

2018/11/27 23:32

ログを見たら「[18-11-28 08:31:01:605 JST] 」というのがあったのですが、これが値でしょうか?
kaoru3151

2018/11/28 03:05 編集

↑の時刻はLogger.logを実行した時間でそこに名前が入っていないなら値が取れていないですね。 「var person=Sheet.getRange('R'+ Sheet.getActiveCell().getColumnIndex()).getValue();」は Sheet.getRange('R' + (管理表のアクティブなセルの位置の行)).getValue();となっているので別のセルになっているのではないのでしょうか? そうなるとアクティブなセルの行のR列がブランクになっているとpsersonには値が入らないと思います。
naoysd___

2018/11/28 07:04

アクティブセルの範囲を指定し、getColumnIndex⇒getRowIndexに変更したところメールは送信されました。が、person in Toをスルーしてすべての人にメールが送信されました。。
kaoru3151

2018/11/28 07:42

if (person in To == true){ MailApp.sendEmail(To[person],Subject, Body); } ↑person in To == true をスルーすると、処理がないように見えますが、elseがあるのでしょうか?
naoysd___

2018/11/28 08:10

elseはしていないです!elseだったら処理しないというような構文をいれたらいいでしょうか? 教えていただけたら大変助かります。
kaoru3151

2018/11/28 08:25

elseがなくて、メールが届くということは、(person in To == ture)条件にマッチしたというこで、スルーされずに、 MailApp.sendEmail(To[person],Subject, Body);が実行されているというこですね。 もうすこし、Logger.log()などを入れて一つずつ値を確認しながら、進めてみたはいかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問