前回は説明会申し込みフォームを例として、申込者への自動返信メールのサンプルを紹介した。トリガーを利用して、フォームで送信が行われたことを"きっかけ"に、メール送信スクリプトが動作するように設定したわけだ。今回は同じようにトリガーを利用するが、日時を指定してスクリプトが動作させてみよう。

前回の説明会申し込みフォームを引き続き例として取り上げる。申込者の情報は、スプレッドシートに保存されているので、これを利用し説明会の当日にリマインダーメールを全員に送信する、というのが今回の内容だ。

説明会の申し込みフォーム

フォームで送信された情報はスプレッドシートに保存されている

スプレッドシートに保存されている情報は、申込者の名前、メールアドレス、申込者が選択した説明会の時間帯となっている。この情報をもとに、説明会の開催日の朝に、申込者に「説明会は本日行います」というリマインダメールを送信する。本文は、ここでは簡単に「◯◯様 申し込み説明会は本日開催です。説明会の時間は下記の通りです。◯◯時~◯◯時」という内容だ。

まずは、スクリプト(関数)の内容を見てみよう。メールの送信方法は、本連載の第3回第4回でも取り上げているので、そちらも参考にしてほしい。

function sendReminder(){

  var kenmei = "リマインド:説明会は本日行います";

  var mySh = SpreadsheetApp.getActiveSheet();
  var myRange  = mySh.getDataRange();
  var myRows   = myRange.getLastRow();
  var myValues = myRange.getValues();

  for(var i = 1; i < myRows; i++){
    var myName = myValues[i][1];
    var mailto = myValues[i][2];
    var myList = myValues[i][3];

    var honbun = myName + "様\n\n";
    var honbun = honbun + "申し込み説明会は本日開催です。\n";
    var honbun = honbun + "説明会の時間は下記の通りです。\n";
    var honbun = honbun + myList;

    MailApp.sendEmail(mailto, kenmei, honbun);
  }
}

スクリプトエディタでスクリプト(関数)を入力

まず、最初はメールの件名を変数に入れている。続いて、アクティブなスプレッドシート(ここでは申込者のリスト)に対して、「getDataRange()」メソッドと「getLastRow()」メソッド、「getValues()」メソッドを使用している。

getDataRange()は、スプレッドシート内のデータ範囲を取得するメソッドだ。データ範囲が予め定まっているような場合にはセル範囲を指定してもよいが、今回のようにデータ範囲が変わる場合には、このgetDataRange()を利用すると便利だ。

getLastRow()は、取得したデータ範囲の最後の行数を取得するものだ。端的に言えば、データの行数を取得しているわけで、ここでは申込者1人に対して1行となっているので、申込者の数と考えてよいだろう(正確には見出し行があるので、申込者数は行数-1となる)。

myRange.getValues()では、取得したデータ範囲のデータを二次元配列として取得している。値の読み出しは、「myValues[行][列]」で行える。たとえば「myValues[2][3]」とすると、データ範囲内の3行目で4列目の値、今回の例ではセルD3の「15時30分~17時00分」となる(配列なので0から始まることに注意)。

ここまでが、申込者リストを元にした下準備となる。スクリプトの後半では、申込者の情報を取り出して1人ずつメールを送信する処理となる。

まず、forループを利用して、申込者人数分の処理を繰り返す。先に、getLastRow()で行数を取得しているので、この値まで繰り返せばよい。forループのスタートは、ここでは0(表では1行目)が見出し行となるので、この行を飛ばして1からスタートさせている。

forループの処理は、申込者1人のデータに対して順に、名前、メールアドレス、説明会時間を取得し、さらに本文を用意。最後に、sendEmailでメールを送信。1人目の送信が完了したら次の申込者の処理に移るという具合だ。

これでスクリプト自体は準備完了。あとは、前回と同じくこのスクリプトを動作させる"きっかけ"となるトリガーを設定しておこう。今回はあらかじめ開催日が決まっている説明会なので、当日の朝の時間を指定する。トリガーの設定は、スクリプトエディタのメニューから「リソース」→「すべてのトリガー」で表示し、「新しいトリガーを追加」から指定日時に実行する今回のスクリプト(関数)名を指定し、日時を設定すればよい。

イベントは「時間主導型」を選択し、「特定の日時」を選ぶ。日時の指定は「YYYY-MM-DD HH:MM」の形式で入力する。ここでは「2013-05-15 08:00」として保存した。

「特定の日時」を選び、実行する日時を入力する。入力形式に注意

トリガには、このほかにも前回設定した、フォームの送信タイミングや、毎日や毎時など繰り返しの設定も可能だ。

上は、1時間ごとなどの例。下は、毎曜日の特定の時間を指定する例

実際に、指定した日時になるとスクリプトが実行され、下記のようなリマインダメールがそれぞれに届くはずだ。

さて、2回にわたってフォームの申し込みへの自動送信と申込者へのリマインダメール送信を取り上げた。フォームでの登録時に確認メールを送り、説明会当日にリマインドを送るといったことはさまざまなシーンで利用できるだろう。

一方で注意すべき点もある。今回はサンプルとしてわかりやすいように、入力データの値チェックやエラー発生時の処理などの多くを割愛している。社外利用(たとえば参加費が必要なセミナーの申し込み)といった場合などには、トラブルを避けるためにこのような部分にも十分に気を配る必要があり、場合によってはGoogle Appsの認定パートナーなどに依頼した方がよいだろう。

とはいえ普段の仕事でも、ちょっとしたことにApps Scriptが役立つ場合は多々ある。自動化したい作業の内容を見つつ、いろいろとチャレンジしてみてほしい。