請求書の作成をGASで自動化し時間とコストを削減

GAS業務自動化請求書
請求書の作成をGASで自動化し時間とコストを削減のサムネイル

請求書の作成をGASで自動化し時間とコストを削減


中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじです。今回は「請求書の作成をGoogle Apps Script(以下GAS)で自動化し、時間とコストを削減する方法」について解説していきます。請求書作成は地味に時間がかかってしまう作業。これを自動化すれば、作業時間が短縮されるだけでなく、ミスの防止やコスト削減にもつながりますよ。


なぜGASで請求書自動化?SaaS課金に厳しいおじさんの視点

クラウド請求書サービスって便利だけど、月額料金が積み重なると結構なコストになります。おじさんはSaaSの課金体系に敏感でして…。そこでGASの出番です。GASはGoogleアカウントの利用枠内で利用可能で、追加の専用SaaS料金は発生しません。ただし、Apps Scriptのquotaや実行上限はあるのでその点は注意が必要です。

さらにGASなら既存のスプレッドシートやドキュメントと連携しやすく、柔軟にカスタマイズ可能。請求書のひな形をGoogleドキュメントで用意し、そこにデータを書き込む形で新しい請求書ファイルを自動生成するのが鉄板パターンです。


GASで請求書を作成するための初期設定と必要な権限

まずはGASのプロジェクトを作成し、請求書のひな形となるGoogleドキュメントを用意してください。このドキュメントには「{{顧客名}}」「{{請求金額}}」などのプレースホルダーを入れておきます。

スクリプトがドキュメントのコピー作成や編集を行うため、Googleドライブのファイル管理権限(「Googleドライブのファイルを管理」)と、スプレッドシートの読み書き権限が必要です。初回実行時に認証を求められるので承認してください。

また、請求書作成の自動化を定期的に行いたい場合は、installable trigger(時間主導型トリガー)を設定すると便利です。これにより毎月の請求書作成作業を完全自動化できます。


請求データの入力検証とバックアップ・ロールバック体制について

請求書を作る元データはスプレッドシートにまとめていることが多いはず。ここで注意したいのが「入力ミス」と「既存データの保全」です。GASおじのポリシーとして、既存の請求データを消してしまう操作は行いません。削除系APIは使わず、新しいシートや新しいファイルに結果を書き出す形で処理します。

さらに、請求データの必須項目(顧客名、請求金額、請求日など)が空欄でないか、数値が正しいかなどをスクリプト内でチェックしてから処理を進めます。もし不備があれば処理を中断し、エラーメッセージをログに残すなどして対処可能です。

また、万一に備えて、処理前に元のスプレッドシートをコピーしてバックアップを取っておくこともおすすめします。これにより、誤ってデータが変わってしまった場合でも元に戻せます。


具体的なGASコード例:請求書ドキュメントを日時付きで自動生成

以下は、スプレッドシートの請求データを読み込み、Googleドキュメントのひな形をコピーして請求書を作成し、請求書作成履歴用の新しいシートに書き出すサンプルコードです。既存データの削除は一切行わず、入力検証とバックアップも含んでいます。

function generateInvoices() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('請求データ');
  const backupName = `請求データバックアップ_${new Date().toISOString()}`;
  // バックアップを作成(新しいシートにコピー)
  ss.insertSheet(backupName, {template: dataSheet});
  
  const dataRange = dataSheet.getDataRange();
  const values = dataRange.getValues();
  
  // ヘッダー行を除く
  const headers = values[0];
  const dataRows = values.slice(1);
  
  // 必須カラムのインデックス取得
  const idxCustomer = headers.indexOf('顧客名');
  const idxAmount = headers.indexOf('請求金額');
  const idxDate = headers.indexOf('請求日');
  
  if (idxCustomer === -1 || idxAmount === -1 || idxDate === -1) {
    throw new Error('必須カラム(顧客名、請求金額、請求日)が見つかりません。');
  }
  
  // 請求書作成履歴用の新しいシートを作成
  const timestamp = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd_HHmmss');
  const invoiceSheetName = `請求書履歴_${timestamp}`;
  const invoiceSheet = ss.insertSheet(invoiceSheetName);
  invoiceSheet.appendRow(['顧客名', '請求金額', '請求日', '請求書ファイルURL']);
  
  // 請求書のひな形ドキュメントIDを設定
  const templateDocId = 'ここに請求書テンプレートのドキュメントIDを入れてください';
  
  dataRows.forEach((row, i) => {
    const customer = row[idxCustomer];
    const amount = row[idxAmount];
    const date = row[idxDate];
    
    // 入力検証
    if (!customer || !amount || !date) {
      Logger.log(`データ行${i + 2}に不備あり。顧客名、請求金額、請求日を確認してください。`);
      return; // この行はスキップ
    }
    if (typeof amount !== 'number' || amount <= 0) {
      Logger.log(`データ行${i + 2}の請求金額が不正です。`);
      return;
    }
    
    // テンプレートをコピーして新しい請求書ファイルを作成
    const copyName = `請求書_${customer}_${Utilities.formatDate(new Date(date), 'Asia/Tokyo', 'yyyyMMdd')}`;
    const copyFile = DriveApp.getFileById(templateDocId).makeCopy(copyName);
    const copyDoc = DocumentApp.openById(copyFile.getId());
    const body = copyDoc.getBody();
    
    // プレースホルダーを置換
    body.replaceText('{{顧客名}}', customer);
    body.replaceText('{{請求金額}}', amount.toLocaleString());
    body.replaceText('{{請求日}}', Utilities.formatDate(new Date(date), 'Asia/Tokyo', 'yyyy/MM/dd'));
    
    copyDoc.saveAndClose();
    
    // 請求書作成履歴に書き込み
    invoiceSheet.appendRow([customer, amount, date, copyFile.getUrl()]);
  });
  
  Logger.log(`請求書作成完了。履歴シート: ${invoiceSheetName}`);
}

コスト削減の試算例

仮に月に30件の請求書を作成し、1件あたり手作業で5分かかっていたとします。時給を2000円とすると、

  • 作業時間:30件 × 5分 = 150分(2.5時間)
  • 作業コスト:2.5時間 × 2000円 = 5000円/月

GAS自動化により、作業時間が1件あたり1分に短縮できれば、

  • 作業時間:30件 × 1分 = 30分(0.5時間)
  • 作業コスト:0.5時間 × 2000円 = 1000円/月

つまり、1か月あたり約4000円のコスト削減が見込めます。年間に換算すると約4万8000円の効果。ただしこれはあくまで仮定の計算式であり、実際の効果は業務環境によって異なります。


個人情報の取り扱いと復元手順について

請求書には顧客の個人情報や取引情報が含まれます。GASのスクリプトはGoogleのセキュリティ基準のもと動作しますが、スクリプトのアクセス権限を必要最小限に留め、管理者以外のアクセスは制限すべきです。

また、バックアップシートを作成することで、誤操作によるデータ損失時も元データに戻せます。復元手順は、バックアップシートの内容を「請求データ」シートにコピーし直すだけです。


まとめ

GASを活用すれば、追加の専用SaaS料金なし(Googleアカウントの利用枠内)、請求書作成を自動化でき、時間とコストの削減が期待できます。入力検証やバックアップも組み込めば安心です。既存データを消さずに新しいシートやファイルへ結果を書き出すことで、データ保全にも配慮しています。

GASで業務自動化にチャレンジしてみたい経営者やフリーランスの皆さん、ぜひ活用してみてくださいね。


GASおじラボで500ツール使い放題 →