おはこんばんにちは、nabelogです。
会社で仕事をしていると、
「こんなプログラムがあったらいいな」
「これどうやってつくるんだろう?」
といろいろネットで検索したりしてもでてこなかったりして、結局アナログで生産性の低い作業をしてしまう。
今回は実務に役立つプログラムのお話になります。
GASについて
まず今回使用するものはGASというものになります。
GASはgoogleが無料で提供しているサービスでオンライン(ブラウザ)上でワードやエクセルパワーポイントなどのソフトウェアを無料で使用することができます。
これはgoogleアカウントを所有していたら使用できます。
実際に使ってみましょう。わかる方は以下の箇所を飛ばしてください。
スプレッドシート新規作成

右上のドットが9個ある箇所をクリックするとポップアップ画面が表示されるので、赤丸のスプレッドシートという箇所をクリックしてください。

これがスプレッドシートのホーム画面です。赤丸のボタンを押して新規にスプレッドーシートを作成します。

これでスプレッドシートが使えるようになりました。
用件定義してみる
まずプログラムの要件を言語化してみます。
- 送信先のメールアドレスは?複数?CC?BCC?
- メールの件名
- メールの本文
- 本文に入れる内容
ということにしてきます。
ではこの内容を
送信先のメールはaaa@gmail.com
メールの件名は「この度はお問い合わせありがとうございました。」
メールの本文は
- お世話になっております。
株式会社○○ 採用担当の■■と申します。
この度は弊社求人にご応募いただき、誠にありがとうございます。
ご応募いただきました内容を拝見し、選考を進めさせていただきます。
追って選考のご案内をお送りいたしますので、今しばらくお待ちください。
何卒よろしくお願い申し上げます。
株式会社丸々
採用担当 丸々
以上、よろしくお願いいたします。
こんな感じにしておきます。
フローチャートを作る
大まかにどんな流れでプログラムが進むのかを言語化しておきます。
インプット→処理→アウトプット
こんなところでしょうか
スプレッドシートの作成
まずスプレッドシートに入力をしていきます。

1.スプレッドシートのファイル名を入力してください。(任意でOK)
2.1行目には、氏名 メールアドレス 日付 件名を入力してください。
日付は特に必要なければ入れないでもOKです。
3.シートの名前になります。シートはわかりやすいように2つ作成して、一括送信メール一覧とメールテンプレート本文にしておきます。
入力が完了したら、メールテンプレート本文のシートに移動します。

A1のセルに本文の内容を入力します。
ここの文面がメールの文面になります。
ここで一旦完了です。
アップスクリプトを起動させる
アップスクリプトとは、プログラムを動かすエンジンです。ここにプログラムを書いていきます。

スプレッドシートにあるメニューの拡張機能にあるApps Scriptをクリックします。

このような画面になっていれば大丈夫です。
function sendDailyReports() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName(“一括送信メール一覧”);
const sheet2 = ss.getSheetByName(“メールテンプレート本文”);
// 本文テンプレート(シート2のA1)
const bodyTemplate = sheet2.getRange(“A1”).getValue();
// シート1の最終行を取得
const lastRow = sheet1.getLastRow();
// 2行目から最終行までループ
for (let row = 2; row <= lastRow; row++) {
const name = sheet1.getRange(row, 1).getValue(); // 氏名
const email = sheet1.getRange(row, 2).getValue(); // メールアドレス
const date = sheet1.getRange(row, 3).getValue(); // 日付
const subject = sheet1.getRange(row, 4).getValue();// 件名
if (email) {
// 差し込み用の本文を生成
let body = bodyTemplate;
body = body.replace(“{{氏名}}”, name)
.replace(“{{日付}}”, date)
.replace(“{{件名}}”, subject);
// メール送信
GmailApp.sendEmail(email, subject, body);
}
}
}

コピペができたら、実行ボタンを押します。
実行すると、googleアカウントがこのプログラムを使って処理をして良いかどうかを聞いてくるので許可を出します。

実行完了という表示が出たらメール送信完了です。
コードについて
コードについて解説します。
function sendDailyReports() {
※function sendDailyReports()は関数名になります。functionは必ず入れて、その後に続く単語は任意で設定します。
const ss = SpreadsheetApp.getActiveSpreadsheet();
※const ss =は変数になります。右側に記載あるSpreadsheetApp.getActiveSpreadsheet();の長い文字列をssに省略してしまうということです。
constは定数で変更できない変数ということを伝えています。
const sheet1 = ss.getSheetByName(“一括送信メール一覧”);
※※const sheet1 =は定数になります。右側に記載ある ss.getSheetByName(“一括送信メール一覧”)の長い文字列をsheet1に省略しているということです。
const ss = SpreadsheetApp.getActiveSpreadsheet();
※const ss =は定数になります。右側に記載あるSpreadsheetApp.getActiveSpreadsheet();の長い文字列をssに省略しているということです。
constは定数という変更できない変数ということを伝えています。
const sheet2 = ss.getSheetByName(“メールテンプレート本文”);
※const sheet2 =は定数になります。右側に記載ある ss.getSheetByName(“メールテンプレート本文”)の長い文字列をsheet2に省略しているということです。
get.SheetByName(“”)は動かしたいスプレッドシートにあるどのシートなのかということを指しています。
const bodyTemplate = sheet2.getRange(“A1”).getValue();
※const BodyTemplate =は定数になります。右側に記載あるsheet2.getRange(“A1”).getValue()の長い文字列をBodyTemplateに省略しているということです。
const lastRow = sheet1.getLastRow();
※これは、getLastRowというあらかじめ設定されている関数で、行の最後の文字を取得するという関数です。
for (let row = 2; row <= lastRow; row++) {
const name = sheet1.getRange(row, 1).getValue(); // 氏名
const email = sheet1.getRange(row, 2).getValue(); // メールアドレス
const date = sheet1.getRange(row, 3).getValue(); // 日付
const subject = sheet1.getRange(row, 4).getValue();// 件名
※ここまでが第一段階で、何をしているかというと、2行目にデータがあったら、各変数に格納してくださいっていう変数
if (email) {let body = bodyTemplate;
body = body.replace(“{{氏名}}”, name).replace(“{{日付}}”, date).replace(“{{件名}}”, subject);
※上で作られたデータを、{{氏名}}{{日付}}{{件名}}に入れ直してっていう命令
GmailApp.sendEmail(email, subject, body);
※メール送信してねって命令
}
}
※ループに戻る
}
こんな感じで一括送信ができます。googleアカウントが無料で使用している場合はたしか1日20件くらいしか送信できなかったと思います。
gmailにドメインのメールを紐づけているとそのメールでも一括送信が可能です。
一度試してみてください。

