毎月の請求書送付をゼロ工数にする方法|GASでGmailから自動送信する設定手順
月末が来るたびに、10件・20件・場合によっては50件を超える請求書を、一通一通メールで送付する作業に追われていませんか。テンプレートを開いて金額を入れ、PDF化して、件名を書いて、宛先を確認してから送信する——この繰り返しだけで、月に10時間以上を費やしている企業もあります。
GAS(Google Apps Script)を使えば、こうした請求書の送付作業を完全にゼロ工数にすることができます。スプレッドシートに顧客情報と金額を入力しておくだけで、毎月決まった日時に請求書PDFを生成してGmailから自動送信してくれる仕組みを構築できます。GASを使った業務自動化の開発支援でも、この請求書自動化は最も依頼が多い定番の活用例のひとつです。
この記事では、初めてGASを触る方でも迷わず実装できるよう、事前準備からコードの設置・トリガー設定まで、設定手順を順を追って解説します。
目次
手動の請求書送付が抱える3つのリスク

手動送付とGAS自動送付の作業コスト・精度・拡張性を比較
手動で請求書を送付し続けることには、単に時間がかかるという問題以外にも、見逃せないリスクがあります。
リスク1:ヒューマンエラーが防ぎにくい
宛先の間違い、金額の入力ミス、送付漏れ——手動作業である限り、こうしたミスはゼロにできません。特に月末の忙しい時期に、複数の取引先へ同時に送付する場合は集中力が散漫になりがちです。「A社に送るつもりがB社に送ってしまった」というケースは、経理担当者なら一度は経験したことがあるのではないでしょうか。
リスク2:月末に業務が集中して残業が増える
請求書の送付は月末に集中することが多く、その時期には他の業務も重なることがほとんどです。繁忙期と月次処理が重なることで、経理担当者の業務負荷が一時的に急増します。顧客が10社であれば許容範囲でも、30社・50社と取引先が増えるにつれて、この問題は深刻化していきます。
リスク3:送付管理の属人化
請求書の送付作業を特定の担当者が一手に担っている場合、その方が不在になると業務が止まってしまうリスクがあります。「誰がどの会社に送ったか」という情報が個人の手元にしかない状況は、組織としての脆弱性です。GASによる自動化は、こうした属人化の解消にも大きく貢献します。
GASで実現する自動送付の全体像

