同じ文面のメールを、宛名だけ変えて何十通も送る。
手で打っていると、そのうち1通くらい間違えます。しかもメールは、送ってしまうと取り消せません。
この記事では、スプレッドシートに並んだ一覧から、決まった書式のメールを自動でつくるところまでをやります。 プログラミングの経験は必要ありません。コードは全部そのまま貼るだけです。
ひとつだけ、順番を守ってほしいところがあります。 いきなり送信はしません。まず「下書き」を作ります。 Gmailの下書きフォルダに並んだものを自分の目で確認して、問題なければ送信に切り替える。下書きなら、間違っていても消せば済みます。
できあがるもの
こういうシートを用意して……

ボタンを1回押すと、Gmailの下書きがこうやって並びます。

中身はこんなメールです。

シートを用意する
Googleスプレッドシートを新しく1つ作って、1行目に見出し、2行目から中身を入れます。
| A | B | C | |
|---|---|---|---|
| 1 | 宛先 | 名前 | 品名 |
| 2 | 自分のメールアドレス | 山田 太郎 | 4月号 |
| 3 | 自分のメールアドレス | 鈴木 花子 | 4月号 |
最初は必ず、自分のメールアドレスだけを入れてください。 テストのつもりで他人のアドレスを入れておくと、うっかり送信してしまったときに取り返しがつきません。自分宛てなら何度失敗しても大丈夫です。
なお、この記事の画像では test@example.com と表示していますが、これは説明用の表記です。実際にはご自身のアドレスを入れてください。
見出しの1行目は、あってもなくても動くように後で処理します。今は気にせずそのまま入れてください。
スクリプトエディタを開く
シートの上のメニューから、
拡張機能 → Apps Script
をクリックします。新しいタブでエディタが開きます。

最初から書いてある
function myFunction() {
}
は、全部消してしまって大丈夫です。
コードを貼る
消したところに、下のコードをそのまま貼り付けてください。1文字も打ち替えなくて構いません。
function createMails() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getDataRange().getValues();
// 1行目は見出しなので、slice(1) で2行目から取り出す
for (const row of rows.slice(1)) {
const address = row[0];
const name = row[1];
const item = row[2];
// 宛先が空の行は飛ばす
if (!address) {
continue;
}
const subject = `${item}のご案内`;
const body = `${name} 様
いつもお世話になっております。
${item}について、ご案内をお送りいたします。
ご不明な点がありましたら、このメールにご返信ください。
下町自動化`;
GmailApp.createDraft(address, subject, body);
}
}
貼ったら、フロッピーディスクのマーク(保存)を必ずクリックします。 ここを忘れると、次の実行で「さっきのコード」が動いてしまいます。わたしは何度もやりました。
もうひとつ、左上の「無題のプロジェクト」をクリックして、名前をつけておきます。 「メール自動作成」のように、中身が分かる名前で構いません。
この名前は、このあとの承認画面にそのまま表示されます。「無題のプロジェクト」のままだと、警告画面を見たときに自分が作ったものだと分かりにくいので、先につけておくのがおすすめです。

実行する
上のほうにある 実行 ボタンを押します。
初回だけ、Googleから「承認が必要です」という画面が出ます。
- 「権限を確認」をクリック
- 自分のGoogleアカウントを選ぶ
- 「このアプリはGoogleで確認されていません」と出たら、左下の 詳細 → 一番下の (プロジェクト名)に移動 をクリック
- 「許可」をクリック
自分で書いたスクリプトなので、この警告が出るのは正常です。びっくりしなくて大丈夫です。
なお、以前にGASを動かしたことがあるアカウントでは、この承認画面が出ないことがあります。その場合は承認済みということなので、そのまま次に進んでください。
下に「実行完了」と出たら成功です。
下書きを確認する
Gmailを開いて、左のメニューから 下書き を見てください。
シートの行数ぶん、下書きが並んでいるはずです。

