メインコンテンツへスキップ
見出し画像

【生成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コードの解説を行っていきたいと思います。

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

    画像
     
     
    オレンジピーチのトシです。 普段は、製造業のDXやモノづくり支援を行っています。 小さな組織でも、たゆまぬ努力と、大きな好奇心があれば、 世界を魅了する新たな価値を生み出せます! アラフィフのおっちゃんですが、少しでも人の役に立つ発信をしていきたいです。

    あなたへのおすすめ