GASで請求書メールを自動送信するまでの3ステップ
GASによる請求書の自動送付は、次の3つのGoogleサービスを組み合わせることで実現します。
| サービス | 役割 | コスト |
|---|---|---|
| Googleスプレッドシート | 顧客リスト・金額の管理 | 無料 |
| Google Docs | 請求書のテンプレート管理 | 無料 |
| Gmail | PDF添付メールの送信 | 無料(1日500件まで) |
GASはこれらを仲介する「接着剤」として機能します。スクリプトを実行すると、スプレッドシートの顧客リストを読み込み、Docsテンプレートをコピーして差し込み変数を置換し、PDFに変換してGmailで送付、最後に送付完了をシートに記録する——この一連の処理を自動で行います。月1回のトリガー設定をしておけば、以降は何もしなくても毎月指定した日時に自動で請求書が送付されます。
業務自動化でできること100選
経理・人事・営業・CS・総務・ITの6部門100事例を収録。各事例に月間削減時間と導入難易度を明記。今日から始められるチェックリスト付き。
事前準備:スプレッドシートとDocsテンプレートを用意する
準備1:スプレッドシートの顧客リストを作成する
まず、Googleスプレッドシートを新規作成し、シート名を「送付リスト」にします。次の列構成で顧客データを入力してください。
| 列 | 項目 | 入力例 |
|---|---|---|
| A列 | 顧客名(会社名) | 株式会社○○ |
| B列 | 送付先メールアドレス | keiri@example.com |
| C列 | 請求金額(数値のみ) | 110000 |
| D列 | 請求書番号 | INV-2026-001 |
| E列 | 送付ステータス(空欄のまま) | (自動で「送付済み」と記録) |
| F列 | 送付日時(空欄のまま) | (自動で日時が記録) |
1行目はヘッダー行として入力し、2行目からデータを入力します。GASのコードはこの列構成を参照して動作するため、列の順番は変更しないでください。
準備2:Google Docsで請求書テンプレートを作成する
次に、Google Docsで請求書のひな型を作成します。差し込みたい箇所には、波括弧2つで囲んだ変数名(プレースホルダ)を配置します。
プレースホルダの使い方
顧客名の部分:{{name}}
請求金額の部分:{{amount}}
請求書番号の部分:{{invoiceNo}}
GASがこれらの文字列を自動的に実際のデータに置き換えます。
テンプレートが完成したら、Google DriveのURLから「ファイルID」を取得しておきます。URLの「/d/」と「/edit」の間にある文字列がファイルIDです。GASのコードにこのIDを設定するため、メモしておいてください。
GASコードを実装する
スプレッドシートの上部メニューから「拡張機能」→「Apps Script」を選択すると、GASのエディタが開きます。既存のコードをすべて削除してから、以下のコードを貼り付けてください。
function sendInvoiceEmails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('送付リスト');
const templateId = '【ご自身のGoogle Docs テンプレート ID】';
const folderId = '【PDFを保存するGoogle DriveフォルダID】';
const template = DriveApp.getFileById(templateId);
const folder = DriveApp.getFolderById(folderId);
const lastRow = sheet.getLastRow();
for (let i = 2; i <= lastRow; i++) {
const name = sheet.getRange(i, 1).getValue();
const email = sheet.getRange(i, 2).getValue();
const amount = sheet.getRange(i, 3).getValue();
const invoiceNo = sheet.getRange(i, 4).getValue();
const sent = sheet.getRange(i, 5).getValue();
if (sent === '送付済み' || !email) continue;
const copy = template.makeCopy('請求書_' + invoiceNo, folder);
const doc = DocumentApp.openById(copy.getId());
const body = doc.getBody();
body.replaceText('\{\{name\}\}', name);
body.replaceText('\{\{amount\}\}', Number(amount).toLocaleString() + '円');
body.replaceText('\{\{invoiceNo\}\}', String(invoiceNo));
doc.saveAndClose();
const pdf = copy.getAs('application/pdf').setName('請求書_' + invoiceNo + '.pdf');
GmailApp.sendEmail(
email,
'【ご請求】' + invoiceNo + ' のご送付',
name + ' ご担当者様\n\nお世話になっております。\n請求書をお送りします。ご確認のほど、よろしくお願いいたします。\n\n株式会社○○',
{ attachments: [pdf] }
);
sheet.getRange(i, 5).setValue('送付済み');
sheet.getRange(i, 6).setValue(new Date());
Utilities.sleep(2000);
}
console.log('全件送付完了');
}
コードを貼り付けたら、2箇所のIDを実際のものに置き換えます。
| 変更箇所 | 設定する値 |
|---|---|
| templateId | 作成したDocsテンプレートのファイルID |
| folderId | PDFを保存したいGoogle DriveフォルダのID |
Gmailの送信権限を許可する
初回実行時には、GASがGmailへのアクセス権を求める認証画面が表示されます。「アカウントの選択」→「詳細」→「(プロジェクト名)に移動」→「許可」の順に進めてください。この認証は初回のみ必要で、以降は自動的にスキップされます。
テスト実行して動作を確認する
コードを保存したら、まずはテスト用の行(メールアドレスを自分のものにした行)で動作確認をします。エディタ上部の「実行」ボタンを押すと、関数が実行されます。自分のメールボックスに請求書PDFが添付されたメールが届き、スプレッドシートのE列に「送付済み」と記録されれば成功です。
実運用で役立つ3つの応用テクニック
テクニック1:毎月自動実行のトリガーを設定する
GASエディタの左メニューにある「トリガー(時計アイコン)」をクリックし、「トリガーを追加」を選択します。設定は次のように行います。
| 設定項目 | 推奨値 |
|---|---|
| 実行する関数 | sendInvoiceEmails |
| イベントのソース | 時間主導型 |
| 時間ベースのトリガーのタイプ | 月ベースのタイマー |
| 日付 | 月の25日(請求書送付日に合わせる) |
| 時刻 | 午前9時〜10時 |
これで毎月25日の午前9時台に、スクリプトが自動で実行されるようになります。翌月分のデータをシートに入力しておくだけで、あとは何もせずに請求書が送付されます。
テクニック2:送付失敗時に管理者へ通知する
メールアドレスの誤りや何らかのエラーで送付が失敗した場合に、管理者のメールアドレスへ通知するコードを追加しておくと安心です。try-catch文でエラーを捕捉し、GmailApp.sendEmail()で管理者宛てに通知メールを送るパターンが一般的です。エラー内容をシートに記録する列を追加しておくと、後から状況を把握しやすくなります。
テクニック3:請求書番号を月次で自動採番する
請求書番号を手動で入力する代わりに、GASが実行された月を元に自動で採番する仕組みを組み込むことができます。
// 例:実行月を元に請求書番号を自動生成
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const seq = String(i - 1).padStart(3, '0');
const invoiceNo = `INV-${year}${month}-${seq}`;
この3つの応用テクニックを組み合わせることで、ほぼ完全なハンズフリーの請求書送付システムが完成します。月末の経理業務にかかる時間を大幅に圧縮し、担当者が本来注力すべき業務へリソースを振り向けられるようになります。
よくある質問
QGASの経験がまったくなくても実装できますか?
Aはい、コードのコピー&ペーストと2箇所のID設定だけで動作します。プログラミングの知識がない方でも、この記事の手順通りに進めれば1〜3時間で設定が完了します。テスト実行で動作確認してから本番に移行できるので、安心して試すことができます。
Q取引先が100社以上いても対応できますか?
AGmailの1日あたりの送信上限は500通(Workspace版は2,000通)です。100社程度であれば問題なく対応できます。ただし、GASの1回あたりの実行時間制限(6分)に引っかかる場合は、処理を分割するか、Utilities.sleep()の待機時間を調整してください。
Q送付済みの請求書を誤って二重送信してしまう心配はありますか?
A今回紹介したコードでは、E列に「送付済み」と記録されている行はスキップする処理が含まれています。そのため、同じスクリプトを誤って2回実行しても、既に送付済みの顧客への重複送信は防止されます。
Q請求書のデザインをもっと細かくカスタマイズしたい場合はどうすればよいですか?
AGoogle Docsのテンプレートを自由にデザインすることができます。会社ロゴの挿入、表のレイアウト変更、フォントの変更など、Docs上でできるデザインはすべて請求書PDFに反映されます。複雑なカスタマイズが必要な場合は、GASの専門家に相談することも選択肢のひとつです。
まとめ
この記事のポイント
- 月末の請求書送付作業はGASを使えばほぼゼロ工数に自動化できる
- Googleスプレッドシート・Google Docs・GmailをGASで連携させるシンプルな仕組み
- コードはコピー&ペースト+2箇所のID設定のみ。プログラミング経験不要
- 月次トリガーを設定すれば、毎月指定日時に自動で請求書が送付される
- 送付済み記録・エラー通知・自動採番などの応用で、より堅牢な仕組みに発展できる
- GASの1日あたりのメール送信上限(500通)内であれば、取引先が増えても対応可能
月末のたびに繰り返されていた請求書送付の手作業は、GASの初期設定に1〜3時間を投資するだけで、恒久的にゼロ工数に変えることができます。一度仕組みを作ってしまえば、取引先が増えても作業時間は増えません。この記事の手順を参考に、まずはテスト環境でお試しください。
請求書送付の自動化をさらに発展させ、会計ソフトや決済APIとも連携したい場合は、GASのAPI連携設計と認証処理の実装方法が参考になります。
※本記事の情報は2026年4月時点のものです。