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

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

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

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

Q&A

解決済

1回答

633閲覧

GASでスプレッドシートと連動させてGメールの返信をさせたい

araki11

総合スコア4

Google スプレッドシート

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

0グッド

0クリップ

投稿2021/11/18 02:58

編集2021/11/19 03:24

<実際にやりたいこと>
スプレッドシート(Googleフォームで回答した結果がスプレッドシートに反映)にGASを使って入力された情報の日付が90日前になるとメールでリマインドできるようにしたい

<実際のコード>
function mailSend() {
var mySs = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
var Sheet = mySs.getSheetByName('フォームの回答 1'); // シート名を取得
var today = new Date(); //今日の日付を得得
var strSender = "リマインド通知"; //差出人名
var strFrom = "メアド"; //From

/ 繰り返し計算 /
for (var i = 1; i <= 10000; i++) {
var email = Sheet.getRange(i, 3).getValue(); //C列「送信先メールアドレス」を取得
var name1 = Sheet.getRange(i, 4).getValue(); //D列「〇〇」を取得
var name2 = Sheet.getRange(i, 5).getValue(); //E列「××」を取得
var name3 = Sheet.getRange(i, 6).getValue(); //F列「AA」を取得
var name4 = Sheet.getRange(i, 7).getValue(); //G列「氏名」を取得
var name5 = Sheet.getRange(i, 8).getValue(); //H列「種類」を取得
var limit1 = Sheet.getRange(i, 9).getDisplayValue(); //I列「満期」を取得
var limit2 = Sheet.getRange(i, 9).getValue(); //I列「満期」を取得
var note = Sheet.getRange(i, 10).getValue(); //J列「備考」を取得
var date_limit = new Date(limit2); //I列「満期」のDateを作成
var dt = date_limit.getTime() - today.getTime(); //date_limitから今日の日付を引く
var day = Math.ceil(dt / 1000 / 60 / 60 / 24);  //日付に変換

if (89 < day && day <= 90) { //満期より90日前を指定
/ メール本文を準備 /
var strSubject1 = "リマインド通知"; //メールタイトル
var strBody1 = "\nいつもお世話になっております。\n"//改行

  • "ご登録いただいた情報について満期日が近づきましたのでご連絡いたします。\n" //改行
  • "早めのご対応よろしくお願いいたします。\n\n" //改行
  • "名:" + name1 + "\n\n" //改行
  • "コード:" + name2 + "\n\n" //改行
  • "名:" + name3 + "\n\n" //改行
  • "名:" + name4 + "\n\n" //改行
  • "種類:" + name5 + "\n\n" //改行
  • "満期:" + limit1 + "\n\n" //改行
  • "備考:" + note + "\n\n" //改行
  • "---------------------------------------------------\n" //改行
  • "名前\n" //改行
  • "推進チーム\n" //改行
  • "000-000-0000\n" //改行
  • "---------------------------------------------------\n" //改行;

//メールを送信 /
GmailApp.sendEmail(
email, //送信先(C列「送信先メールアドレス」)
strSubject1, //メールタイトル
strBody1, { //メール本文
from: strFrom, //メール送信元
bcc: 'メアド',
name: strSender //差出人名
}
);
}
}
}

<試してみたこと・気になっていること>
当初はうまくできたのですが、どこかいじってしまったのかリマインド通知ができなくなりました...
自分なりに色々試してみましたが、3点以下に記載致します。1点目:Googleフォームで回答した内容がスプレッドシートのフォームの回答3というシートに情報が反映されています。なので、上記のコード上から3行はフォームの回答1と記載があるためここをフォームの回答3にしてみたのですがやはりだめでした。Googleフォームで回答タブ⇒「回答先を選択」して該当のスプレッドシートの選択もしています。
2点目:うまく反映していないのかもと思ったのでGoogleフォームの方で「回答先を選択」を押して再度該当のスプレッドシートを選択すると、スプレッドシートの方のタブが「フォームの回答2」また試すと「フォームの回答3」...と新しく作られていってしまいます。
ちなみに、トリガーの設定などはサイトをみて設定しています。
もしかしたら、このコードは他の人が作成したものなのでコード記載内容とどこかしらの紐づけみたいなのがうまくいっていないのかと思ってみているのですがわからず質問させていただきました。
33点:トリガーを時間軸に変更してみました。トリガーでは、回答頂いたときに、このGASを発動するとなっています。
トリガーとGASが喧嘩しているのが原因かも?ということでイベントソースは時間主導型で設定してみましたがだめでした。目

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
⇩メールにてエラーの通知が来たのでそのメッセージについて追記いたします。
関数:mailSend エラーメッセージ:Exception:範囲は見つかりませんでした トリガー:formSubmit
また、その他にこんなメッセージも記載がありました。
→そのスクリプトはドキュメント★他社証券管理フォーム(回答)のコピーのコピーで使用されています。

やはりシートの紐付けがうまくいってなさそうな気がします。正直なところ、どこをいじって良いのかわからないという状況です。初心者で申し訳ありませんが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

他のコードでやり直してみたところ無事に解決しました。
最初からGoogleフォームからスプレッドシートを選択してやってみたところうまくいけました。

投稿2021/11/22 14:31

araki11

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問