ここで必ず中身を開いて、
- 宛先は合っているか
- 名前は正しく入っているか
- 改行の位置は思ったとおりか
を目で確かめてください。送ってしまってからでは直せないので、ここで見ておくと安心です。
送信に切り替える
下書きの中身に問題がなければ、いよいよ送信です。
コードの下のほうにある、この1行を見つけてください。
GmailApp.createDraft(address, subject, body);
これを、こう書き替えます。
GmailApp.sendEmail(address, subject, body);
createDraft を sendEmail に変える。それだけです。
保存して、もう一度 実行 を押すと、今度は本当に送信されます。
注意:一度送ったメールは取り消せません。 切り替える前に、シートの宛先欄をもう一度見てください。テスト用のダミー行が残っていないか。自分宛て以外のアドレスが混ざっていないか。ここだけは、面倒でも毎回確認する習慣をつけてください。
なお、1日に送れる通数には上限があります。数十通くらいなら問題ありませんが、まとめて大量に送りたい場合は注意が必要です。この話は、このあとの記事で扱います。
つまずき集
わたしが実際にひっかかったところです。同じところで止まっている方は、ここを見てください。
エラーには2種類あります
これを知っておくと、原因を探す場所がすぐ分かります。
構文エラー — 書き方そのものが間違っているとき。 コードを直した瞬間に、画面の左下に赤い帯で出ます。実行を押す前に出るのが特徴です。 行: 17 のように場所を教えてくれるので、その行を見に行けば解決します。
実行時エラー — 書き方は合っているが、動かしてみると困ることが起きたとき。 実行を押したあと、「実行ログ」の中に出ます。
赤い帯が出たら書き方の問題、実行ログに出たらデータや設定の問題。
見出し行までメールにしようとしている
実行ログに、こう出たときです。
Exception: Invalid email: 宛先
createMails @ コード.gs:26
コードの rows.slice(1) が rows になっていないか確認してください。 slice(1) は「1行目を飛ばして、2行目から使う」という指示です。これが抜けると、見出しの「宛先」という文字をメールアドレスとして送ろうとして失敗します。
エラー文の中に「宛先」と日本語で出るので、見出し行が原因だと気づけます。
アドレスに全角の文字が混ざっている
同じ Invalid email: でも、そのあとに自分のアドレスが表示されるときは、こちらです。
よくあるのが、コピペしたときに前後に入り込む全角スペースです。見た目ではまったく分かりません。 シートのセルをクリックして、末尾でカーソルを動かしてみてください。 何もないはずの場所でカーソルが1回止まったら、そこにスペースがあります。
コードを消しすぎた・消し足りない
左下に赤い帯で、こう出たときです。
構文エラー: SyntaxError: Unexpected token ')' 行: 6 ファイル: コード.gs
わたしがやったのは、rows.slice(1) を消すときにピリオドだけ残してしまったケースです。
for (const row of rows.) { // ← ピリオドが残っている
行: 6 と教えてくれるので、その行を見て、余分な記号がないか確かめてください。
本文を囲む記号を取り違えた
左下に赤い帯で、こう出たときです。
構文エラー: SyntaxError: Invalid or unexpected token 行: 17 ファイル: コード.gs
このコードでは、本文を `(バッククォート) で囲んでいます。 これを '(シングルクォート)や "(ダブルクォート)に変えると、動かなくなります。 改行が消えるのではなく、保存すらできずにエラーになります。
見分け方
この2つ、画面上ではほとんど同じに見えます。拡大しないと分かりません。
| 記号 | 名前 | 形 | 日本語キーボードでの入力 |
|---|---|---|---|
` | バッククォート | 左上から右下へ斜め | Shift + @ |
' | シングルクォート | まっすぐ縦 | Shift + 7 |
正直に言うと、わたしもこの2つの区別がすぐには分かりませんでした。 記事のコードをそのままコピーして貼れば、この問題は起きません。 手で打ち直さないのが、いちばん確実な対策です。
なお、本文を囲む記号は17行目と24行目の2か所にあります。 片方だけ変えても、やはりエラーになります。
何も起きない・エラーも出ない
シートの2行目以降が空っぽになっていませんか。 宛先が空の行は飛ばす作りにしているので、データが1行もないと何も作られずに終わります。
直したはずなのに、前と同じ結果になる
コードを直したあと、保存していません。
画面の上に「変更が保存されていません」と出ていないか見てください。 出ていたら、その左にある保存マークをクリックします。「ドライブに保存しました」に変われば大丈夫です。
保存せずに実行すると、直す前のコードが動きます。 直したつもりで実行して、同じエラーが出て悩んだことがあります。
まとめ
- スプレッドシートの一覧から、決まった書式のメールを自動で作れる
- まず
createDraftで下書きを作り、目で確認してからsendEmailに切り替える - テストは必ず自分のアドレスで
ここまでで「動く」ところまで来ました。
ただ、このコードには弱いところがあります。 たとえば、実行を2回押したら同じ人に2通送られてしまいます。文面を変えたくなったら、コードそのものを触らないといけません。
このあとの記事では、送信済みの印をつけて二重送信を防ぐ方法と、文面をシート側で編集できるようにする方法をやります。職場で使うつもりなら、そこまでやっておかないと危ないです。
→ スプレッドシートの一覧から、決まった書式のメールを自動で送る【整えたコード版】
→ Gmailの添付ファイルをGoogleドライブに自動保存する【GAS初心者向け・コピペOK】
※2026年9月時点の画面で確かめた内容です。Googleの画面表示は変わることがあります。

コメント