まずはじめに
もし気に入っていただけたり、役に立ったらぜひ ”いいね!” お待ちしております!
投稿のモチベーションに繋がります^^¥
この記事の目的
Google Apps Script(GAS)を使って、スプレッドシートの列に記載されているメールアドレスに定型文を自動送信します。
Google Apps Script(GAS)とは
Googleが提供するサーバーレスのプログラミング環境です。略称でGASとよく呼ばれます。ちなみに発音は、ガ(↓)ス(↑)。
Googleが提供する11のサービスをクラウド上でスクリプトを実行することで操作できるサービスで、
スクリプトの言語は、JavaScriptをベースとしています。
「Excelのマクロと同じ」と言われることもありますが、これは正しくありません。
スプレッドシートだけを操作する場合は、Excelのマクロと似ていますが、Google Apps Scriptはより幅広い用途に使用できます。
- カレンダー
- コンタクト
- ドライブ
- ドキュメント
- スプレッドシート
- フォーム
- Gmail
- グループ
- マップ
- サイト
スクリプトを組み合わせることで、
- 毎朝8時にGmail起動し、Googleカレンダーの予定をテキストで特定のアドレスに送信する
- Googleカレンダーに登録されている特定期間のスケジュールを抽出する
- WebAPIを返す
などなど、できちゃいます。(便利そうじゃないですか?)
Google Apps Scriptを使ってみよう
まず、適当なスプレッドシートを作成しましょう。
ツール -> スクリプトエディタ
でエディタが開きます。
初期のエディタ画面はこんな感じ。
よく使うボタンは赤文字で書いています。
一般的には時計アイコン
でトリガーを設定し、
時刻になったらメールを送信する
スプレッドシートに書き込みがあったら送信する
などの使い方をします。
function '関数名'{}
の大カッコのなかにプログラムを書いていきます。
サンプルスクリプト
変数ss
に、シート1
がシート名のアクティブなスプレッドシートを取得させます。
var ss = SpreadsheetApp.getActive().getSheetByName('シート1');
変数today
、送信時間をメールテキストで表現できるよう、フォーマットします。
var today = Utilities.formatDate(new Date(), 'JST', 'yyyy年M月d日 H時m分s秒');
変数MailTitle
に、メール件名を定義します。
var MailTitle = 'hogehoge'
スプレッドシートの最終行まで取得します。
変数lastlow
に定義します。
var lastRow = ss.getLastRow();
for文で処理を繰り返します。i=2
なので、(i, 3)
はスプレッドシートの2行3列目、つまり送信対象
のセル列を参照しています。
それを、i<=lastRow
で最終列まで指定し、i++
で1行ずつ回しています。
for(var i=2; i<=lastRow; i++){
if (ss.getRange(i, 3).getValue() == "送信対象"){
var rangeA = ss.getRange('A' + i).getValue(); //送信対象のA列を最終行まで取得していく。それを ' rangeA ' という変数に格納
var rangeB = ss.getRange('B' + i).getValue(); //送信対象のB列を最終行まで取得していく。それを ' rangeB ' という変数に格納
メール本文を変数MailText
に定義します。
引数として、rangeB(シートだとName部)
とtoday(フォーマットした時間)
をとっています。
var MailText = rangeB+"さん"+"\n\nお疲れ様です。\n本日"+today+"時点でのメールを送ります。\n";
GmailAppを呼び出します。
呼び出しにはGmailApp.sendEmail(宛先, 件名, 本文)
というように記載します。
rangeAにはシート部でいうメールアドレス
を指定し、後にメール件名(MailTitle)
とメール本文(MailText)
を引数で指定しています。
GmailApp.sendEmail(rangeA,
MailTitle,
MailText)
スクリプト全体
function SendMail(){
// 対象のシートを指定
var ss = SpreadsheetApp.getActive().getSheetByName('シート1');
// 送信時間をメールテキストで表現できるよう、フォーマット
var today = Utilities.formatDate(new Date(), 'JST', 'yyyy年M月d日 H時m分s秒');
// メールタイトルを変数で定義
var MailTitle = "hogehoge";
// スプレッドシートの最終行まで取得。よく使う
var lastRow = ss.getLastRow();
// 繰り返し処理を実施
for(var i=2; i<=lastRow; i++){
if (ss.getRange(i, 3).getValue() == "送信対象"){
var rangeA = ss.getRange('A' + i).getValue(); //送信対象のA列を最終行まで取得していく。それを ' rangeA ' という変数に格納
var rangeB = ss.getRange('B' + i).getValue(); //送信対象のB列を最終行まで取得していく。それを ' rangeB ' という変数に格納
// メール本文を変数で定義。rangeBの変数は送信時の宛名を入れておく
// todayは送信時の日付と時間を表現させる
var MailText = rangeB+"さん"+"\n\nお疲れ様です。\n本日"+today+"時点でのメールを送ります。\n";
}
GmailApp.sendEmail(rangeA,
MailTitle,
MailText)
}
}
実行権限の許可
実行ボタンからメールを送信しようとすると、初回操作なので承認を求められます。
許可を確認
を押下し、スクリプトの実行を許可します。
マスクしていますが、スクリプトの実行を許可させるGoogleアカウントを選択します。
詳細を押下し、赤枠のページに遷移します。
Gmail送信(安全ではないページ)
に移動します。
表現がかなり危険そうですが...まあ大丈夫です。
許可
を押下します。
Googleからセキュリティ通知が来ると思いますが、大丈夫です。
スプレッドシートの状態
以下の通り、tnoce
とジョン
を宛名にして、それぞれのメールアドレスに
件名:hogehoge
本文:rangeB+"さん"+"\n\nお疲れ様です。\n本日"+today+"時点でのメールを送ります。\n"
のメールが届けば成功です。
メール送信を実行していく
許可が済んだところで、では実行していきます。
▶
を押下ください。
tnoce側
ジョン側
ちゃんと届いたようです!!
トリガーを作る
気が変わったので、トリガーを作成しましょう。笑
赤枠のアイコンから作成できます。
初期の状態だと当然なにもトリガーがありません。画面右下のトリガー追加から追加しましょう。
今回は時間主導型
で毎週月曜日
のPM1時〜2時
の間にメールが送信されるようにトリガーを作ります。
関数は、先程作成したSendMail
を指定しています。選択が完了したら保存を押します。
無事トリガーが作成されました。
これで、毎週月曜日
のPM1時〜2時
の間にメールが送信されるようになりました。
最後に
今回は、汎用的に使えるGmailの自動送信をご紹介しました。
プログラムに慣れている人からは簡単だったのではないでしょうか。
タイムトリガーやイベントトリガーと組み合わせることによって、もっと便利に使えるので、いろいろ試してみてください。