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

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

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

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

Q&A

解決済

1回答

852閲覧

スプレッドシートの特定列が編集されると自動でメールが送信される

Yuto2022

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2022/11/12 03:34

編集2022/11/12 05:28

現在、スプレッドシートの特定の列が編集されると自動でメールが送信される仕組みを作りたいと考えています。送信先のメールアドレスは編集されたセルの同行に記載されているものに送信したいです。
例:
特定列→C、メールアドレスが記載されている列→D
C2が編集された際に同行(2行目)のD列に記載されているメールアドレス宛にメールを送信する。

様々なコードを調べて試したみたのですが、「特定のセルが編集されれば実行」、「特定のメールアドレスに送信する」ことしかできず、実現したい一部のことのみでした。そのため、ご教示いただきたいと考えています。

参考)試したコード

function onEdit(e) {

//指定したいセル(A1など)を入力
var range = 'ここに指定したいセルを入力';

//編集されたセルの行数を取得
var row = e.range.getRow();
//編集されたセルの列数を取得
var col = e.range.getColumn();

//指定セル範囲の行列数取得
var rowlength = sheet.getRange(range).getValues().length;
var collength = sheet.getRange(range)
.getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn();

//編集されたセルが指定セルだったら実行
if(row === rowlength && col === collength){
//ここに行いたい処理を記入

//行いたい処理ここまで

}
}

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

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

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

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

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

Cocode

2022/11/12 06:58

確認失礼します。 過去にも同じような質問が何件かありまして、よくよく確認してみると質問者様のご希望の仕様より、いい方法があるということもありました。 確認① 他の列をまだ編集してないのに、誤って先にC列を編集してしまうというような誤操作については考慮されていますか? 確認② もしかして、Googleフォームから送信があり(C列に回答があれば)、メールを自動送信するということを実現したいのでしょうか? 確認③ C列が編集されたら、というのは「値が削除されたら」も含まれますが大丈夫でしょうか? 何か特定の値が入力されたらといことでしょうか? ご確認のほどよろしくお願いいたします。
Yuto2022

2022/11/12 11:59

コメント、ありがとうございます。確認事項について回答いたします。 確認① 考慮していません。実現したいこととして、C列以外のセルにはGoogle formの回答内容が転記される仕組みにする予定です。転記後、こちら側でC列を編集してメールを送信したいと考えています。そのため、C列がその他のセルよりも先に編集されることはないため考慮しておりません。 確認② C列には手動で管理者が編集します。 確認③ 削除は含みません。可能であるならば、2つのワードを指定して、それらが入力されればメールが送信されるものであれば幸いです。 よろしくお願いいたします。
Cocode

2022/11/12 12:17

ご返答ありがとうございます! > 可能であるならば、2つのワードを指定して、それらが入力されればメールが送信されるものであれば幸いです。 2つのワードは具体的に何がご希望ですか? また手入力でそのワードを入力するのではなく、セレクトボックスで選択する方がいいでしょうか?(どちらでもかまいません)
Yuto2022

2022/11/12 12:26

早速のご返信ありがとうございます。 2つのワードは「陰性」、「陽性」です。 セレクトボックスでお願いいたします。
Cocode

2022/11/12 12:30

ありがとうございます!もしかして、陰性と陽性でメール本文の内容が変わってくるのでしょうか? 要件理解できましたのでコードに落とし込んでみます! たくさん質問失礼しました。
Yuto2022

2022/11/12 12:39

結果を通知するのみですので、内容は陽性、陰性の文言以外変わりません。 ありがとうございます。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

onEdit(e)関数は権限に限りがあるので、トリガー設定でonEditにした方がいいですー!
イメージ説明
イメージ説明

javascript

1function sendEmail(e) { 2 // 編集されたセルの列番号を取得 3 const editedCol = e.range.getColumn(); 4 5 // 編集されたのがC列以外なら、ここで処理を終了(以降は実行されない) 6 if (editedCol !== 3) return; 7 8 // ここからはC列が編集された場合のみ実行される 9 10 // メール送信確認ポップアップ 11 const ui = SpreadsheetApp.getUi(); 12 const response = ui.alert('Confirm', 'メールを送信しますか?', ui.ButtonSet.YES_NO); 13 14 // 「YES」が選択された場合 15 if (response == ui.Button.YES) { 16 // 編集されたシートを取得 17 const sheet = e.source.getActiveSheet(); 18 // 編集されたセルの行番号を取得 19 const editedRow = e.range.getRow(); 20 21 // 編集された行、1行分の値を取得 22 // 例 ['寺テイル', 'B2', '陽性', 'dummy@gmail.com'] 23 const [record] = sheet.getRange(editedRow, 1, 1, sheet.getLastColumn()).getValues(); 24 25 // 取得してきた値を変数に代入 26 // name='寺テイル' result='陽性' recipient='dummy@gmail.com' 27 const [name, _, result, recipient] = record; 28 29 // メールタイトル 30 const subject = `先日の結果`; 31 32 // メール本文 33 let body = `${name}様\n`; 34 body += `あなたの結果は【${result}】です。`; 35 36 // メールを送信する 37 GmailApp.sendEmail(recipient, subject, body); 38 Logger.log('メールを送信しました。'); 39 } else { // 「NO」が選択された場合 40 Logger.log('メール送信をキャンセルしました。'); 41 } 42}

投稿2022/11/12 13:35

編集2022/11/12 13:36
Cocode

総合スコア2316

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

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

Yuto2022

2022/11/12 14:01

お忙しいところ、誠にありがとうございます!! 実際に、スクリプトに書き込んでみます。
Cocode

2022/11/12 17:35

はい〜!ご不明の点などあれば、ご連絡ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問