「〇〇様、いつもお世話になっております。」

この一文、一日に何回入力していますか?顧客リストや会員名簿への一斉メール送信、名前や会社名を一件ずつ手で修正するのは、時間がかかるだけでなく、ミスも起こりがちです。

もし、スプレッドシートのボタンを1回クリックするだけで、リスト全員に個別メールを自動で送信できるとしたら、あなたの業務はどれだけ楽になるでしょうか?

この記事では、プログラミング知識がなくても大丈夫なように、生成AI(ChatGPTなど) を使って、その夢のような仕組みをコピペOKで実現する方法を、どこよりも分かりやすく解説します。

※私はGemini PROを利用して作成しております。

この記事を読めば、こんな未来が手に入ります
  • メリット1:作業時間の大幅な短縮、数時間かかっていた作業が、わずか数分で完了!
  • メリット2:送信ミスの撲滅、手作業による宛名間違いや内容のズレがなくなります。
  • メリット3:サンプルコードが手に入ります。

一括・個別差し込みメール送信シートの配布

一括・個別差し込みメール送信シートの配布

シートを丸ごと配布

シートをコピーすれば、面倒なスプレットシートとGoogle Apps Script(GAS)の連携は不要で利用することができます。

▼ 初回利用時のスクリプト承認手続きについてはこちら

GASコードのみ利用する

// =========================================================
//  一括・個別差し込みメール送信スクリプト (セル内改行対応版)
// =========================================================

// シート名とヘッダー行の定義
const SHEET_NAME = '一括・個別差し込みメール送信'; // データが入力されているシート名
const HEADER_ROW = 1;         // ヘッダー(項目名)が記載されている行番号

/**
 * スプレッドシートを開いたときにカスタムメニューを追加する関数
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('💌 メール送信')
    .addItem('一括送信を実行', 'sendEmails')
    .addToUi();
}

/**
 * メインのメール送信関数
 */
function sendEmails() {
  // アクティブなスプレッドシートと対象シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  if (!sheet) {
    Browser.msgBox(`シート「${SHEET_NAME}」が見つかりません。`);
    return;
  }

  // データの範囲を取得(ヘッダー行から最終行まで)
  const dataRange = sheet.getRange(HEADER_ROW, 1, sheet.getLastRow() - HEADER_ROW + 1, sheet.getLastColumn());
  const values = dataRange.getValues();

  // ヘッダー行とデータ行を分離
  const headers = values[0];
  const rows = values.slice(1);

  // 各列のインデックスを取得
  const statusColIdx = headers.indexOf('送信ステータス');
  const emailColIdx = headers.indexOf('メールアドレス');
  const subjectColIdx = headers.indexOf('件名');
  const bodyColIdx = headers.indexOf('本文');

  // 必須の列が存在するかチェック
  if (emailColIdx === -1 || subjectColIdx === -1 || bodyColIdx === -1 || statusColIdx === -1) {
    Browser.msgBox('「送信ステータス」「メールアドレス」「件名」「本文」のいずれかの列が見つかりません。');
    return;
  }

  let sentCount = 0;
  let skippedCount = 0;

  // データ行をループしてメールを送信
  rows.forEach((row, index) => {
    const status = row[statusColIdx];
    const recipient = row[emailColIdx];

    // 送信ステータスが「送信済み」またはメールアドレスが空の場合はスキップ
    if (status === '送信済み' || !recipient) {
      skippedCount++;
      return;
    }

    // 差し込み処理
    let subject = row[subjectColIdx];
    let body = row[bodyColIdx];

    headers.forEach((header, i) => {
      const placeholder = `{{${header}}}`;
      const value = row[i] || ''; // 空セルの場合にエラーが出ないようにする
      // 正規表現を使って、件名と本文内のすべてのプレースホルダーを置換
      subject = subject.replace(new RegExp(placeholder, 'g'), value);
      body = body.replace(new RegExp(placeholder, 'g'), value);
    });

    // 本文の改行コード(\n)をHTMLの改行タグ(<br>)に変換する
    const htmlBody = body.replace(/\n/g, '<br>');

    try {
      // メールをHTML形式で送信
      GmailApp.sendEmail(recipient, subject, '', {
        htmlBody: htmlBody
      });
      
      // 送信ステータスを更新
      sheet.getRange(HEADER_ROW + 1 + index, statusColIdx + 1).setValue('送信済み');
      sentCount++;
    } catch (e) {
      // エラーが発生した場合
      sheet.getRange(HEADER_ROW + 1 + index, statusColIdx + 1).setValue(`エラー: ${e.message}`);
    }
    // スプレッドシートに即時反映
    SpreadsheetApp.flush();
  });

  // 完了メッセージを表示
  Browser.msgBox(`処理が完了しました。\n\n送信済み: ${sentCount}件\nスキップ: ${skippedCount}件`);
}

そもそもGAS(Google Apps Script)って何?

GASは、Googleが開発したプログラミング言語です。「Googleの様々なサービス(Gmail、スプレッドシート、ドキュメントなど)を自動化・連携が得意なプログラムのことです。GASを生成AIに書いてもらうことができる現在は、アイディアさへあればプログラミングに詳しくなくても、様々な自動化を自分で作ることができます!

もちろんプログラミング知識があればもっと複雑なこともデバックする作業も大幅に削減できるので、これを気にプログラミングの基礎も学ぶこともおすすめします。

GASのベースとなっているJavaScriptは情報も多く、プログラミング初心者でも学びやすい言語です。

