見出し画像

【生成AI×GAS】複数宛先メール送信GASの解説①

オレンジピーチのトシです。
前回の記事で、GASを用いてスプレッドシートに記載のメールアドレスリストにGmailを作成・送信するスクリプトを作成しました。
今回は、作成したGASのコードを解説していきたいと思います。
(前回の記事はこちらから)


前回のおさらい

前回の記事で作成したGASがこちらです。

function sendEmail() {
  // スプレッドシートを開く
  var sheet = SpreadsheetApp.getActiveSheet();

  // B列2行目から最終行までのメールアドレスを取得
  var lastRow = sheet.getLastRow();
  var emailRange = sheet.getRange("B2:" + "B" + lastRow);
  var emailList = emailRange.getValues();

  // 件名と本文を設定
  var subject = "月次進捗ファイル(7月度)の更新依頼";
  var body = "";
  body += "株式会社オレンジピーチ \n";
  body += "\n";
  body += "営業部 青森 太郎 様\n";
  body += "おつかれさまです。\n";
  body += "企画部の橙桃です。\n";
  body += "7月度の月次進捗ファイルの更新をお願いいたします。\n";
  body += "締切は、7月25日となります。それまでに、リンクの月次進捗表を更新して下さい。\n";
  body += "\n";
  body += "営業部 青森 月次進捗ファイル\nURL: ********\n";
  body += "\n"
  body += "どうぞよろしくお願いします。";

  // 各メールアドレスにメールを送信
  for (var i = 0; i < emailList.length; i++) {
    var recipient = emailList[i][0];
    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body
    });
  }
}

GASの内容解説

順にコードの解説をしていきます。

アクティブなシートを開く

// スプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSheet();

スプレッドシートのシートを取得して変数sheet に格納する内容です。
「コンテナバインドスクリプト」であれば、アクティブなシートを直接取得することが出来ます。今回であれば、「送信先メールアドレス」のシートがアクティブな状態でGASを起動させることから、このメソッドが用いられたと考えられます。
もちろん、getSheetByName(シート名)などのメソッドでも同じ結果が得られます。

コンテナバインドしているスプレッドシート

B列2行目から最終行までの範囲を取得する

// B列2行目から最終行までのメールアドレスを取得
var lastRow = sheet.getLastRow();
var emailRange = sheet.getRange("B2:" + "B" + lastRow);
var emailList = emailRange.getValues();

ここでは、まず、getLastRowメソッドが用いられています。
これにより、変数sheetに格納しているシートの、「データが存在する最終行」を取得することが出来ます。それを変数lastRowに格納しています。
 今回のスプレッドシートのデータでは、データがある最終行は4行目なので、「4」という値が格納されることになります。

次に、getRangeメソッドを用いて、メールアドレスが記載されている範囲を取得します。ここで、一つ、工夫が見て取れます。
今回の実際のデータでは、B2セルからB4セルまでの間が取得したい範囲になります。
これをgetRangeメソッドで表すと、

 sheet.getRange("B2:B4");

となります。
ここで"B2:B4"というスプレッドシートの範囲を示す値を、次のように分解します。

 sheet.getRange("B2:"+"B"+"4");

GASのコードの中では、" "の中は文字列を示し、文字列は + を用いて足し合わせることが出来ます。
つまり、"B2:"+"B"+"4" で、"B2:B4" を表していることになります。
さらに、「"B2:"+"B"+"4"」 の "4" の部分を、変数lastRow に置き換えます。

sheet.getRange("B2:" + "B" + lastRow);

これによって、B2セルからB列最終行までの範囲を取得するコードが出来ました。
この記載方法を行うとこで、今後、スプレッドシートの行数が増減して、メールアドレスの数が変わっても、同じGASのコードで対象範囲を指定することが出来ます。

この書き方は、よく用いられる方法ですので、覚えておくと、コードを指示する際にも便利に使えると思います。

対象範囲の値を取得する

そして最後に、変数emailRangeの範囲による値を、getValuesメソッドで取得して、 変数emailList に格納しています。

var emailList = emailRange.getValues();

ここまでで、スプレッドシートからメールアドレスを取得することが出来ました。

ここまでのまとめ

  • getActiveSheet メソッドで、アクティブなシートを取得。

  • getRange メソッドで、メールアドレスがある範囲を取得。
    (その際に、getLastRow メソッドを用いて、データの最下行を取得)

  • getValues メソッドで、範囲の中にある値を取得。

ここまでで、スプレッドシートの中にあるメールアドレスのデータを取得することが出来ました。

次回は、引き続き、GASコードの解説を行っていきたいと思います。

今回は以上です。最後まで読んで頂き、ありがとうございました。
記事の内容が参考になった方は、「スキ」して頂けると励みになります。

いいなと思ったら応援しよう!

オレンジピーチ★トシ
この記事が少しでもお役に立てたのなら、サポートいただけると嬉しいです。頂いたご支援は、今後の活動費やコンテンツの質向上に使わせていただきます。