技術ブログ

GASとGmailで請求書を自動送信!初心者でも簡単

/ 初心者向け

GASとGmailで請求書を自動送信!初心者でも簡単

GASとGmailで請求書を自動送信!業務効率を劇的に改善

日々の業務で請求書作成・送付に追われている皆様、お疲れ様です!「もっと効率化したい…」そんな悩みを抱えていませんか?

実は、Google Apps Script(GAS)とGmailを組み合わせることで、請求書の自動送信が驚くほど簡単に実現できます。この記事では、GAS初心者の方でも理解できるように、具体的な手順をステップバイステップで解説します。

請求書自動送信のメリット

まずは、請求書を自動送信することのメリットを整理しておきましょう。

  • 時間の大幅な節約: 手作業による作成・送付の手間が省けます。
  • ヒューマンエラーの削減: 入力ミスや送信漏れを防ぎます。
  • 顧客満足度の向上: 迅速かつ正確な対応は、顧客からの信頼につながります。
  • コア業務への集中: 定型業務から解放され、より付加価値の高い業務に集中できます。

準備するもの

この自動化を実現するために、以下のものを用意しましょう。

  • Googleアカウント: Gmailを利用するため必須です。
  • Google スプレッドシート (または Excel): 請求書データ(顧客名、金額、期日など)を管理します。
  • GASが動作する環境: ブラウザがあればOKです。

ステップ1:請求書データをGoogleスプレッドシートで管理

まずは、請求書に必要な情報をGoogleスプレッドシートで一覧化します。以下のような項目があると便利です。

  • 顧客名
  • メールアドレス
  • 請求金額
  • 請求日
  • 支払期日
  • 請求書番号(ユニークな番号を振ると管理が楽です)

例:

| 顧客名 | メールアドレス | 請求金額 | 請求日 | 支払期日 | 請求書番号 | 状態 |

| :------ | :------------------- | :------- | :------- | :------- | :------- | :----- |

| A社 | a.company@example.com | 10000 | 2023/10/27 | 2023/11/10 | INV001 | 未送信 |

| B社 | b.company@example.com | 25000 | 2023/10/27 | 2023/11/15 | INV002 | 未送信 |

「状態」列は、GASが処理したかどうかを記録するために使用します。今回は「未送信」のものを処理対象とします。

ステップ2:請求書テンプレートの準備

GASでメールを作成する際に、毎回件名や本文を記述するのは大変です。ここでは、請求書のテンプレートとなるメール文面をGASのスクリプトエディタ内に直接記述する方法を説明します。

ステップ3:GASスクリプトの作成

いよいよGASのスクリプトを作成します。

1. スクリプトエディタを開く: Googleスプレッドシートを開き、「拡張機能」>「Apps Script」を選択します。

2. スクリプトの記述: 以下のサンプルコードを参考に、ご自身の環境に合わせて編集してください。

function sendInvoiceEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("請求書データ"); // シート名を指定
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();

  // ヘッダー行をスキップ
  var header = values.shift();

  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    var customerName = row[0]; // A列: 顧客名
    var emailAddress = row[1]; // B列: メールアドレス
    var amount = row[2];       // C列: 請求金額
    var dueDate = row[4];      // E列: 支払期日
    var invoiceNumber = row[5]; // F列: 請求書番号
    var status = row[6];       // G列: 状態

    // 「未送信」のものだけ処理
    if (status === "未送信") {
      // メール件名
      var subject = "【" + customerName + "】" + invoiceNumber + "のご請求について";

      // メール本文
      var body = customerName + " 様

"
             + "いつもお世話になっております。

"
             + "下記のとおり、請求書を発行いたしましたのでご確認をお願いいたします。

"
             + "請求書番号:" + invoiceNumber + "
"
             + "請求金額:" + amount + " 円
"
             + "お支払期日:" + Utilities.formatDate(new Date(dueDate), "JST", "yyyy/MM/dd") + "

"
             + "ご不明な点がございましたら、お気軽にお問い合わせください。

"
             + "[あなたの会社名/氏名]";

      // Gmailでメールを送信
      GmailApp.sendEmail(emailAddress, subject, body);

      // 状態を「送信済」に更新
      sheet.getRange(i + 2, 7).setValue("送信済"); // i+2は行番号、7はG列
      SpreadsheetApp.flush(); // 変更を即時反映
      Logger.log(invoiceNumber + " を " + emailAddress + " に送信しました。");
    }
  }
}

コードの解説:

  • getSheetByName("請求書データ"): 請求書データが入力されているシート名を指定します。
  • getDataRange().getValues(): シートの全データを二次元配列として取得します。
  • values.shift(): ヘッダー行を配列から削除します。
  • row[0] など: 各列のデータを取得します。配列のインデックスは0から始まります。
  • Utilities.formatDate(): 日付のフォーマットを調整します。
  • GmailApp.sendEmail(): Gmailでメールを送信する関数です。
  • sheet.getRange(i + 2, 7).setValue("送信済"): 処理済みの請求書のステータスを「送信済」に更新します。

ステップ4:トリガーの設定(自動実行)

このスクリプトを毎日決まった時間に自動実行させるために、トリガーを設定します。

1. スクリプトエディタの左側にある時計アイコン(トリガー)をクリックします。

2. 「トリガーを追加」ボタンをクリックします。

3. 以下の設定を行います。

  • 実行する関数を選択: sendInvoiceEmails
  • 実行するデプロイを選択: Head
  • イベントのソースを選択: 時間駆動
  • 時間の間隔の種類を選択: 毎日のタイマー (またはお好みの間隔)
  • 時刻の範囲を選択: 深夜 0 時 ~ 1 時 (または指定したい時間)

4. 「保存」をクリックし、実行に必要な承認を行います。

まとめ

いかがでしたでしょうか?GASとGmailを使えば、請求書の自動送信が驚くほど簡単に実現できます。今回ご紹介した基本的なスクリプトをベースに、添付ファイル機能を追加したり、より詳細な条件分岐を加えたりと、さらにカスタマイズしていくことも可能です。

ぜひ、この自動化を取り入れて、日々の業務を効率化し、よりクリエイティブな業務に時間を充ててください!

ご不明な点がありましたら、お気軽にコメントでご質問ください。

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る