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

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

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

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

Q&A

解決済

1回答

996閲覧

【GAS】Googleフォームで自動返信メール設定時に予めスプレッドシートに入力したテキストを入れたい。

Yellow

総合スコア1

Google スプレッドシート

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

0グッド

0クリップ

投稿2023/01/25 19:03

編集2023/01/26 17:45

前提

Googleフォーム回答ページより作成したスプレッドシートから自動返信メールを作っています。
そこで、自動返信メールに、スプレッドシートにあらかじめ入力しておいたテキストを合わせて返信したいといます。
※通し番号でも可能

実現したいこと

自動返信メールに、スプレッドシートへあらかじめ入力しておいたテキストを返信したいと思っています。
※テキストは、通し番号でも可能

試したこと

スプレッドシートにあらかじめ入力しておいたテキスト列を指定して、試してみましたが自動返信メールに付与されませんでした。

javascript

1function onFormSubmit(e) { 2 3let Num = e.namedValues["受付番号"]; 4let TimeStamp = e.namedValues["タイムスタンプ"]; 5let Email = e.namedValues["メールアドレス"]; 6let MyEmail = "メールアドレス入力欄"; 7let Subject = "【自動返信】" + "受付番号のお知らせ"; 8let Body = "受付しました。" + "\n" + 9“受付時にこちらの番号を係までお申し付けください。" + "\n" + 10"\n" + "\n" + 11"受付番号" + Num + "\n" + 12"\n" + "https://URL"+ Num + "\n" + "\n" + 13"受付日時" + TimeStamp + "\n"; 14GmailApp.sendEmail(Email, Subject, Body); 15GmailApp.sendEmail(MyEmail, Subject, Body); 16}

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

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

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

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

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

Cocode

2023/01/26 03:22

書かれたコードをご提示ください。
Yellow

2023/01/26 17:06 編集

※上記へコードを記載
Cocode

2023/01/26 16:44

ありがとうございます〜!しかしこのコメント欄ではなく、質問の投稿にコードを書いていただけると嬉しいです。 (ここだと読みにくいので、、、) 質問は後からでも編集できます。 またコードを書く際は下記のように書いてください。 ```javascript (ここにコードを書く) ```
Yellow

2023/01/26 16:50

ありがとうございます。入力しました!
Cocode

2023/01/26 17:34

ありがとうございます!お手数をおかけしました。拝見します!
Cocode

2023/01/26 17:39

▼確認① コードを拝見したところ、スプレッドシートのテキストを取得している部分が全くありませんがどういうことでしょう? ▼確認② let Body = "受付しました。” ←全角になってます。半角に修正してください。
Cocode

2023/01/26 17:44

▼確認③ ここも全角になっています。半角に修正してください。→ “受付時にこちらの番号を係までお申し付けください。" + "\n" +
Yellow

2023/01/26 17:51

確認①について大変失礼しました。 「SpreadsheetApp」の「getActiveRange()」で取得するものをつくらないといけないということでしょうか? 確認②、③について半角・全角は承知しました。 丁寧にありがとうございます。
Cocode

2023/01/26 17:59 編集

getActiveRange()かどうかはわかりませんが、SpreadsheetAppでスプレッドシートを取得し→シートを取得し→セルを指定し→値を取得する必要があります。 どのセルの値を取得したいのかわかりませんし、その値をどこに挿入したいのかもわかりません。 そのあたりの説明もお願いします。
Yellow

2023/01/26 18:05

・回答入力者がGoogleフォームで入力し送信した直後に、自動返信メールとして、番号を付与したいです。 例えば、「◯◯さんは番号:001です。」「△△さんは番号:002です。」としたいです。
Cocode

2023/01/26 18:10

受付番号を連番にして付与したいということですか? でもYellow様のコードを見ると、受付番号はフォームから送信されてきたユーザーの回答なので、また別なのでしょうか?
Yellow

2023/01/26 18:20

受付番号を連番にして付与したい です。 私のコードは関係ありません。(勉強不足でに認識不足です)
Cocode

2023/01/26 18:24

▼確認① 今現在、送信された回答はスプレッドシートには保存されておらず、また、フォームのコンテナバインド型のGASだと思います。 これを、送信された回答を自動でスプレッドシートに転記される設定(フォームの編集画面からできます)にし、そのスプレッドシートへのコンテナバインド型のGASに変更してもいいでしょうか? ▼確認② 「"https://URL"+ Num 」←このURLって何ですか?必要ですか?
Yellow

2023/01/26 18:27

▼確認① コンテナバインド型です。 はい、変更いただいて大丈夫です。 ▼確認② 必要ありません。
Cocode

2023/01/26 18:29

了解いたしました!お返事ありがとうございます。コードと回答を書いてみます。時間がかかりそうです申し訳ございません。
guest

回答1

0

ベストアンサー

実装の手順

1.フォームを作成

フォームを新規作成します。今回は「お名前」と「メールアドレス」を入力させるようにしてみました。

イメージ説明

2.フォームの回答をスプレッドシートに保存するように設定

以下の画像の通り、設定してください。

イメージ説明
イメージ説明

3.スプレッドシートに新規シートを作成

  1. 手順2で自動で作成されたスプレッドシートが自動で開きます(手動で開きたい場合は、Google Driveのフォームと同じフォルダの中に保存されているのでそれを開きます)。
  2. 新規シートを作成します。今回は「受付番号」というシート名にしました。
  3. 受付番号シートの1行目に項目名を書きます。

イメージ説明

4.GASのコードを書く

手順3のスプレッドシートからGASを新規作成してください(スプレッドシートのコンテナバインド型になります)。
そして、以下のコードをコピペしてください。

javascript

1const ss = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシートを取得 2const sheet = ss.getSheetByName('受付番号'); // 「受付番号」シート(回答の転記先のシート)を取得 3 4/** 5 * フォームが送信された時に実行される。送信された値を別シートに転記・受付番号付与・自動メール送信を行う 6 * @param {Object} e - イベントオブジェクト。フォームから送信された情報 7 */ 8function mainProcess(e) { 9 const serialNumber = e.range.rowStart-1; // 受付番号を生成 10 const values = [...e.values]; // フォームから送信された回答から新規配列を生成 11 values.unshift(serialNumber); // ↑の配列の先頭に、受付番号を追加する 12 13 writeRecord_(values); // 別シートに出力 14 sendReplyEmail_(values); // 自動送信メール 15} 16 17/** 18 * フォームから送信された情報および受付番号を別のシートに出力する。その際、A列は3桁にゼロパディングする。 19 * @param {Array} arr - 1次元配列。受付番号+フォームからの送信情報 20 */ 21function writeRecord_(arr) { 22 sheet.appendRow(arr); // 最終行に受付番号+フォームから送信された情報を追加 23 sheet.getRange('A2:A').setNumberFormat('00#'); // A列は3桁にゼロパディングする 24} 25 26/** 27 * 自動送信メールの関数 28 * @param {Array} arr - 1次元配列。受付番号+フォームからの送信情報 29 */ 30function sendReplyEmail_(arr) { 31 const [serialNumber, timeStamp, name, address] = arr; // 受付番号+フォームから送信された情報を、それぞれ定数に定義 32 const myAddress = '自分のメールアドレスをここに書く'; // 自分のメールアドレス 33 const subject = '【自動返信】受付番号のお知らせ'; // メールの件名 34 35 // メールの本文 36 let body = `${name}様\n`; 37 body += `\n`; 38 body += `受け付けました。\n`; 39 body += `受付番号:${serialNumber.toString().padStart(3, '0')}\n`; 40 body += `受付日時:${Utilities.formatDate(new Date(timeStamp), 'JST', 'yyyy年M月d日 HH:mm:ss')}`; 41 42 GmailApp.sendEmail(address, subject, body); // フォームの回答者にメール送信 43 GmailApp.sendEmail(myAddress, subject, body); // 自分にメール送信 44}

5.トリガーを設定する

フォーム送信時にmainProcess(e)関数が実行されるようにトリガーを設定してください。

イメージ説明

6.完成

これで完成です。実際にフォームを送信して確認してみてください。


補足

変数・関数名を大文字から開始しないでください。

GAS(JavaScript)には一般的に普及している命名規則が存在します。
大文字・小文字の使い方には意味があります。
そして先頭が大文字から始まるものはJavaScriptのクラス名というものに使われます。

javascript

1// クラス名の例 2class Sample { 3 // 処理を書く 4} 5 6// 変数名の例 7let sampleVar = 0; 8 9// 定数名の例 10const sampleConst = 0; 11const SAMPLE_CONST = 0;

投稿2023/01/26 20:38

編集2023/01/26 20:48
Cocode

総合スコア2314

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

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

Yellow

2023/01/26 20:51 編集

大変助かりました。 ここまで丁寧に作成・解説いただき、ありがとうございます! すぐ確認し、思い通りの結果でした。 これから、コードを見ながら今後の参考にさせていただきたいと思います。
Cocode

2023/01/26 20:51 編集

おおーおはやい!お役に立ててよかったです!
Yellow

2023/01/26 20:51

手順5もエラーなく、試したらメールが来ました!
Cocode

2023/01/26 20:51

よかったです〜〜!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問