見出し画像

【生成AI×GAS】部署名・氏名の差し込みメール解説①


オレンジピーチのトシです。
生成AIを用いて「GASでメールを書く」スクリプトを作成する方法を紹介しています。
ここでは、一旦出来上がったGASのコードを修正して、より業務の効率化につながる形に改良を進めています。
今回は、前回までに作成した、スプレッドシートのリストに従って、本文中の部署名や宛先氏名を変更してメールを送るGASの解説を行います。
GAS初心者の人、プログラム初心者の人でも、生成AIを活用して、GASのスクリプトを改良していく方法を知って頂ければHappyです。
(GAS作成の記事はこちら)


作成したGASのおさらい

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

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

  // A列2行目から最終行までの氏名を取得
  var nameRange = sheet.getRange("A2:A" + sheet.getLastRow());
  var nameList = nameRange.getValues();

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

  // C列2行目から最終行までの部署名を取得
  var departmentRange = sheet.getRange("C2:C" + sheet.getLastRow());
  var departmentList = departmentRange.getValues();

  // 現在の日付を取得
  var today = new Date();
  var year = today.getFullYear();
  var month = today.getMonth() + 1; // 月は0始まりなので、+1する

  // 件名を設定
  var subject = `月次進捗ファイル(${year}${month}月度)の更新依頼`;

  // 各メールアドレスにメールを送信
  for (var i = 0; i < emailList.length; i++) {
    var recipient = emailList[i][0];
    var name = nameList[i][0];
    var department = departmentList[i][0];

    // 本文を設定
    var body = "";
    body += "株式会社オレンジピーチ \n";
    body += "\n";
    body += `${department}${name} 様\n`;
    body += "おつかれさまです。\n";
    body += "企画部の橙桃です。\n";
    body += `${year}${month}月度の月次進捗ファイルの更新をお願いいたします。\n`;
    body += "締切は、**7月25日**となります。それまでに、リンクの月次進捗表を更新して下さい。\n";
    body += "\n";
    body += `${department}${name} 月次進捗ファイル\nURL: ********\n`;
    body += "\n";
    body += "どうぞよろしくお願いします。";

    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body
    });
  }
}

ここまでのGAS作成・改良の過程が知りたい人、元々、どのようなGASが作りたかったか知りたい方は、こちらの記事をご覧ください。

GASの内容解説

それでは、順にコードの解説を行っていきます。
すでに過去の記事で紹介済みの箇所は省略して、今回の修正点を中心に進めていきます。

アクティブなシートを開く(解説済のため省略)

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

A列2行目から最終行までの氏名を取得(新しいけど類似)

今回、新しく追加された部分です。「氏名」を取得する部分にあたります。
しかし、内容としては、過去に紹介した「スプレッドシートに記載のメールアドレスのリスト」を取得する方法と同じです。

// A列2行目から最終行までの氏名を取得
var nameRange = sheet.getRange("A2:A" + sheet.getLastRow());
var nameList = nameRange.getValues();

B列2行目から最終行までの氏名を取得(解説済のため省略)

「メールアドレス」を取得する部分です。

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

C列2行目から最終行までの氏名を取得(新しいけど類似)

「部署名」を取得する部分のコードですが、方法はA列、B列と同じです。

  // C列2行目から最終行までの部署名を取得
  var departmentRange = sheet.getRange("C2:C" + sheet.getLastRow());
  var departmentList = departmentRange.getValues();

現在の日時を取得、件名を設定(解説済のため省略)

  // 現在の日付を取得
  var today = new Date();
  var year = today.getFullYear();
  var month = today.getMonth() + 1; // 月は0始まりなので、+1する
  // 件名を設定
  var subject = `月次進捗ファイル(${year}年${month}月度)の更新依頼`;

  各メールアドレスにメールを送信

今回、一番の修正が加わった部分です。
GASの内容としての大きな変更は、
 これまで:年月の差し込みはあるが、メール本文自体は固定だった
 今回から:部署名、氏名など、メール本文自体が1通毎に変化する
このように、一連の操作を繰り返し行う場合は、「For文」という構文を用います。

 // 各メールアドレスにメールを送信
  for (var i = 0; i < emailList.length; i++) {
    var recipient = emailList[i][0];
    var name = nameList[i][0];
    var department = departmentList[i][0];
    // 本文を設定
    var body = "";
    body += "株式会社オレンジピーチ \n";
    body += "\n";
    body += `${department}部 ${name} 様\n`;
    body += "おつかれさまです。\n";
    body += "企画部の橙桃です。\n";
    body += `${year}年${month}月度の月次進捗ファイルの更新をお願いいたします。\n`;
    body += "締切は、**7月25日**となります。それまでに、リンクの月次進捗表を更新して下さい。\n";
    body += "\n";
    body += `${department}部 ${name} 月次進捗ファイル\nURL: ********\n`;
    body += "\n";
    body += "どうぞよろしくお願いします。";

    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body
    });
  }

ここまでのまとめ

今回は、スプレッドシートのリストに従って、本文中の部署名や宛先氏名を変更してメールを送るGASの解説を行いました。
主に前半部分の解説を行いましたが、これまで使ってきたメソッドが使われていることが分かったと思います。
ここまでの内容により、スプレッドシートから、「氏名」「メールアドレス」「部署名」を取得し変数に格納しました。

  • 氏名: 変数 nameList

  • メールアドレス: 変数 emailList

  • 部署: 変数 departmentList

次回は、「For文」について詳しい説明を行いたいと思います。

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



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