「毎月、顧客リストやメンバー宛てに1件ずつメールをコピペして送る作業に疲れていませんか?」 「宛名や本文の入力ミス・誤送信が怖くて、毎回神経を使っている……」
そんな単純作業のストレスから今すぐ解放される方法があります!それが、GoogleスプレッドシートとGmailを連携させた「自動一括送信」です。
「プログラミング(GAS)が必要なんてハードルが高そう……」と構える必要はありません。 本記事では、コピー&ペーストするだけでそのまま使える完成版コードをご用意しました。さらに、シート上に配置した「送信ボタン」をポチッと押すだけで一括送信が完了する仕組みまで、図解付きで分かりやすく解説します。
この設定を一度作っておけば、これまで数時間かかっていたメール送信作業がわずか1秒で終わるようになります。ぜひ最後まで読みながら、一緒に作成してみてください!
スプレッドシートからGmailを自動送信するメリットとは?
スプレッドシートとGmailを連携してメールを自動送信する最大のメリットは、「手作業によるミスの撲滅」と「圧倒的な時間の節約」です。
具体的には、以下のようなメリットがあります。
- 宛名や本文の入力ミス・誤送信(BCC漏れ等)を防げる
1件ずつ宛先や宛名を手入力・コピペしていると、「〇〇様」の氏名を間違えたり、BCCに入れるべきアドレスを宛先に設定して情報漏洩を起こしたりするリスクがあります。スプレッドシートから送信すれば、リストのデータ通りに正確に送信されます。 - 数十〜 百通のメールが一瞬で完了する
1通あたり2分かかっていた送信作業も、一括送信ならボタンを押すだけの数秒で終わります。30人に送る場合、約1時間の作業がわずか数秒に短縮されます。 - 送信履歴(ステータス)が自動で記録される
「誰にいつ送ったか」がスプレッドシート上にタイムスタンプとして残るため、「送信漏れ」や「二重送信」を防ぐことができます。 - 外部の有料メルマガツールを使わずに「完全無料」で実現できる
専用のメール配信システムを契約すると月額コストがかかりますが、Google標準機能(GAS)を使えば、完全無料で同じような一括配信の仕組みが作れます。
【準備】送信用スプレッドシートの作成

それでは早速スプレッドシートを作成していきます。スプレッドシートには、以下の6つの項目(列)を用意します。1行目をヘッダー(見出し)とし、2行目以降に実際のデータを入力していきます。
- A列:ステータス(自動更新)
- 送信前は「空欄」にしておきます。プログラムが実行されると、自動的に「送信完了」と書き込まれます。
- ※二重送信を防ぐため、「送信完了」と書かれている行はスキップする仕組みにします。
- B列:送信日時(自動更新)
- メールが送信された正確な日付と時間が自動入力されます。
- C列:宛先メールアドレス
- 送信先のメールアドレスを入力します。
- D列:お名前
- メール本文や宛名に差し出す「〇〇 様」の名前を入力します。
- E列:件名
- 送信するメールの件名を指定します。
- F列:本文
- 送信するメール本文を入力します。本文内に個別の宛名や固有の情報を差し込みたい場合は、定型文として作成しておきます。
💡 ワンポイントアドバイス
本文が長い場合は、シート上に直接書く以外にも「Gmailの「下書き」をテンプレートとして読み込む」高度な方法もありますが、まずは一番シンプルな「シート上のテキストをそのまま送る方法」から試してみましょう!
【コピペOK】GAS(Google Apps Script)のコードを設定する
① 「拡張機能」>「Apps Script」の開き方

スプレッドシートの準備ができたら、メールを送信するためのプログラム(GAS)を設定していきます。
- スプレッドシートの上部メニューにある「拡張機能」をクリックします。
- 表示されたメニューから「Apps Script」を選択します。
- 新しいタブで「無題のプロジェクト」という黒・黄色の画面(エディタ画面)が開きます。
💡 コツ
画面左上の「無題のプロジェクト」という文字をクリックして、「Gmail一括送信」など分かりやすい名前に変更しておくと後から管理しやすくなります。「Apps Script」の画面でも同じように分かりやすい名前を付けましょう。
② 汎用コピペ用コード(コピペするだけのコード枠)

エディタ画面に最初から書いてある「 function myFunction() { … } 」というコードをすべて消去します。

