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

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

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

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

Q&A

2回答

7167閲覧

google apps scriptでスプレッドシートから情報を読み取って、特定の条件の人間に自動でメールを送る方法

takahashi777

総合スコア10

Google Apps Script

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

0グッド

1クリップ

投稿2016/11/05 10:00

編集2022/01/12 10:55

現在google スプレッドシートでセミナー参加者を管理しており、
そのセミナー前日メールの自動化をしようとしています。

私自身は今までプログラム経験はないのですが、
ネットで調べながらなんとか下記のように書いてみましたが、
「代入式の左辺が向こうです」というエラーになって手詰まりになっています。

もしよろしければ解決策などご教示頂けますと幸いです。

function test(){
var sheet = SpreadsheetApp.getActive().getSheetByName('セミナー参加者リスト');

var i=1;

while (i < 10000){
var data = sheet.getRange(i,36).getValue();
var mail = sheet.getRange(i,6).getValue();
var name = sheet.getRange(i,3).getValue();
var date = sheet.getRange(i,8).getValue();
var time = sheet.getRange(i,9).getValue();
var settlement = sheet.getRange(i,13).getValue();

var place1 = sheet.getRange(i,37).getValue();
var place2 = sheet.getRange(i,38).getValue();
var place3 = sheet.getRange(i,39).getValue();

if(date=today() && settlement ='済み'){ Gmailapps.sendEmail(mail,'【重要】明日のセミナーに関しまして', name+'様\



お世話になります。

明日はいよいよ、セミナー開催日です。

明日のセミナーは開始直後から終了時刻まで、
かなり内容の濃いセミナーと成っております。
そのため、10分以上遅刻された場合は、
入場をお断りさせて頂いておりますので、
当日は遅刻のないようにお越しくださいませ。

それでは当日は'+name+'様にお会いできる事を
楽しみにしております。\ '
+place1
+place2
+place3
+date
);}

else if(date=today()){
GmailApp.sendEmail(mail,'【重要】明日のセミナーに関しまして',
name+'様

お世話になります。

明日はいよいよ、
セミナー開催日です。

+name+
'様にはまだ参加費をお支払いいただいておりませんが、
当日会場お支払いでも構いませんので、
是非お越し頂ければと思います。
それでは明日は宜しくお願い致します。
'
+place1
+place2
+place3
+date+

'また10分以上遅刻された場合は、
入場をお断りさせていただく場合がございますので、
ご注意いただきますよう宜しくお願い申し上げます。
);}
else{} ;
i++;}
}

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

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

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

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

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

kei344

2016/11/05 10:41

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、エラーは起こった場所の行数(提示したコードのどこか)も質問文に追記してください。
guest

回答2

0

「代入式の左辺が向こう(無効)です」はおそらく

if(date=today() && settlement ='済み'){

=ではなく、==か===です。で、

if ((date == today()) && (settlement =='済み')){

また、else if(date=today()){
としていますが、これだと settlement ='済み' となっている人まで含まれてしまうので、
else if ((date == today()) && (settlement !='済み')){

といった感じになるでしょうか。ただ、まだまだ直さないと動かないところはあると思います。

あと1万回セルから情報を順々に拾うのはGASではパフォーマンスが悪くなると思うのであらかじめシートの中で絞り込むような形が理想的かなとも思います。

参考サイトが分かればもう少しアドバイスできるかもしれません。

投稿2016/11/06 02:25

true

総合スコア440

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

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

0

コードの問題点は、前述の回答者様の通りかな、と思います。
1万行全てにおいてそれぞれデータを取得するために落ちるパフォーマンス改善のために、多次元配列でデータを一回で取得する方法で書き換えてみました。
なお、SpreadSheetAppなどのAPIを呼び出す回数も極力減らすと速くなるかと思います。

*実際のシートなどは見ていないので、ご使用の際は、ご自分のシートなどにあわせて改良して下さい。

Javascript

1function test(){ 2 var sheet 3 = SpreadsheetApp 4 .getActive() 5 .getSheetByName('セミナー参加者リスト'); 6 7 //シート内の全ての値を二次元配列で取得 8 var values 9 = sheet 10 .getDataRange() 11 .getValues(); 12 //シートの最終列を取得 13 var lastRow 14 = sheet 15 .getLastRow() 16 //今の日時をtodayに代入 17 var today = new Date(); 18 //メールの題名 19 var subject = "【重要】明日のセミナーに関しまして"; 20 21 for(var i = 0; i < lastRow; ++i){ 22 var data = values[i][35]; 23 24 var name = values[i][2]; 25 var date = values[i][7]; 26 var time = values[i][8]; 27 28 var addBody 29 = values[i][36] 30 + values[i][37] 31 + values[i][38] 32 + date ; 33 34 if( date == today 35 && 36 values[i][12]=='済み' 37 ){ 38 Gmailapps 39 .sendEmail( 40 values[i][5], 41 subject, 42 name+'様\ 43 \ 44 \ 45 お世話になります。\ 46 \ 47 明日はいよいよ、セミナー開催日です。\ 48 \ 49 明日のセミナーは開始直後から終了時刻まで、\ 50 かなり内容の濃いセミナーと成っております。\ 51 そのため、10分以上遅刻された場合は、\ 52 入場をお断りさせて頂いておりますので、\ 53 当日は遅刻のないようにお越しくださいませ。\ 54 \ 55 それでは当日は'+name+'様にお会いできる事を\ 56 楽しみにしております。\ ' 57 +addBody 58 ); 59 }else if( date == today ){ 60 GmailApp 61 .sendEmail( 62 values[i][5], 63 subject, 64 name+'様\ 65 \ 66 お世話になります。\ 67 \ 68 明日はいよいよ、\ 69 セミナー開催日です。\ ' 70 +name+ 71 '様にはまだ参加費をお支払いいただいておりませんが、\ 72 当日会場お支払いでも構いませんので、\ 73 是非お越し頂ければと思います。\ 74 それでは明日は宜しくお願い致します。\ ' 75 +addBody+ 76 'また10分以上遅刻された場合は、\ 77 入場をお断りさせていただく場合がございますので、\ 78 ご注意いただきますよう宜しくお願い申し上げます。\ 79 \ ' 80 ); 81 }//if 82 }//for_i 83}

投稿2016/11/07 09:04

s.maeda

総合スコア147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問