関連記事
Google Workspace自動化入門!GAS(JavaScript)プログラミング初心者のための4ステップ学習法

「AIがコードを書く時代、プログラミングは不要?」そう考えていませんか?実は、AIを真に使いこなすにはプログラミングの基礎知識が不可欠です。この記事では、プログラミングに何度も挫折した筆者が、JavaScriptの基礎を固め、GASで自在に業務を自動化できるようになった具体的な4ステップの学習法を全公開します。

具体的にGASで具体的に何ができるかピンとこない人は生成AIに聞いてみよう

Gmail関連の業務効率化できそうなGASをリスト化して

生成AIとのチャットスペースから、スプレットシートとの連携がボタン一つでできるのがGeminiの魅力ですね。

ポイント
「あれ?これってGASでやらなくても標準機能でできるのでは?」っと思ったそこのあなた!かなりリテラシーが高いです。たとえば、メールタイトルをTODOリストにドラッグするだけで登録することができたり、GoogleもどんどんGASを使わずツール同士の連携を画面操作だけでできるように進化させています。逆に標準機能にないことをしたいときにこのGASが大活躍するってわけです。

【一括・個別差し込みメール送信シート】作成方法

プログラミング知識に自信がない人は、テンプレートとGASをセットで作ってもらうことをおすすめします。現時点で記載があるシートのメーリングリストを利用することもできますが、セルにキレイに1名ずつメールアドレスが記載されているとは限らないし、AIに上手くセルの状況を伝えることができないと失敗する可能性が高くなるためです。

GASとスプレットシートのテンプレート作ってほしい

一括メール・個別差し込みメールの送信

スプレッドシートに用意した顧客リスト(氏名、会社名、メールアドレスなど)を元に、一人ひとりに合わせた内容(例:「〇〇様」)を差し込んだメールを一斉に送信できます。メルマガ配信やイベントの案内などに活用できます。

生成AI(Gemini)がスプレットシートのテンプレートまで作成してくれてるので、【Googleスプレットシートにエクスポート】ボタンを押します。

A列、B列~はいらないので消去して、各タイトルを上に移動します。

変数とは?

プログラム内で使う数値や文字列などのデータを一時的に入れておくことができる「入れ物(箱)」のことです。

C 列(会社名)D列(氏名)が、件名と本文の{{会社名}} {{氏名}}に自動で入力されます。

次にGoogle Apps Script (GAS) の設定をするのですが、その前にメールでの改行をいちいち\nを入力するのは面倒で使いにくいので、生成AIにセル内の改行は自動で\nを使わず改行してほしいと修正してもらいます。

改行は\nだと分かりにくいのでセルの改行を反映してほしい

\nを使わずに改行になるGASに修正してもらいました。最初に指示するプロンプトに「\nを使わずに改行になるように作成して」と指示しておけば最初から対応した改行になるコードを作成してもらうことも可能です。

下記のコードをコピーして【Apps Script】に記載します。

GASコードを【Apps Script】に設定する手順

1
スプレッドシートのメニュー「拡張機能」>「Apps Script」を開きます。

2
表示されている古いコードをすべて削除し、GASコードをコピペします。
3
【無題のプロジェクト】【コード.gs】の名前を【メール自動化関連】【一括・個別差し込みメール送信.gs】変更します。

そのままでも利用できますが、わかり易い名前をつけた方が、コードを他のシートでも使いたい時など、使い回す時便利。

4
メールの内容が記載してある【シート名】とGASコードの【const SHEET_NAME = ‘一括・個別差し込みメール送信’; 】が一緒か確認して、保存(💾アイコン:※Ctrl(macはCommand)+Sでも保存可能)してください。

5
スプレッドシートを再読み込みするか、再度開き直してください。上部メニューに「💌 メール送信」というカスタムメニューが表示されます。

6
「💌 メール送信」>「一括送信を実行」をクリックします。

初回実行時の承認

  • 初めて実行する際に「承認が必要です」というダイアログが表示されます。「続行」をクリックしてください。
  • 自分のGoogleアカウントを選択します。
  • 「このアプリは Google で確認されていません」という警告画面が表示される場合がありますが、これは自作のスクリプトのためです。左下の「詳細」をクリックし、「(プロジェクト名)(安全ではないページ)に移動」をクリックして次に進んでください。
  • 「メールの送信」などを許可する画面が表示されるので、「許可」をクリックします。

承認が完了すると、スクリプトが実行されます。スプレッドシートのリストの上から順にメールが送信され、送信が完了した行の「送信ステータス」列に「送信済み」と自動的に入力されます。

処理が完了すると、結果(送信件数など)がダイアログで表示されます。

ご利用上の注意点

  • メール送信上限数: Gmailには1日あたりのメール送信数に上限があります。
    • 個人のGmailアカウント:約500通/日
    • Google Workspaceアカウント:プランにより異なります(例: 2,000通/日) 上限を超えるとエラーになりますのでご注意ください。
  • 実行時間: GASのスクリプトは、1回の実行時間が最大6分という制限があります。数千件など大量のメールを送信する場合は、複数回に分けて実行してください。
  • 法律の遵守: メールの送信にあたっては、特定電子メール法などの関連法規を遵守してください。特に、同意のない相手への広告・宣伝メールの送信には注意が必要です。
  • テスト: 本番のリストで実行する前に、必ずご自身のメールアドレスなどを使って数件のテスト送信を行い、意図した通りにメールが届くかを確認してください。