【GASで自動化】Googleスプレッドシートで請求書を自動作成する方法を徹底解説!

自動化事例

毎月の請求書作成、手作業で行っていませんか?

「請求書の作成に時間がかかる」「コピー&ペーストの繰り返しで、入力ミスが怖い」
「特に、1つの取引先に複数の項目を請求する時、明細の管理が大変…」

このようなお悩みは、多くの企業で共通の課題です。

しかし、高価な専門システムを導入しなくても、普段お使いのGoogleスプレッドシートを活用するだけで、この請求書作成業務は劇的に効率化できます。

本記事では、スプレッドシートの関数やGAS(Google Apps Script)という機能を使い、複数の明細行を含む請求書を、管理表データから自動で作成する方法を、初心者の方にも分かりやすく、ステップ・バイ・ステップで解説します。

この記事を読み終える頃には、あなたも請求書作成の自動化を実現し、面倒な手作業から解放されているはずです。

なぜ請求書作成にGoogleスプレッドシートが最適なのか?

請求書作成ツールには様々な選択肢がありますが、なぜGoogleスプレッドシートがおすすめなのでしょうか。主な理由は3つあります。

  1. 無料で始められる
    Googleアカウントさえあれば、誰でもすぐに無料で利用を開始できます。特別なソフトウェアをインストールする必要もありません。
  2. 使い慣れた操作感
    多くの方が表計算ソフトに触れた経験があるため、直感的に操作を覚えやすいのが特徴です。基本的な関数を使ったことがある方なら、本記事の内容もスムーズにご理解いただけます。
  3. 高いカスタマイズ性と拡張性
    自社の運用に合わせて、請求書のフォーマットや管理表の項目を自由に変更できます。さらに、本記事で紹介するGAS(Google Apps Script)を使えば、PDFの自動生成やメールの自動送信といった、より高度な自動化も可能です。

専門の請求書発行システムは多機能ですが、月額費用がかかることや、操作を覚えるまでに時間がかかることもあります。まずはスプレッドシートで自動化の第一歩を踏み出し、業務を効率化してみましょう。

請求書自動作成の全体像

今回作成する請求書自動化の仕組みは、以下の2つのシートで構成されます。

  1. 請求明細表シート:請求する内容を1行1明細で管理するシート
  2. 請求書シート:請求明細表の情報を基に、自動で請求書を作成するテンプレートシート

基本的な流れは非常にシンプルです。

「請求明細表」に請求データを入力し、「請求書」シートで特定の番号を選ぶだけで、必要な情報が自動的に反映される、という仕組みをこれから作っていきます。

ステップ1:請求明細を入力する「請求明細表シート」を作成する

まずは、すべての請求データの元となる「請求明細表」を作成します。
新しいスプレッドシートを作成し、シート名を「請求明細表」に変更してください。

次に、1行目に以下の項目(ヘッダー)を入力します。1つの請求書に複数の明細がある場合は、同じ請求書番号を使って複数行に入力するのがポイントです。

A列B列C列D列E列F列G列H列
請求書番号取引先名請求日支払期日案件名/品名数量単価金額(税抜)

項目を入力したら、実際にサンプルデータを入力してみましょう。

「INV-001」のように、複数の明細を持つデータを含めることで、後の関数設定の際に正しく動作しているか確認しやすくなります。

<データ入力例>

請求書番号取引先名請求日支払期日案件名/品名数量単価金額(税抜)
INV-001株式会社サンプル商事2025/4/302025/5/314月分コンサルティング費用1100,000100,000
INV-001株式会社サンプル商事2025/4/302025/5/31Webサイト保守費用150,00050,000
INV-002合同会社テスト2025/4/302025/5/31Webサイト制作費用1300,000300,000
INV-003株式会社サンプル商事2025/5/312025/6/305月分コンサルティング費用1100,000100,000

これで、自動化の土台となるデータベースが完成しました。

ステップ2:請求書のひな形となる「請求書シート」を作成する

次に、出力先となる請求書のテンプレートを作成します。
新しいシートを追加し、名前を「請求書」に変更してください。

一般的な請求書のレイアウトに沿って作成しますが、明細を入力する行を、あらかじめ10行程度、多めに確保しておくのがポイントです。

ステップ3:関数で明細表と請求書を連携させる

ここからが自動化の核となる部分です。

「請求書シート」で請求書番号を指定するだけで、明細表から関連データが自動で入力されるように設定していきます。

1. 検索キーとなる請求書番号の入力欄を作る

まず、「請求書シート」に請求書番号欄(例:D1セル)を作ります。このセルに入力された請求書番号を元に、すべての情報を検索します。

2. 請求書の共通情報(宛名・請求日など)をVLOOKUP関数で表示する

請求書の宛名や請求日といった、明細ごとで変わらない情報は、VLOOKUP関数で取得するのが簡単です。VLOOKUP関数は最初に見つかった行の情報を返すため、どの明細行も同じ共通情報が入っていれば問題なく機能します。

例として、請求書の宛名を表示させたいセルに、以下の関数を入力します。

=IFERROR(
  VLOOKUP(
    $D$1,
    '請求明細表'!A:H,
    2,
    FALSE
  )
)
  • ‘請求明細表’!A:H: データを検索する範囲を、先ほど作成した「請求明細表」シートのA列からH列に指定します。
  • 2: 範囲の左から2番目の列、つまり「取引先名」を取得します。

同様に、請求日(3番目の列)や支払期日(4番目の列)もVLOOKUP関数で設定しておきましょう。

3. 複数の請求明細をFILTER関数で一度に表示させる

