Help us understand the problem. What is going on with this article?

作成したアンケートフォームのURLを、メールで定期配信する by GAS(Google Apps Script)

More than 3 years have passed since last update.

背景

  • 今月から月に1回、自社のメンバーで会議をやるので、出欠アンケートを取りたい
  • 会議の後に懇親会(ごはん食べに行く)をやるので、その出欠も取りたい
  • 出来れば人数まで把握したい

やりたいこと

  • アンケートフォーム(googleフォーム)を1~12月分(1年分)作成する
    • 完了している
  • 毎月1日、5日、10日に、その月の出欠アンケートフォームをメール送信し、記入してもらう
    • GASのトリガー機能(GUI)で、関数をスケジュール実行するように登録する
      • 調べたり、見たらすぐわかるので、ここでは書きません。。
  • 記入してもらったデータをもとに、出席者、欠席者の情報をメールに記載する

この記事で書いていること

  • 今月分(その月分)のアンケートフォーム(Googleフォーム)のURLを、メール本文に記載する方法
  • 記入してもらったデータ(スプレッドシート)をもとに、出席者、欠席者の情報をメール本文に記載する方法

用意するもの

  • 読み込み用googleスプレッドシート
    • A列の1~100行目にアンケートの送信先メールアドレスを記載する
    • C列の1~12行目に1月から12月分のアンケートフォームURLを記載する
    • E列の1~12行目に1月から12月分のアンケート集計結果スプレッドシートURLを記載する

アンケート集計結果スプレッドシートとは

  • アンケート(Googleフォーム)を作ると自動で一つ、集計結果のスプレッドシートが、同じ場所にできます
  • アンケートフォームの質問への回答が、質問1種類につき1カラムで出力されます
  • 今回使いたいのは・・・
    • C列に出力される「氏名」
    • D列に出力される「定例会議への出席/欠席」
    • F列に出力される「懇親会への出席/欠席」
    • 全部で17名なので、それぞれC1~C20,D1~D20,F1~F20まで、取り出すことにする

書いてみた

  • プロフラミング自体、初心者なので、お手柔らかに、お願いします。


