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

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

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

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Q&A

2回答

1067閲覧

スプレッドシート内特定のセルに内容が追加された際、Gmailにて通知を行いたい。

Nasu1225

総合スコア3

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

0グッド

0クリップ

投稿2020/11/03 15:14

編集2022/01/12 10:55

前提・実現したいこと

実際の画像
会社の同期の中で「情報共有シート」があり、
それぞれのタブに情報を書き込み、新着情報を「新着」タブに記入を行う。

「新着」が更新されたら、メールリスト上のユーザーにGmailで通知を送りたい。

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

IMPORTRANGEを用いて基シートの「新着」タブを読み込んでいるのだが、 基シートの別のタブ(Ex.)最終更新日等)に編集がされた場合にも、 メールが配信されてしまう。 トリガーは「スプレッドシート」「変更時」で設定。

該当のソースコード

function

1 var ss = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを取得 2 var Sheet = ss.getSheetByName("シート3");//取得するシートの記入 3 var Cell = Sheet.getActiveCell().getA1Notation();//セルの範囲を取得 4 var rowSheet = Sheet.getDataRange().getLastRow();//使用している範囲の最終行を取得 5 6 // Googleドキュメントからメールの件名と本文を取得 7 var doc = DocumentApp.openById('1w0d2NVESpMM5-78vLmrne9wmda0Z1Gpw0eDjwdzXdRQ'); 8 var subject = doc.getName(); 9 var text = doc.getBody().getText(); 10 11 // Googleスプレッドシートからデータ取得 12 var spreadsheet = SpreadsheetApp.getActive(); 13 var sheet1 = spreadsheet.getSheetByName('シート1'); 14 var MailList = sheet1.getDataRange().getValues(); 15 16 17 for(var i = 1; i < MailList.length; i++) { 18 var name = MailList[i][0]; 19 var email = MailList[i][1]; 20 21 var replacedText = text.replace('{氏名}', name); 22 23 MailApp.sendEmail(email, subject, replacedText); 24 } 25}

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

GAS初心者になります。
よろしくお願いいたします。

11/5
具体的な画像を追加いたしました。
よろしくお願いいたします。

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

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

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

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

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

macaron_xxx

2020/11/03 22:58

どういうトリガーがあって、どういうシートにIMPORTRANGEがあって、特定のセルはどのシートなのか、全然情報が足りません。
CHERRY

2020/11/03 22:58

別のシートを読み込んでいる と セルに内容が追加された の関連性がわかりにくいです。 具体的な例を挙げて記載していただけないでしょうか?。
papinianus

2020/11/04 08:31

トリガーは、編集時、だと思いますがその場合あらゆる編集で発動するので、特定のセルであるか、を判別する必要があります。 なので、特定の、みたいな曖昧な書き方はやめていただいて、どういうシートになんのデータがあってどういうときどうなりたいか具体的に書くことをおすすめします。
guest

回答2

0

  • メール配信シートでトリガー設定しているのですよね。これで「基シート」の最終閲覧日シートが更新されたときに発動するというのが解せない。もしかして最終閲覧日シートも importrange しているですかね?

javascript

1const onEdit_302167 = (e) => { 2 const watchSheetName = 'シート3'; 3 if (!e.value) return; 4 if (sheet.getName() !== watchSheetName) return; 5 6 // 以下、質問からコピペ 7 // Googleドキュメントからメールの件名と本文を取得 8 var doc = DocumentApp.openById('1w0d2NVESpMM5-78vLmrne9wmda0Z1Gpw0eDjwdzXdRQ'); 9 var subject = doc.getName(); 10 var text = doc.getBody().getText(); 11 12 // Googleスプレッドシートからデータ取得 13 var spreadsheet = SpreadsheetApp.getActive(); 14 var sheet1 = spreadsheet.getSheetByName('シート1'); 15 var MailList = sheet1.getDataRange().getValues(); 16 17 18 for(var i = 1; i < MailList.length; i++) { 19 var name = MailList[i][0]; 20 var email = MailList[i][1]; 21 22 var replacedText = text.replace('{氏名}', name); 23 24 MailApp.sendEmail(email, subject, replacedText); 25 } 26}

投稿2020/11/20 17:00

papinianus

総合スコア12705

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

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

Nasu1225

2020/11/28 11:15

返事が遅くなってしまってすみません。 importrangeしているのは「新着」のシートのみです! ですが、基シートのどのシートに操作があった場合でも、発動してしまっている状態です。
papinianus

2020/11/30 07:07

トリガーをどちらのスプレッドシート(ブック)で、設定してますか?
guest

0

関数自体を
function onEdit(e){
}
とすることで、編集時にeパラメータで編集情報を受け取って発火します。
あとは、
var activeRange = e.range;
var activeRow = activeRange.getRow();
var activeFCol = activeRange.getColumn();
var activeLRow = activeRange.getLastRow();
var activeLCol = activeRange.getLastColumn();

とでも定義して編集位置を受け取り
if文なりで、発動させたい特定のセル番地(範囲)と比較して一致したときのみ
後続処理を動かせば良いです。

投稿2020/11/04 10:33

hiroshi0240

総合スコア640

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問