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

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

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

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

Q&A

0回答

827閲覧

スプレッドシートのC列のチェックボックスにチェックしたら、条件に該当するメアドにメールを送りたい

SuzuSa

総合スコア0

Google スプレッドシート

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

0グッド

0クリップ

投稿2021/12/03 14:07

前提・実現したいこと

プログラミング習ったことのない初心者です。
拙文で申し訳ございませんが、よろしくお願い致します。

Googleスプレッドシート
C列のチェックボックスにチェックしたら、D列に入力された承認者にメールを送信したいです。
※D列はVLOOKUPで、V列に入力された値によって変わるようになっています。
また、チェックボックスにチェックをしたときに、ポップアッポが表示されて「OK」ならメール送信
「キャンセル」ならメールを送信しないようにしたいです。

【シート1】シート名:4月
A   B   C   D
1       □  承認者1
2       □  承認者1と承認者2
3       □  承認者1と承認者2と承認者3

【シート2】シート名:メーリングリスト
A    B    C
1   承認者1 メアド1
2   承認者2 メアド2
3   承認者3 メアド3
※A列は1〜番号振りしてます

行いたいことは上記に記載している内容ですが、ググってもやりたいことが見つからず
該当ソースコードに記載の内容でどうにかしようとしましたが、できませんでした。。。。。

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

ネットで拾ったコードをコピペしています。 ポップアップまでは進めるが、メール送信が実行できない(実行の際は、openByIdに、d/以降のURL入れてます) 該当シートにチェックボックスがあると、列、関係なくメール送信の可否のポップアップが起動し「OK」するとメールが飛ぶようになっているため、複数の列にチェックボックスの項目があると、起動してしまう。

該当のソースコード

GoogleAppsScript

1 2function showCheckboxInfo() { 3 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 4 var myCell = mySheet.getActiveCell(); 5 var rule = myCell.getDataValidation(); 6 if (rule != null) { 7 var criteria = rule.getCriteriaType(); 8 var status = myCell.getValue() 9 if ( criteria == 'CHECKBOX' && status == true) { 10 var row = myCell.getRow(); 11 var result = Browser.msgBox('チェックボックスが押されました。メールを送信しますか?', Browser.Buttons.OK_CANCEL); 12 if(result == 'ok'){ 13 sendMail(row); 14 } else if (result == 'cancel'){ 15 mySheet.getRange(row,11).uncheck(); // チェックを外す 16 } 17 } 18 } 19} 20 21function sendMail(row) { 22 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXXXX"); 23 var datasheet = spreadsheet.getSheetByName('4月'); 24 25 var name = datasheet.getRange(row, 4).getValue(); 26 var email = datasheet.getRange(row, 5).getValue(); 27 28 var subject = '件名'; 29 var body = name + '様\n \nお疲れ様です。\n下記URLのF列の承認チェックをお願い致します。\n \n自動配信メールのため、返信不可となります。\n \nhttps://docs.google.com/spreadsheets/d/1KoQiNNoaRnFU8Tca3MUCg_sa4HfqFLP1EFEGheqpM2Y/edit#gid=321698442'; 30 31 MailApp.sendEmail(email, subject, body); 32}

試したこと

わからないなりに
マクロの記録で、C列を選択したときのコード(ver myRange = myCell.getRange('B:B').active();)をvar myCellの後ろにつけてみたりしましたが、だめでした。。。。。。

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

Hpのクロームブック使用しています
GoogleChromeOS バージョン: 94.0.4606.114(Official Build) (64 ビット)

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

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

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

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

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

T_mari

2021/12/10 15:21

こんばんは。 該当のソースコードにスプレッドシートのURLが入っているのは早急に削除した方がよろしいかと…。 本題のご質問へ部分的なアドバイスしかできないのですが、 シート1のD列で複数アドレスにメールを送信するのであれば、 メーリングリストのシート側で "aaa@sample.com,bbb@sample.com" のようにしたほうがsendEmailを実行するときに処理が楽になるかと思われます。 つまりシート2(メーリングリスト)側は [A,B,C] [1,"承認パターン1","aaa@sample.com"] [2,"承認パターン2","aaa@sample.com,bbb@sample.com"] [3,"承認パターン3","aaa@sample.com,ccc@sample.com"] のようなデータ型にできるならしてしまった方が良いかと思います。 その上でシート1のV列?の値によってシート2のメールアドレスをVLOOKなりINDEX MATCHで参照させた方が良いかと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問