FormApp.createで始める!請求書自動作成:GASで財務を効率化
本記事では、Google Apps Script(GAS)のFormApp.create
関数を利用して、請求書を自動作成する方法を解説します。財務・会計業務における請求書作成は、時間と手間がかかる作業ですが、GASを活用することで大幅な効率化が可能です。特に中小企業や個人事業主の方にとって、日々の経理作業を効率化し、コア業務に集中するための強力なツールとなります。
FormApp.createとは?
FormApp.create(title)
は、Googleフォームを新規作成するためのGASの関数です。通常、請求書作成にフォームを使うイメージは湧きにくいかもしれませんが、フォームとスプレッドシートを連携させることで、請求に必要な情報を効率的に収集し、請求書として整形することが可能になります。
FormApp.createの基本的な使い方
FormApp.create
関数は非常にシンプルで、引数には作成するフォームのタイトルを指定します。
function createInvoiceForm() {
const form = FormApp.create('請求書作成フォーム');
Logger.log('フォームのURL: ' + form.getPublishedUrl());
}
上記のコードを実行すると、「請求書作成フォーム」というタイトルの新しいGoogleフォームが作成され、そのURLがログに出力されます。
請求書自動作成の実装方法
ここでは、FormApp.create
とスプレッドシートを連携させ、請求書を自動作成する具体的な手順を説明します。
1. フォームの作成と設定
まず、FormApp.create
で基本的なフォームを作成します。次に、作成したフォームに請求に必要な項目(顧客名、請求日、請求金額、品目など)を追加します。
function createInvoiceForm() {
const form = FormApp.create('請求書作成フォーム');
form.addTextItem().setTitle('顧客名');
form.addDateItem().setTitle('請求日');
form.addTextItem().setTitle('請求金額').setHelpText('半角数字で入力してください');
form.addTextItem().setTitle('品目');
form.addTextItem().setTitle('備考');
Logger.log('フォームのURL: ' + form.getPublishedUrl());
}
このコードでは、顧客名、請求日、請求金額、品目、備考の5つの質問項目を持つフォームを作成しています。
2. スプレッドシートとの連携
フォームの回答をスプレッドシートに自動的に記録するように設定します。フォームの編集画面から「回答」タブを開き、「スプレッドシートに回答を送信」を選択します。これにより、フォームの回答が自動的にスプレッドシートに記録されます。
3. 請求書データの整形
スプレッドシートに記録されたデータを元に、請求書として見やすい形式に整形します。GASを使って、スプレッドシートのデータを読み込み、請求書テンプレートに書き込む処理を実装します。
function generateInvoice() {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('フォームの回答 1'); // フォームの回答が記録されたシート名
// 最終行のデータを取得
const lastRow = sheet.getLastRow();
const invoiceData = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
// 請求書テンプレートのシートを開く
const templateSheet = ss.getSheetByName('請求書テンプレート');
// 請求書情報を書き込む
templateSheet.getRange('B3').setValue(invoiceData[1]); // 顧客名
templateSheet.getRange('E3').setValue(invoiceData[2]); // 請求日
templateSheet.getRange('B5').setValue(invoiceData[3]); // 請求金額
templateSheet.getRange('B7').setValue(invoiceData[4]); // 品目
templateSheet.getRange('B9').setValue(invoiceData[5]); // 備考
// PDFとして保存するなどの処理を追加
Logger.log('請求書を作成しました。');
}
このコードでは、「フォームの回答 1」というシートから最新の回答を取得し、「請求書テンプレート」というシートの指定されたセルに値を書き込んでいます。getRange
を使ってセルを指定し、setValue
で値を設定します。
4. トリガーの設定
フォームが送信された際に、自動的にgenerateInvoice
関数が実行されるようにトリガーを設定します。GASのエディタから「トリガー」を設定し、「フォーム送信時」にgenerateInvoice
関数が実行されるように設定します。
実用的なコード例
ここでは、より実用的なコード例をいくつか紹介します。
例1: 請求書番号の自動採番
請求書番号を自動で採番する機能を追加します。スプレッドシートに請求書番号を記録し、最新の番号に1を足したものを新しい請求書番号として使用します。
function generateInvoiceNumber() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('請求書番号管理'); // 請求書番号を管理するシート
const lastRow = sheet.getLastRow();
let lastInvoiceNumber = sheet.getRange(lastRow, 1).getValue();
if (lastInvoiceNumber === '') {
lastInvoiceNumber = 1000; // 初期値
} else {
lastInvoiceNumber = parseInt(lastInvoiceNumber) + 1;
}
sheet.appendRow([lastInvoiceNumber]);
return lastInvoiceNumber;
}
この関数は、「請求書番号管理」というシートから最新の請求書番号を取得し、1を足したものを新しい請求書番号として返します。また、新しい番号をシートに記録します。
例2: PDFとして保存
作成した請求書をPDFとしてGoogleドライブに保存する機能を追加します。
function saveAsPDF() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const templateSheet = ss.getSheetByName('請求書テンプレート');
const invoiceNumber = generateInvoiceNumber();
// PDFとして保存
const pdf = templateSheet.copyTo('請求書_' + invoiceNumber).getAs('application/pdf').getBytes();
const folder = DriveApp.getFolderById('YOUR_FOLDER_ID'); // 保存先のフォルダID
const file = folder.createFile('請求書_' + invoiceNumber + '.pdf', pdf, 'application/pdf');
// 一時シートを削除
SpreadsheetApp.getActiveSpreadsheet().deleteSheet(SpreadsheetApp.getActiveSpreadsheet().getSheetByName('請求書_' + invoiceNumber));
}
この関数は、「請求書テンプレート」シートをコピーし、PDFとして保存します。保存先のフォルダIDはYOUR_FOLDER_ID
を実際のフォルダIDに置き換えてください。
よくある問題とトラブルシューティング
- フォームの回答がスプレッドシートに記録されない:フォームの設定を確認し、「スプレッドシートに回答を送信」が有効になっているか確認してください。
- GASの実行権限がない:GASの実行時に権限を求められた場合は、必要な権限を許可してください。
- 請求書が正しく整形されない:スプレッドシートのセルの位置や書式が正しいか確認してください。
カスタマイズ方法と応用例
- 請求書のデザインをカスタマイズする:請求書テンプレートのシートを編集して、デザインを自由に変更できます。
- メールで自動送信する:作成した請求書をメールで自動送信する機能を追加できます。
- 顧客情報をデータベースと連携する:Google Cloud SQLなどのデータベースと連携して、顧客情報を管理できます。
まとめ
FormApp.create
とスプレッドシートを組み合わせることで、請求書作成を自動化し、大幅な効率化を実現できます。本記事で紹介したコード例を参考に、ぜひGASを活用して、日々の財務・会計業務を効率化してみてください。
CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう