Googleスプレッドシートで顧客リストを管理している皆さま、個別にメールを送るのは大変ですよね。この記事では、Apps Scriptを使ってスプレッドシートのデータから差し込みメールを一斉送信する方法を解説します。スクリプトをコピー&ペーストするだけで実装できるため、プログラミングが初めての方でも安心です。送信先や件名、本文を自由にカスタマイズするポイントも紹介します。この記事を読み終えると、数百件のメールを数分で準備し送信できるようになります。
【要点】スプレッドシートから差し込みメールを一斉送信する方法
- Apps Scriptでスクリプトを作成: スプレッドシートのデータを読み取り、各列の値をメール本文に埋め込みます。
- テンプレート用シートを用意: 件名と本文のテンプレートを別シートに作成し、{変数名}で差し込み位置を指定します。
- GmailApp.sendEmailで送信: 送信先の重複チェックやエラー処理を組み込み、確実にメールを送信します。
ADVERTISEMENT
目次
メール一斉送信を実現する仕組み
スプレッドシートにはメール送信の標準機能はありません。しかし、Apps Scriptを使うことで、Gmailの送信機能を呼び出し、各セルの値を動的に埋め込んだメールを送信できます。スクリプトはスプレッドシートのデータを読み取り、テンプレート内の{名前}や{金額}といったプレースホルダを実際の値に置き換えます。これにより、コピー&ペーストの手間とミスを削減します。前提として、Googleアカウントとスプレッドシートが必要です。
差し込みメール実装の手順
1. スプレッドシートを準備する
- 送信用データシートを作成: 1行目に見出し行として「メールアドレス」「件名」「名前」「金額」などの列を用意します。2行目以降に各顧客のデータを入力します。たとえばA列にメールアドレス、B列に件名、C列に名前、D列に金額とします。
- テンプレートシートを作成: 別のシート(例:テンプレート)を作成し、セルA1に件名テンプレート、セルA2に本文テンプレートを記述します。件名テンプレート例:「{名前}様、お支払いのお知らせ」、本文テンプレート例:「{名前}様。金額{金額}円の請求書を送付します。」のように{変数名}を使います。変数名はデータシートの見出し行と完全に一致させてください。
2. スクリプトエディタを開く
- メニューから選択: スプレッドシート上部の「拡張機能」メニューをクリックし、「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
- プロジェクト名を設定: 左上の「無題のプロジェクト」をクリックして、わかりやすい名前(例:メール一斉送信)に変更します。
3. コードを記述する
- スクリプトファイルにコードを追加: エディタのコード.gsファイルに以下のコードをコピー&ペーストします。シート名や列番号は自身のデータに合わせて修正してください。
function sendEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('送信用データ'); // データシート名
var templateSheet = ss.getSheetByName('テンプレート'); // テンプレートシート名
// テンプレートを取得
var subjectTemplate = templateSheet.getRange('A1').getValue();
var bodyTemplate = templateSheet.getRange('A2').getValue();
// データレンジを取得(2行目以降)
var lastRow = dataSheet.getLastRow();
var dataRange = dataSheet.getRange(2, 1, lastRow - 1, dataSheet.getLastColumn());
var data = dataRange.getValues();
// 見出し行を取得(変数名のリスト)
var headers = dataSheet.getRange(1, 1, 1, dataSheet.getLastColumn()).getValues()[0];
// 各行をループ
for (var i = 0; i < data.length; i++) {
var row = data[i];
var email = row[0]; // メールアドレス列(0始まり)
if (email === '') continue; // 空行スキップ
var subject = subjectTemplate;
var body = bodyTemplate;
// 各変数を置換
for (var j = 0; j < headers.length; j++) {
var placeholder = '{' + headers[j] + '}';
var value = row[j];
subject = subject.replace(new RegExp(placeholder, 'g'), value);
body = body.replace(new RegExp(placeholder, 'g'), value);
}
// メール送信
GmailApp.sendEmail(email, subject, body);
}
SpreadsheetApp.getUi().alert('メール送信が完了しました。');
}
- シート名と列インデックスを調整: 上記コード内の「送信用データ」「テンプレート」は実際のシート名に変更します。また、メールアドレスがA列の場合は0ですが、もしB列ならrow[1]に変更します。
4. スクリプトを実行する
- 承認作業: 実行ボタン(▶)をクリックすると、初回は権限承認ダイアログが表示されます。内容を確認し「許可」をクリックします。このスクリプトはメール送信とスプレッドシートの読み取り権限が必要です。
- 送信結果の確認: 実行後、送信したメールの件数やエラーはログ(表示>ログ)で確認できます。すべて正常に送信されると、アラートが表示されます。
5. テスト送信と本番実行
- 少量のテスト: 最初はデータシートを2〜3行にしてテストします。スクリプトを実行し、送信されたメールを確認します。テンプレートの置換が正しく行われているか、宛先が間違っていないかをチェックします。
- 本番用に調整: 問題がなければデータを全行に戻して本番実行します。大量送信の前に、後述の制限を確認しておきます。
注意点とよくあるトラブル
Gmailの送信制限に引っかかる
Gmailアカウントには1日あたりの送信上限があります。無料アカウントでは500通、Google Workspaceアカウントでは2,000通(状況により変動)です。大量送信時は、スクリプト内で一定時間待機させるか、複数日に分けて送信します。以下のようにUtilities.sleep(ms)をループ内に挿入して制限を回避できます。
// ループの最後に1秒待機
Utilities.sleep(1000);
エラーが発生して途中で止まる
無効なメールアドレスやテンプレートの記述ミスがあると、スクリプトが中断します。try…catch構文でエラーをスキップし、エラーがあった行をログに記録するように改良します。以下は修正例です。
try {
GmailApp.sendEmail(email, subject, body);
} catch (e) {
Logger.log('エラー: ' + email + ' - ' + e.message);
}
テンプレートの変数が置換されない
{変数名}と見出し行が完全に一致していない(例:半角スペースや大文字小文字の違い)と置換されません。見出し行は全て半角英数字で統一し、テンプレート内でも同じ表記を使用します。また、複数の変数がある場合、正規表現のgフラグで全て置換されることを確認します。
ADVERTISEMENT
通常の送信と差し込み送信の比較
| 項目 | 通常の手動送信 | スクリプトによる差し込み送信 |
|---|---|---|
| 作業時間 | 1件あたり約1分かかる | 数百件でも数秒から数分 |
| ミスのリスク | コピペミスが発生しやすい | データが正しければ完全一致 |
| カスタマイズ性 | 件名・本文を毎回手動編集 | テンプレート変更で一括反映 |
| 送信制限 | 制限は低い(手動なので) | GmailAPIの制限あり |
まとめ
この記事では、GoogleスプレッドシートとApps Scriptを使って差し込みメールを一斉送信する方法を説明しました。用意したテンプレートにデータを流し込むスクリプトを使えば、手作業の手間を大幅に削減できます。実際にコードを試す際は、まず少ない行でテストし、送信制限やエラー処理を確認してください。さらに、条件分岐を加えて特定の顧客だけに送信したり、添付ファイルを追加する拡張も可能です。ぜひ、あなたのデータに合わせてカスタマイズしてみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
