🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

3回答

12070閲覧

【GAS】変数に値が正しく入らない

yuyuyu56

総合スコア6

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/01/12 04:12

編集2021/01/12 07:33

前提・実現したいこと

GASを使用して、シート「◇申し込み希望」のHが空欄の際、A-G列のデータとシート「メール文章」の自本文とタイトルを用いて自動メールを送付する

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

ReferenceError: address is not defined autoreply @ コード.gs:53

該当のソースコード

function autoreply() {

//アクティブシートを取得する
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName("◇申し込み希望");
console.log(sht.getName())

//自動返信メールの件名
var title = ss.getSheetByName("メール文章").getRange(2,3);
console.log(title)              ★正しく値が入らない_入っていた値:{}

//自動返信メールの本文 
var body = ss.getSheetByName("メール文章").getRange(2,1);
console.log(body)              ★正しく値が入らない_入っていた値:{}

//①最終列まで繰り返し処理
var lastRow
lastRow = sht.getLastRow()
console.log(lastRow)

for (var i=2; i<=lastRow; i++)
{
console.log(i)

//①-1 空欄の場合は以下の処理を行う
var myRange = sht.getRange(i, 8)
if(myRange.isBlank()){
Logger.log("このセルは空白です");

//後の処理で使うため、変数を設定。(フォームと名称を一致させる必要あり)
var name = sht.getRange(i, 2);
console.log(name)           ★正しく値が入らない_入っていた値:{}
var mail = sht.getRange(i, 3);
console.log(mail)           ★正しく値が入らない_入っていた値:{}
var phone = sht.getRange(i, 4); 
console.log(phone)          ★正しく値が入らない_入っていた値:{}
var address1 = sht.getRange(i, 5);
console.log(address1)        ★正しく値が入らない_入っていた値:{}
var address2 = sht.getRange(i, 6);
console.log(address2)        ★正しく値が入らない_入っていた値:{}

//自動返信メールの本文追記 
var body2 = name + mail + phone + address1 + address2 ;
console.log(body2)   ★正しく値が入らない_入っていた値:RangeRangeRangeRangeRange

var body = body + body2;
console.log(body)    ★正しく値が入らない_入っていた値:RangeRangeRangeRangeRangeRange

//スプレッドシートのステータスに送付済みと記入
sht.getRange(i, 8).setValue("送付済み")

//宛名=address、件名=title、本文=bodyで、メールを送る
GmailApp.sendEmail(address,title,body); ★該当エラーコード箇所

//①-2 空欄ではない場合は行わない
}else{
Logger.log("このセルは空白ではありません");
}

}
}

### 試したこと ★正しく値が入らない の個所がおかしいかと思いデバックで修正を試みているのですが、うまくいきません ■デバック 14:06:08 お知らせ 実行開始 14:06:09 情報 ◇申し込み希望 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 2 14:06:09 情報 2 14:06:09 情報 このセルは空白です 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 RangeRangeRangeRangeRange 14:06:09 情報 RangeRangeRangeRangeRangeRange 14:06:09 エラー ReferenceError: address is not defined autoreply @ コード.gs:53

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

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

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

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

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

y_waiwai

2021/01/12 04:54

どういう値が入ってるんでしょうか。 そのログ出力をそのまま提示しましょう
yuyuyu56

2021/01/12 05:03

追記しました!ありがとうございます!
y_waiwai

2021/01/12 05:04

ログ出力を提示できませんか
yuyuyu56

2021/01/12 05:06

以下の通りです ーーーー 14:06:08 お知らせ 実行開始 14:06:09 情報 ◇申し込み希望 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 2 14:06:09 情報 2 14:06:09 情報 このセルは空白です 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 {} 14:06:09 情報 RangeRangeRangeRangeRange 14:06:09 情報 RangeRangeRangeRangeRangeRange 14:06:09 エラー ReferenceError: address is not defined autoreply @ コード.gs:53
sawa

2021/01/12 07:24

タグが違ってます。java関係ないです。 前回の質問と同じ Google Apps Script のタグに修正を。
yuyuyu56

2021/01/12 07:33

修正しました
guest

回答3

0

正しく値が入らない

いずれも getValue() を追記してセル内の値を取得する必要があるかと思います。

var name = sht.getRange(i, 2).getValue(); console.log(name) //以下同様に       

address is not defined のエラー

//宛名=address、件名=title、本文=bodyで、メールを送る GmailApp.sendEmail(address,title,body);

としているのに、宛名である address がどこにも定義されてないからです。
たぶん、 var mail = sht.getRange(i, 3); が送信先のメールアドレスじゃないでしょうか?

それなら以下のようにするべきです。

//宛名=mail、件名=title、本文=bodyで、メールを送る GmailApp.sendEmail(mail,title,body);

bodyのあたりも怪しい感じですが、とりあえず今回の質問については解決すると思います。
他で躓いたら別質問としてください。
むしろ、papinianusさんのコードをそのまま使った方が早いかもです。