frunction syukketsu(){

//読み込み用スプレッドシートを取得します
//スプレッドシートを開いた際のURL(https://docs.google.com/spreadsheets/xxxx)を、ダブルコーテ内に貼り付けます
var SS = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/xxxx/edit#gid=0");


//読み込み用スプレッドシートから、メール配信先を取得します
//A1からA100の範囲に書かれた宛先に配信します
var MAIL_TO = SS.getRange("A1:A100").getValues();


//宛先CCに私を入れます
var MAIL_CC = "t-yamamoto@xxxxx.xxxxx"


//読み込み用スプレッドシートから、今月のアンケートフォームURLを取得します
//C1~C12の範囲に、1~12月のアンケートフォームURLがそれぞれ書かれています
//例:7月のアンケートフォームURLは、C7に書かれています
var OBJDATE =new Date();
var MONTH = OBJDATE.getMonth()+1;
var BASYO1 = "C" + MONTH;
var AF_URL = SS.getRange(BASYO1).getValue();

//アンケートフォームのタイトルを、メール件名用に取得します
var AF = FormApp.openByUrl(AF_URL);
var TITLE = AF.getTitle();


//読み込み用スプレッドシートから、今月のアンケート集計結果スプレッドシートURLを取得します
//E1~E12の範囲に、1~12月のアンケート集計結果スプレッドシートURLがそれぞれ書かれています
//例:7月のアンケート集計結果スプレッドシートURLは、E7に書かれています
var BASYO2 = "E" + MONTH;
var RESULT_URL = SS.getRange(BASYO2).getValue();


//アンケート集計結果スプレッドシートから、集計結果をメール本文用に取得します
var RESULT_SS = SpreadsheetApp.openByUrl(RESULT_URL);


//アンケート集計結果スプレッドシートのC列から、参加者の氏名を取得します
var RESULT_C1 = RESULT_SS.getRange("C1").getValues();
var RESULT_C2 = RESULT_SS.getRange("C2").getValues();
var RESULT_C3 = RESULT_SS.getRange("C3").getValues();
var RESULT_C4 = RESULT_SS.getRange("C4").getValues();
var RESULT_C5 = RESULT_SS.getRange("C5").getValues();
var RESULT_C6 = RESULT_SS.getRange("C6").getValues();
var RESULT_C7 = RESULT_SS.getRange("C7").getValues();
var RESULT_C8 = RESULT_SS.getRange("C8").getValues();
var RESULT_C9 = RESULT_SS.getRange("C9").getValues();
var RESULT_C10 = RESULT_SS.getRange("C10").getValues();
var RESULT_C11 = RESULT_SS.getRange("C11").getValues();
var RESULT_C12 = RESULT_SS.getRange("C12").getValues();
var RESULT_C13 = RESULT_SS.getRange("C13").getValues();
var RESULT_C14 = RESULT_SS.getRange("C14").getValues();
var RESULT_C15 = RESULT_SS.getRange("C15").getValues();
var RESULT_C16 = RESULT_SS.getRange("C16").getValues();
var RESULT_C17 = RESULT_SS.getRange("C17").getValues();
var RESULT_C18 = RESULT_SS.getRange("C18").getValues();
var RESULT_C19 = RESULT_SS.getRange("C19").getValues();
var RESULT_C20 = RESULT_SS.getRange("C20").getValues();


//アンケート集計結果スプレッドシートのD列から、定例会議出欠の回答を取得します
var RESULT_D1 = RESULT_SS.getRange("D1").getValues();
var RESULT_D2 = RESULT_SS.getRange("D2").getValues();
var RESULT_D3 = RESULT_SS.getRange("D3").getValues();
var RESULT_D4 = RESULT_SS.getRange("D4").getValues();
var RESULT_D5 = RESULT_SS.getRange("D5").getValues();
var RESULT_D6 = RESULT_SS.getRange("D6").getValues();
var RESULT_D7 = RESULT_SS.getRange("D7").getValues();
var RESULT_D8 = RESULT_SS.getRange("D8").getValues();
var RESULT_D9 = RESULT_SS.getRange("D9").getValues();
var RESULT_D10 = RESULT_SS.getRange("D10").getValues();
var RESULT_D11 = RESULT_SS.getRange("D11").getValues();
var RESULT_D12 = RESULT_SS.getRange("D12").getValues();
var RESULT_D13 = RESULT_SS.getRange("D13").getValues();
var RESULT_D14 = RESULT_SS.getRange("D14").getValues();
var RESULT_D15 = RESULT_SS.getRange("D15").getValues();
var RESULT_D16 = RESULT_SS.getRange("D16").getValues();
var RESULT_D17 = RESULT_SS.getRange("D17").getValues();
var RESULT_D18 = RESULT_SS.getRange("D18").getValues();
var RESULT_D19 = RESULT_SS.getRange("D19").getValues();
var RESULT_D20 = RESULT_SS.getRange("D20").getValues();


//アンケート集計結果スプレッドシートのF列から、懇親会の出欠可否を取得します
var RESULT_F1 = RESULT_SS.getRange("F1").getValues();
var RESULT_F2 = RESULT_SS.getRange("F2").getValues();
var RESULT_F3 = RESULT_SS.getRange("F3").getValues();
var RESULT_F4 = RESULT_SS.getRange("F4").getValues();
var RESULT_F5 = RESULT_SS.getRange("F5").getValues();
var RESULT_F6 = RESULT_SS.getRange("F6").getValues();
var RESULT_F7 = RESULT_SS.getRange("F7").getValues();
var RESULT_F8 = RESULT_SS.getRange("F8").getValues();
var RESULT_F9 = RESULT_SS.getRange("F9").getValues();
var RESULT_F10 = RESULT_SS.getRange("F10").getValues();
var RESULT_F11 = RESULT_SS.getRange("F11").getValues();
var RESULT_F12 = RESULT_SS.getRange("F12").getValues();
var RESULT_F13 = RESULT_SS.getRange("F13").getValues();
var RESULT_F14 = RESULT_SS.getRange("F14").getValues();
var RESULT_F15 = RESULT_SS.getRange("F15").getValues();
var RESULT_F16 = RESULT_SS.getRange("F16").getValues();
var RESULT_F17 = RESULT_SS.getRange("F17").getValues();
var RESULT_F18 = RESULT_SS.getRange("F18").getValues();
var RESULT_F19 = RESULT_SS.getRange("F19").getValues();
var RESULT_F20 = RESULT_SS.getRange("F20").getValues();


//定例会議の出席・欠席を数えます
var SYUSSEKI = 0;
var KESSEKI = 0;

function count (param1) {
if ("出席" == param1) {
SYUSSEKI++;
} else if ("遅刻" == param1){
SYUSSEKI++;
} else if ("欠席" == param1){
KESSEKI++;
}
};

count(RESULT_D2)
count(RESULT_D3)
count(RESULT_D4)
count(RESULT_D5)
count(RESULT_D6)
count(RESULT_D7)
count(RESULT_D8)
count(RESULT_D9)
count(RESULT_D10)
count(RESULT_D11)
count(RESULT_D12)
count(RESULT_D13)
count(RESULT_D14)
count(RESULT_D15)
count(RESULT_D16)
count(RESULT_D17)
count(RESULT_D18)
count(RESULT_D19)
count(RESULT_D20)


//懇親会の出席・欠席を数えます
var KO_SYUSSEKI = 0;
var KO_KESSEKI = 0;

function count2 (param1) {
if ("出席" == param1) {
KO_SYUSSEKI++;
} else if ("欠席" == param1){
KO_KESSEKI++;
}
};

count2(RESULT_F2)
count2(RESULT_F3)
count2(RESULT_F4)
count2(RESULT_F5)
count2(RESULT_F6)
count2(RESULT_F7)
count2(RESULT_F8)
count2(RESULT_F9)
count2(RESULT_F10)
count2(RESULT_F11)
count2(RESULT_F12)
count2(RESULT_F13)
count2(RESULT_F14)
count2(RESULT_F15)
count2(RESULT_F16)
count2(RESULT_F17)
count2(RESULT_F18)
count2(RESULT_F19)
count2(RESULT_F20)



//メール本文
var BODY = ["# 本メールはGAS(Google Apps Script)で定期的に自動配信しております\n\n",

"各位\n\n",

"おつかれさまです。\n",
"愛されボーイ山本です。\n\n",

"表題日時および場所で、定例会議が開催されます。\n",
"アンケートフォームに出欠をご回答ください。\n",
"フォームのURLは以下となります。\n",
"" + AF_URL + "\n\n\n\n\n\n",

"#### 現在の集計結果 ####\n",
"氏名\b\b\b\b\b\b\b\b\b\b\b\b出欠\b\b\b\b\b\b\b\b懇親会\n",
"====\b\b\b\b\b\b\b\b\b\b\b\b====\b\b\b\b\b\b\b\b======\n",
"" + RESULT_C2 + "\b\b\b\b\b\b" + RESULT_D2 + "\b\b\b\b\b\b\b\b" + RESULT_F2 + "\n",
"" + RESULT_C3 + "\b\b\b\b\b\b" + RESULT_D3 + "\b\b\b\b\b\b\b\b" + RESULT_F3 + "\n",
"" + RESULT_C4 + "\b\b\b\b\b\b" + RESULT_D4 + "\b\b\b\b\b\b\b\b" + RESULT_F4 + "\n",
"" + RESULT_C5 + "\b\b\b\b\b\b" + RESULT_D5 + "\b\b\b\b\b\b\b\b" + RESULT_F5 + "\n",
"" + RESULT_C6 + "\b\b\b\b\b\b" + RESULT_D6 + "\b\b\b\b\b\b\b\b" + RESULT_F6 + "\n",
"" + RESULT_C7 + "\b\b\b\b\b\b" + RESULT_D7 + "\b\b\b\b\b\b\b\b" + RESULT_F7 + "\n",
"" + RESULT_C8 + "\b\b\b\b\b\b" + RESULT_D8 + "\b\b\b\b\b\b\b\b" + RESULT_F8 + "\n",
"" + RESULT_C9 + "\b\b\b\b\b\b" + RESULT_D9 + "\b\b\b\b\b\b\b\b" + RESULT_F9 + "\n",
"" + RESULT_C10 + "\b\b\b\b\b\b" + RESULT_D10 + "\b\b\b\b\b\b\b\b" + RESULT_F10 + "\n",
"" + RESULT_C11 + "\b\b\b\b\b\b" + RESULT_D11 + "\b\b\b\b\b\b\b\b" + RESULT_F11 + "\n",
"" + RESULT_C12 + "\b\b\b\b\b\b" + RESULT_D12 + "\b\b\b\b\b\b\b\b" + RESULT_F12 + "\n",
"" + RESULT_C13 + "\b\b\b\b\b\b" + RESULT_D13 + "\b\b\b\b\b\b\b\b" + RESULT_F13 + "\n",
"" + RESULT_C14 + "\b\b\b\b\b\b" + RESULT_D14 + "\b\b\b\b\b\b\b\b" + RESULT_F14 + "\n",
"" + RESULT_C15 + "\b\b\b\b\b\b" + RESULT_D15 + "\b\b\b\b\b\b\b\b" + RESULT_F15 + "\n",
"" + RESULT_C16 + "\b\b\b\b\b\b" + RESULT_D16 + "\b\b\b\b\b\b\b\b" + RESULT_F16 + "\n",
"" + RESULT_C17 + "\b\b\b\b\b\b" + RESULT_D17 + "\b\b\b\b\b\b\b\b" + RESULT_F17 + "\n",
"" + RESULT_C18 + "\b\b\b\b\b\b" + RESULT_D18 + "\b\b\b\b\b\b\b\b" + RESULT_F18 + "\n",
"" + RESULT_C19 + "\b\b\b\b\b\b" + RESULT_D19 + "\b\b\b\b\b\b\b\b" + RESULT_F19 + "\n",
"" + RESULT_C20 + "\b\b\b\b\b\b" + RESULT_D20 + "\b\b\b\b\b\b\b\b" + RESULT_F20 + "\n\n",


"\n\n定例会議への出席/欠席人数は以下となってます。\n",
"出席者\b\b\b\b\b\b欠席者\n",
"======\b\b\b\b======\n",
""+ SYUSSEKI + "人" + "\b\b\b\b\b\b\b\b\b\b\b\b" + KESSEKI + "人" + "\n\n",


"\n\n懇親会への出席/欠席人数は以下となっています。\n",
"出席者\b\b\b\b\b\b欠席者\n",
"======\b\b\b\b======\n",
""+ KO_SYUSSEKI + "人" + "\b\b\b\b\b\b\b\b\b\b\b\b" + KO_KESSEKI + "人" + "\n\n",


"\n\n集計結果のスプレッドシートURLは以下となります。\n",
"" + RESULT_URL + "\n\n",

"以上です。\n",
"よろしくお願いいたします。\n",

].join("");

// メールを送信します
MailApp.sendEmail(MAIL_TO, TITLE, BODY,{cc:MAIL_CC});
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away