以下のコードをそのままコピペしてください。
function sendEmails() {
// 1. アクティブなシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 2. シートの全データを取得(1行目はヘッダーなので2行目から処理)
const startRow = 2;
const lastRow = sheet.getLastRow();
// データが存在しない場合は処理を終了
if (lastRow < startRow) {
Browser.msgBox("送信対象のデータがありません。");
return;
}
// A2からF列の最終行までのデータを取得
const dataRange = sheet.getRange(startRow, 1, lastRow - startRow + 1, 6);
const data = dataRange.getValues();
let sendCount = 0; // 送信件数のカウント
// 3. 1行ずつループ処理
for (let i = 0; i < data.length; i++) {
const row = data[i];
const status = row[0]; // A列:ステータス
const email = row[2]; // C列:宛先メールアドレス
const name = row[3]; // D列:お名前
const subject = row[4]; // E列:件名
const body = row[5]; // F列:本文
// すでに「送信完了」になっている行、またはメールアドレスが空欄の行はスキップ
if (status === "送信完了" || !email) {
continue;
}
try {
// 4. Gmailでメール送信
GmailApp.sendEmail(email, subject, body);
// 5. 送信成功後、シートのA列とB列を更新
const currentRow = startRow + i;
sheet.getRange(currentRow, 1).setValue("送信完了"); // A列にステータス記入
sheet.getRange(currentRow, 2).setValue(new Date()); // B列に現在日時記入
sendCount++;
} catch (error) {
// エラーが発生した場合はA列にエラー内容を記録
const currentRow = startRow + i;
sheet.getRange(currentRow, 1).setValue("エラー: " + error.message);
}
}
// 6. 完了メッセージの表示
Browser.msgBox(sendCount + "件のメール送信が完了しました!");
}

貼り付けが完了したら、画面上部にある「フロッピーディスクのアイコン(保存)」をクリックして保存してください。
③ コード内で変更が必要なポイントの解説
今回提供したコードは、先ほど作成したスプレッドシートの列配置(A列〜F列)と完全に連動しています。
基本的にそのままで動作しますが、もしご自身で列の順番や項目を変更したい場合は、以下の箇所を調整してください。
- 列の位置(インデックス番号)について
コード内のrow[0]やrow[2]という数字は、シートの列を表しています。プログラムの世界では「1番目=0」とカウントするため注意してください。row[0]= 1番目の列(A列:ステータス)row[2]= 3番目の列(C列:メールアドレス)row[3]= 4番目の列(D列:お名前)row[4]= 5番目の列(E列:件名)row[5]= 6番目の列(F列:本文)
- 二重送信防止の仕組み(ここが安心ポイント!)
コード内にあるif (status === "送信完了" || !email)の部分で、すでに「送信完了」と書かれている行を判定しています。
誤ってボタンを2回押してしまっても、同じ人に何度も同じメールが届く心配はありません。 - 送信制限対策
一度に何百件も送信してGoogleのAPI制限エラーにならないよう、1通送るごとにシートへ「送信完了」と日時をリアルタイム書き込みする仕様にしています。
初回実行時の「アクセス承認(権限許可)」の手順
コードの保存ができたら、一度テスト実行をして「アクセス承認」を行います。
GASからGmailやスプレッドシートを操作するためには、初回のみ「このプログラムが自分のアカウントを操作することを許可する」という承認作業が必要です。
アクセス承認のステップ

エディタ上部の実行ボタン(三角形のアイコン)の横が `sendEmails` になっていることを確認し、「実行」をクリックします。

「承認が必要です」というポップアップが表示されるので、「権限を確認」をクリックします。
アカウント選択画面が出たら、ご自身のGoogleアカウントを選択します。 (表示されない場合があります)

【注意】「Google によるこのアプリの確認は完了していません」という警告画面が表示されます。びっくりするかもしれませんが、自分で作成したプログラムなので安全です。
画面左下にある「詳細」をクリックします。

下部に表示される「Gmail一括送信(安全ではないページ)に移動」をクリックします。

「Gmail一括送信がGoogleアカウントへのアクセスを求めています」と表示されますので、まずは情報選択部分で「すべて選択」にチェックを入れます。チェックが入ったら画面を下にスクロールします。

「続行」ボタンをクリックします。

実行ログに「実行開始」「実行完了」と表示されれば、承認作業は無事完了です!
💡 なぜ警告が出るの?
未認証の自作プログラムを実行しようとすると、Googleのセキュリティ機能によってこの警告画面が表示されます。ご自身で作ったコードであれば危険はありませんので、安心して上記の手順で進めてください。
「実行完了」が表示されない場合

「実行完了」がなかなか表示されない場合は、まず最初に、先ほど編集していたスプレッドシートの画面に切り替えてください。このような感じで送信完了確認画面が表示されたら、「OK」ボタンを押します。すると「Apps Script」の画面に「実行完了」が表示されます。
⚠️ テスト実行時の注意点
スプレッドシートの「宛先メールアドレス(C列)」には、必ずご自身のメールアドレスを入力してからテスト実行を行ってください。存在しないダミーアドレスのままだと、送信処理が停止したりエラーの原因になります。
シート上に「一括送信ボタン」を作成・設置する
アクセス承認が終わったら、仕上げとしてスプレッドシート上に「送信ボタン」を作成します。これを作っておけば、次回からはボタンを押すだけでいつでも一括送信ができるようになります。
STEP 1:ボタンの見た目を作成する