投稿2021/01/12 07:41

編集2021/01/13 02:39
sawa

総合スコア3002

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

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

yuyuyu56

2021/01/12 10:07

後半はご指導いただいた方法で読み取ることができました! 前半 //自動返信メールの件名 var title = ss.getSheetByName("メール文章").getRange(2,3); console.log(title)              ★正しく値が入らない_入っていた値:{} //自動返信メールの本文  var body = ss.getSheetByName("メール文章").getRange(2,1); console.log(body)              ★正しく値が入らない_入っていた値:{} がうまくいきません・・・
sawa

2021/01/12 10:11

一緒です。getValueが足りないです
yuyuyu56

2021/01/12 11:52

ありがとうございます、反映されるようになりました!いずれもgetValueが必要なのですね…わかりました。 データが入ったうえで、エラーコードが表示されます エラー箇所:GmailApp.sendEmail(address,title,body); エラー内容:ReferenceError: address is not defined       autoreply @ コード.gs:53 デバック内容: 20:48:36 お知らせ 実行開始 20:48:37 情報 ◇申し込み希望 20:48:37 情報 【osagari】おさがり提供完了! 20:48:37 情報 おさがり完了! 下記の通り受付しました✿ またのご提供をお待ちしております ※ホームに反映されるまでに時間がかかる場合があります。 ーーーーーーーーーーー 【商品名】 20:48:37 情報 2 20:48:37 情報 2 20:48:37 情報 このセルは空白です 20:48:37 情報 名前 20:48:37 情報 test@gmail.com 20:48:37 情報 00000000000 20:48:37 情報 0000000 20:48:37 情報 test 20:48:45 情報 名前test@gmail.com000000000000000000test 20:49:05 情報 おさがり完了! 下記の通り受付しました✿ またのご提供をお待ちしております ※ホームに反映されるまでに時間がかかる場合があります。 ーーーーーーーーーーー 【商品名】名前test@gmail.com000000000000000000test 20:50:19 エラー ReferenceError: address is not defined autoreply @ コード.gs:53
sawa

2021/01/12 12:38

エラー出たら質問、コメント追加じゃなくて、もうちょっと検索することと、自ら思考しましょう。 その上でわからなければ聞いてください。 エラーメッセージそのままです。defined を日本語にすると、どこがミスがわかると思います。
yuyuyu56

2021/01/13 00:19

使っているメールにしても同様です。英語の意味はわかるのですが・・・
sawa

2021/01/13 02:32

出来れば、質問した件が解決したらクローズいただきたいです。 後から追加、追加で質問となると回答付きづらくなります。 他の部分で行き詰ったら、再度質問を立ち上げる形にした方がよいです。
yuyuyu56

2021/01/13 23:33

なるほど、ご教示頂きありがとうございます。承知しました。
guest

0

javascript

1const q315414 = () => { 2 //アクティブシートを取得する 3 const book = SpreadsheetApp.getActive(); 4 const sheet = book.getSheetByName("◇申し込み希望"); 5 const list = sheet.getDataRange().getValues(); 6 7//自動返信メールの件名 8 const title = book.getSheetByName("メール文章").getRange(2,3).getValue(); 9//自動返信メールの本文  10 const suffix = book.getSheetByName("メール文章").getRange(2,1).getValue(); 11 12//①最終列まで繰り返し処理 13 list.forEach(r=>{ 14 if(r[7] !== "") return; 15 if(r[2] !== "") {console.log("no mail address"); return;} 16 const body = `${r.slice(1,6).join("")}${suffix}`; 17 GmailApp.sendEmail(r[2],title,body); 18 }); 19 const updated = list.map(e=>e.slice(0,7).concat("送付済み").concat(e.slice(8))); // A8 は見出し行ですが、強制的に「送付済み」とします。 20 sheet.getRange(1,1,updated.length,updated[0].length).setValues(updated); 21}

投稿2021/01/12 16:15

papinianus

総合スコア12705

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

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

0

ベストアンサー

google翻訳に、エラーメッセージを翻訳してもらうと、
日本語でエラーメッセージみれますよ。

投稿2021/01/12 14:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuyuyu56

2021/01/13 00:19

test@gmail.comを使用しているメールにしても同様です。英語の意味はわかるのですが・・・
退会済みユーザー

退会済みユーザー

2021/01/13 11:53

address1やaddress2は宣言されていますが、 addressという名前の変数は宣言されていないので、 address ないよ、 と言われているのだと思います。 もし、他のところで、addressを宣言されているのに、 エラーが出ているということであれば、 ここで見えていないコードも見せてほしいと思います。 よろしくお願いいたします。
yuyuyu56

2021/01/14 00:21

addressをメールアドレスと勘違いしていました。 丁寧にご確認頂き、またご教示頂き本当にありがとうございます。 無事に、メールの送信を確認することが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問