指定した請求書番号に一致するすべての明細を取り出すために、FILTER関数を使います。

請求書の明細を表示したい範囲の一番左上のセルに、以下の関数を1つ入力するだけです。

=IFERROR(
  FILTER(
    '請求明細表'!E:H,
    '請求明細表'!A:A = $D$1
  )
)

この関数を分解して見てみましょう。

  • FILTER(範囲, 条件) が基本的な構文です。条件に合う行をすべて抜き出してくれます。
  • ‘請求明細表’!E:H: 抜き出したいデータの範囲です。今回は明細部分である「案件名/品名」から「金額(税抜)」まで(E〜H列)を指定します。
  • ‘請求明細表’!A:A = $D$1: 抜き出すための条件です。「請求明細表」のA列(請求書番号)が、この請求書シートのD1セル(検索キー)と一致する、という条件になります。

この関数を1つのセルに入力するだけで、条件に合う明細が複数行ある場合、自動的に下のセルにも結果が表示されます(この機能をスピルと呼びます)。

これで、関数の設定は完了です。

ステップ4:【応用編】GASで請求書をPDF化する

関数だけでも十分に便利ですが、もう一歩進んで、完成した請求書をボタン一つでPDF化する仕組みを作ってみましょう。

ここでは、GAS(Google Apps Script) という、スプレッドシートなどのGoogleサービスを自動化できるプログラミング言語を使います。

プログラミングと聞くと難しく感じるかもしれませんが、今回はコピー&ペーストで使えるコードを用意しましたので、ご安心ください。

GASの基本的な使い方(スクリプトエディタの開き方やコードの保存方法など)について詳しく知りたい方は、まずはこちらの記事で基本操作をご確認ください。

1. PDF化のコードを貼り付ける

スクリプトエディタを開き、最初から入力されているコードをすべて消した後、以下のコードをそのまま貼り付けてください。

// PDFを保存するGoogleドライブのフォルダIDを指定
const FOLDER_ID = "ここにフォルダIDを貼り付け";

/**
 * 現在表示されている請求書をPDFとしてドライブに保存する関数
 */
function createInvoicePdf() {
  // スプレッドシートとシートの情報を取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const invoiceSheet = spreadsheet.getSheetByName('請求書');
  if (!invoiceSheet) {
    SpreadsheetApp.getUi().alert('「請求書」シートが見つかりません。');
    return;
  }
  
  // PDFを保存するフォルダを取得
  const folder = DriveApp.getFolderById(FOLDER_ID);
  
  // 請求書番号を取得してファイル名にする
  const invoiceNumber = invoiceSheet.getRange('D1').getValue(); // 請求書番号が入力されているセル
  if (!invoiceNumber) {
    SpreadsheetApp.getUi().alert('請求書番号または宛名が空欄です。');
    return;
  }
  const fileName = `【請求書】${invoiceNumber}.pdf`;

  // PDF作成のオプション設定
  const url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?';
  const opts = {
    exportFormat: 'pdf',
    format: 'pdf',
    size: 'A4',
    portrait: 'true',
    fitw: 'true',
    sheetnames: 'false',
    printtitle: 'false',
    gridlines: 'false',
    gid: invoiceSheet.getSheetId()
  };
  
  const url_ext = [];
  for (const opt in opts) {
    url_ext.push(opt + '=' + opts[opt]);
  }
  const options = url_ext.join('&');
  
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url + options, {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });
  
  // PDFを作成してフォルダに保存
  const blob = response.getBlob().setName(fileName);
  folder.createFile(blob);
  
  SpreadsheetApp.getUi().alert(`「${fileName}」という名前でPDFを作成しました。`);
}

/**
 * スプレッドシートを開いた時にカスタムメニューを追加する関数
 */
function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('請求書処理')
      .addItem('この請求書をPDF化', 'createInvoicePdf')
      .addToUi();
}

2. 保存先フォルダIDを設定する

コードを貼り付けたら、1箇所だけ設定が必要です。

Googleドライブで、PDFの保存先となるフォルダを新規作成してください。そして、そのフォルダを開いたときのURLの末尾部分、これがフォルダIDです。

  • https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxx
    この xxxxxxxxxxxxxxxxxxxx の部分をコピーします。

コピーしたフォルダIDを、先ほど貼り付けたコードの const FOLDER_ID = “ここにフォルダIDを貼り付け”; の ” ” の中に貼り付けます。

設定はこれだけです。保存アイコンをクリックして、スクリプトを保存してください。

3. 実行ボタンをスプレッドシートに追加する

一度スプレッドシートの画面に戻り、ページを再読み込み(リロード)してみてください。
すると、メニューバーに「請求書処理」という新しい項目が追加されているはずです。

このメニューから「この請求書をPDF化」を選択すると、現在表示されている請求書がPDF化され、指定したGoogleドライブのフォルダに自動で保存されます。

まとめ

今回は、Googleスプレッドシートを使って複数の明細を含む請求書の作成を自動化する方法を解説しました。

  • 請求明細表に、1行1明細の形式でデータを入力する
  • 共通情報はVLOOKUP関数を使い、従来通り取得する
  • 複数の明細はFILTER関数を使い、条件に合うものを一度にすべて抜き出す
  • GASを活用し、ボタン一つでPDFを自動生成する

この仕組みを一度作ってしまえば、明細の数に関わらず、毎月の請求書作成業務にかかる時間を大幅に削減し、手作業によるミスを防ぐことができます。

まずはこの記事を参考に、あなたの会社の請求書作成を自動化してみてください。
定型的な作業から解放され、より創造的な業務に時間を使えるようになるはずです。

※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。