スプレッドシートの上部メニューから「挿入」>「描画」をクリックします。

描画画面が開いたら、ツールバーから「図形(四角形や角丸四角形)」を選び、シート上にボタンとなる図形を描きます。

図形の中に「メール一括送信」などのテキストを入力し、背景色や文字色を整えて「保存して閉じる」をクリックします。 全体のサイズなどは後で調整出来ますので、気にせず作成してください。

シート上にボタン画像が配置されました。
STEP 2:ボタンにスクリプトを割り当てる

シート上に配置されたボタンに表示される右上「⋮(3つの点)」アイコンをクリックします。

メニューから「スクリプトを割り当て」を選択します。

入力枠が表示されるので、先ほど作成した関数名である`sendEmails`と入力し、「確定」をクリックします。
これで設定はすべて完了です! ボタンをクリックすると、裏でプログラムが起動し、自動的にメールが一括送信されるようになります。
【動作確認】実際にボタンを押して自動送信してみよう!
すべての設定とボタンの作成が終わったら、いよいよ実際に動作確認を行ってみましょう!
STEP 1:テスト用データの準備
まずは確実にメールを受信できるよう、自分あてのアドレスでテストを行います。

スプレッドシートの C列(宛先メールアドレス) に、ご自身のメールアドレス(普段使っているGmailなど)を入力します。

A列(ステータス) と B列(送信日時) が「空欄」になっていることを確認します。
※A列に「送信完了」と入っていると、プログラムがスキップしてしまうため必ず消しておきます。
⚠️ 注意!
「example@test.com」 などの存在しないダミーアドレスが入ったままだと、送信処理が終わらず画面が「実行開始」のまま固まってしまう原因になります。必ず実在するご自身のアドレスに変更してください。
STEP 2:設置したボタンを押す

スプレッドシート上に作成した「メール一括送信」ボタンをポチッと1回クリックします。
- クリックすると、シート上部に「スクリプトを実行しています…」と一瞬表示されます。
- 数秒待つと、「〇件のメール送信が完了しました!」というポップアップが表示されます。
STEP 3:送信結果の確認

送信が完了したら、以下の2点を確認しましょう。
- スプレッドシートの確認
- A列に「送信完了」
- B列に「送信された日時(年/月/日 時間)」
が自動で書き込まれていれば、シート側の処理は成功です。
- 受信トレイの確認
- 設定したメールアドレスの受信トレイを開き、件名や本文(お名前など)が正しく差し込まれたメールが届いているか確認します。
これで、ボタン一発でGmailを一括自動送信する仕組みの完成です!
よくある質問・注意点(送信上限など)
Q1. 1日に何通まで送信できますか?(送信上限について)
Google Apps Script(GAS)を使ったメール送信には、アカウントの種類ごとに1日あたりの送信上限が決められています。
| アカウントの種類 | 1日の送信上限数 |
|---|---|
| 無料のGoogleアカウント(@gmail.com) | 100通 / 日 |
| Google Workspaceアカウント(有料版・法人向け) | 2,000通 / 日 |
※この上限は24時間ごとにリセットされます。100通を超える大量送信を行いたい場合は、数日に分けて送るか、Google Workspaceアカウントの利用をご検討ください。
Q2. ボタンを押しても「実行開始」のまま画面が止まってしまいます
処理が途中で止まってしまう場合、以下の原因が考えられます。
- C列に実在しないメールアドレスが入っている
通信エラー待ちでフリーズするため、実在する正しいアドレスか確認してください。 - データが入っていない余計な「空行」が残っている
スプレッドシートの下部にデータのない空行が大量にある場合、全行を読み込もうとして時間がかかります。使っていない行は削除しておきましょう。
Q3. 同じ人に2重で送信されてしまう心配はありませんか?
今回のプログラムには、A列が「送信完了」になっている行を自動で読み飛ばす(スキップする)処理が組み込まれています。そのため、誤ってボタンを2回押してしまっても、同じ人に何度もメールが届く心配はありません。
新しく送信したい場合は、追加した行のA列を「空欄」にした状態でボタンを押せば、未送信のデータだけに送信されます。
まとめ
お疲れ様でした!
今回ご紹介した「スプレッドシート×Gmailの自動一括送信」を導入することで、これまで時間を取られていたメール送信作業が劇的に効率化されたはずです。
一度この仕組みを作ってしまえば、今後はリストを更新してボタンを一発押すだけで正確なメールを届けることができます。宛名間違いや送信漏れの心配もありません。
今回作成したGASコードは、下書き作成や日時指定送信など、用途に合わせてさらにカスタマイズすることも可能です。「もっと業務を自動化したい」「Google Workspaceを使いこなしたい」という方は、ぜひ他のGAS活用記事も参考にしてみてください!


コメント