GASでメールを送るときには、スプレッドシートを参照したい場合もあるかもしれません。スプレッドシートの内容をメール送信がGASでできると、自動化の幅が拡がって便利ですよね。筆者は業務効率化の一環として、GASでデータ検索しスプレッドシートの内容を送るという依頼を受けたことがあり、一から調べて作成しました。今ではデータ分析に週1時間かかっていたものが全くなくなり、セルの値を変えるだけでメンテナンスができるので便利です。その経験も踏まえて今回は、GASでスプレッドシートにアクセスしそれをつかってメールを送信する方法をご紹介します。
スプレッドシートの内容をメール送信するにはGAS(Google Apps Script)でどのような処理を書けば良いかが気になるかもしれません。GASでスプレッドシートの値を取得して、メールで送信するという流れは、ほとんどの自動メール処理の土台です。まずは、どのようなスクリプトになるかをみてみましょう。
GmailApp.sendEmail()は★前作★と同じで、メールを送信する命令です。ただ、今回は色のついた「ATESAKI」「HONBUN」があり、すぐ上にもあります。これらは「変数」と呼ばれるもので、簡単にいえば名前を付けた記憶場所です。一旦定義することで、参照の役割があり、後から同じ情報を何度も使いやすくなります。同じルールで「SHEET」も定義されていることがわかりますが、=の右にあるコードがそれぞれどのような意味なのか、次の項目で見ていきましょう。
GASでメール自動送信するにはスプレッドシートから必要な情報を正確に取り出すスキルが欠かせません。では、GASでスプレッドシートからデータ取得するには、どのような命令をすれよいのでしょうか。今回のスクリプトで該当するのが、次のコードです。
GASでのgetRangeの使い方として、ここで使われている getRange(“B2”) や getRange(“C2”) は、特定のシート(タブ/ページ、この例では変数「SHEET」で指定)にある特定のセルを参照しています。そして、getValue()でそのセルの値を実際に取得するのです。つまり、変数「HONBUN」は「C2セルに書かれている値」を指します。ただし、1つのセルだけで取得するとは限らないかもしれません。GASでは getValues もあり、配列として複数のセル範囲をまとめて取得したい場合に使います。表形式の情報をまとめて読み込む際に便利です。では、その特定のシート(タブ/ページ)にどうやってアクセスするのか、その方法について次の項目で見ていきましょう。
GASでスプレッドシートを参照する際には、どのスプレッドシートの、どのシート(タブ/ページ)を対象としているかを明確に把握することが重要です。今回のスクリプトでは、次のようなコードがありました。
GASでよくでてくる getActiveSpreadsheet は、現在開いているスプレッドシートまたはこのGASスクリプトに紐づいているスプレッドシートを指します。またその後にある、GASでの getActiveSheet とは、特定のスプレッドシートのうち最後に触れたシート(タブ/ページ)のことです。つまり、今回の変数SHEETは、紐づけされているスプレッドシートの最後に操作したシートを参照しています。しかしながら、最後に触れた部分は人や操作のタイミングによって変わるかもしれません。GASでデータ検索するスプレッドシートが決まっている場合は、getActiveSheetの代わりにgetSheetByName(“シート名”)を使って、明示的にシート名を指定しましょう。
function sendEmail() {
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const ATESAKI = SHEET.getRange("B2").getValue(); // 宛先を取得
const HONBUN = SHEET.getRange("C2").getValue(); // 本文を取得
GmailApp.sendEmail(ATESAKI, "件名", HONBUN)
}
GASでのメール送信においてCCなど宛先を複数 設定したい場合、スプレッドシートで管理する方法が最も効率的です。一元化しておけば、追加や削除が簡単で、GASのコードを毎回修正する必要がありません。たとえば、1行に[To][CC][BCC]の各アドレスを列ごとに分けて入力し、GASでは特定の行を取得して MailApp.sendEmail() のオプションに設定することで、柔軟な送信が実現します。A.B.C.D.Eの列に[To][CC][BCC][件名][本文]が入力されている場合のスクリプト例をみてみましょう。
MailApp.sendEmail({…}) は、オブジェクト形式の引数を使うことで、to, cc, bcc, subject(件名), body(本文)を柔軟に指定できます。また、GASでGmailをつかってCCやBCCを複数にしたい場合は、メールアドレスをカンマ(,)で区切って記載すれば可能です。複数行のデータに対して一括で送信処理をしたい場合は、for文やforEach()と組み合わせることで自動で送信できます。
スプレッドシートからメールを送信するにはトリガーの設定を正しく理解する必要があります。なぜなら、どのタイミングで処理を実行させるかによって、実用性が大きく変わるからです。例として、編集時に送信という設定にすれば、スプレッドシートに新たなアドレスが登録されたときといったセルが変更されたときにメールを自動送信できます。一方で、時間主導型のトリガーを使えば、毎日決まった時刻に処理を行うような定期送信も可能です。スクリプトエディタの時計マークを押して、希望のタイミングを選びましょう。スプレッドシートからメールを送信するときにトリガーを使えると、日報や申請確認などの業務での手間が大幅に減らせます。
今回は、GASでスプレッドシートにアクセスしそれをつかってメールを送信する方法をトリガー設定などとともにご紹介しました。スプレッドシートにある宛先や本文をGASで取得し、自動でメールを送る仕組みを作れば、日々の業務を効率化できます。特に、GASにおけるgetActiveSpreadsheetやgetValuesの配列などを使ったり、宛先を複数設定する方法を組み合わせたりすれば、柔軟で実用的な自動化が可能です。まずは少しずつ試してみて、身近な業務の効率化を進めていきましょう。最後までお読みいただきありがとうございました。