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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

1回答

4103閲覧

スプレッドシート変更時にメールで通知する

Jin811

総合スコア6

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

1クリップ

投稿2019/08/02 07:06

前提・実現したいこと

GASでスプレッドシートのE列変更時にA列の名前をメールで通知するコードを書きたいです。
データ領域はA4:E26で、下記の配列になっています。
Scriptを走らせたいスプレッドシートはIMPORTRANGE関数で他のシートからのコピーです。

=IMPORTRANGE("1srUnLxxxx","xxxx!A1:E26")
.....A...B...C...D...E
....名前...............数値
4 あ.................0
5 い.................0
6 う.................0
7 え.................1

E7変更(0→1)時にA7の文字列(え)とE7の数値(1)をメールで指定アドレスへ通知する。

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

シート全体がIMPORTRANGE関数の範囲になっているため、シート全てが変更対象になっているようで、A4セル情報しか抽出できません。

該当のソースコード / Google app script

function sendNotification() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getActiveSheet(); var range = sheet.getRange("D4:D26"); var value = range.getValue(); var person = spreadsheet.getRange("A4:A26"+ sheet.getActiveCell().getRowIndex()).getValue(); var recipients = "aaaa@aaa.com"; var subject = 'Update to '+sheet.getName(); var body = ' to view the changes on : «' + person + '»' + ' New value : «' + value + '»'; MailApp.sendEmail(recipients, subject, body); };

試したこと

範囲指定→ 以前はA1セルが返っていたが、A4セルで返せるようになった
IF→ うまく設定できず

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

IMPORTRANGEが使われているのが原因だと思うのですが、この状態で変更情報を抽出したいです。

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

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

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

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

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

guest

回答1

0

質問を編集時の検知はできているがE列以外でも反応する、と理解してます

編集時のトリガーがかかってるのだと思いますが、もともとE列だけを検知する機能はなかったはずです。

onEditのイベントオブジェクトからrangeをとって列数を見て振り分けるしかないかと。

javascript

1function sendNotification(e) { 2 const sheet = e.range.getSheet(); 3 const sheetName = sheet.getName(); 4 if(sheetName !== "つうちたいしょうしーと" ) { return; } 5 const c = e.range.getColumn(); 6 if(c !== 5 ) { return; } 7 const r = e.range.getRow(); 8 const person = sheet.getRange(r, 1).getValue(); 9 const recipients = "aaaa@aaa.com"; 10 const subject = 'Update to '+ sheetName; 11 const body = ' to view the changes on : «' + person + '»' + ' New value : «' + e.value + '»'; 12 MailApp.sendEmail(recipients, subject, body); 13}

投稿2019/08/04 22:16

編集2019/08/06 08:23
papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問