GASで見積書を自動生成|テンプレートから一括作成する手順
見積書の作成に毎回30分以上かかっていませんか。スプレッドシートのテンプレートを開き、顧客名・品目・金額を手入力し、PDFに変換してメールに添付する。月に20件の見積書を出す会社であれば、この作業だけで月10時間以上を消費している計算になります。
Google Apps Script(GAS)を使えば、スプレッドシートに入力したデータから見積書を自動生成し、PDF変換・メール送付まで一気通貫で処理できます。この記事では、テンプレートの設計からGASのサンプルコード、よくある失敗パターンと回避策まで、実務で使える手順を解説します。
目次
GASによる見積書自動生成の全体像
GASで見積書を自動生成する仕組みは、大きく4つのステップで構成されています。データ入力シートに顧客情報と品目を入力し、GASがテンプレートシートへデータを転記して見積書を生成し、最後にPDFとして出力する流れです。

GAS見積書自動化の全体フロー(データ入力→転記→PDF→メール)
自動化の基本構成
| ステップ | 処理内容 | 使用する機能 |
|---|---|---|
| 1. データ入力 | 顧客名・品目・単価・数量を入力シートに記載 | Googleスプレッドシート |
| 2. テンプレート転記 | 入力データをテンプレートシートの所定セルに自動転記 | GAS(SpreadsheetApp) |
| 3. PDF出力 | テンプレートシートをPDFに変換し、Google Driveに保存 | GAS(UrlFetchApp) |
| 4. メール送付(任意) | 生成したPDFを添付してメールを自動送信 | GAS(GmailApp) |
この構成の利点は、Googleアカウントがあれば追加コストなしで構築できることです。外部ツールの契約も不要で、スプレッドシートとGASだけで完結します。
テンプレートシートの設計方法
見積書の自動生成を成功させるカギは、テンプレートシートの設計にあります。GASが値を書き込むセルの位置を固定し、印刷範囲を明確にしておくことが重要です。
テンプレートに含めるべき項目
| セル位置(例) | 項目 | 備考 |
|---|---|---|
| B2 | 見積番号 | 自動採番(年月+連番) |
| B3 | 発行日 | 実行日を自動入力 |
| B5 | 宛先(顧客名) | データシートから転記 |
| B8〜B17 | 品目名 | 最大10行分を確保 |
| C8〜C17 | 数量 | 整数値 |
| D8〜D17 | 単価 | 通貨フォーマット |
| E8〜E17 | 金額 | 数量 × 単価の数式 |
| E18 | 小計 | SUM関数 |
| E19 | 消費税 | 小計 × 10% |
| E20 | 合計金額 | 小計 + 消費税 |
テンプレート設計の注意点
金額セル(E列)には数式を入れておき、GASからは品目・数量・単価のみを書き込む設計にしてください。GASで金額計算もさせると、スプレッドシート上の表示とPDF出力時の値がずれるトラブルが発生しやすくなります。
業務自動化でできること100選
経理・人事・営業・CS・総務・ITの6部門100事例を収録。各事例に月間削減時間と導入難易度を明記。今日から始められるチェックリスト付き。
見積書を自動生成するGASサンプルコード
以下は、データシートの情報をテンプレートシートに転記し、見積書を生成するGASのサンプルコードです。スプレッドシートのスクリプトエディタ(拡張機能 > Apps Script)に貼り付けて使用できます。
データ転記のコア処理
まず、データシートから顧客情報と品目データを取得し、テンプレートシートに書き込む処理です。
| コード(スクリプトエディタに貼り付けて使用) |
|---|
function generateEstimate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('データ');
var templateSheet = ss.getSheetByName('見積テンプレート');
var lastRow = dataSheet.getLastRow();
for (var i = 2; i <= lastRow; i++) {
var customerName = dataSheet.getRange(i, 1).getValue();
var items = dataSheet.getRange(i, 2).getValue();
var quantity = dataSheet.getRange(i, 3).getValue();
var unitPrice = dataSheet.getRange(i, 4).getValue();
// テンプレートの品目エリアを初期化
templateSheet.getRange('B8:E17').clearContent();
// データ転記
templateSheet.getRange('B5').setValue(customerName + ' 御中');
templateSheet.getRange('B2').setValue(generateEstimateNo());
templateSheet.getRange('B3').setValue(new Date());
templateSheet.getRange('B8').setValue(items);
templateSheet.getRange('C8').setValue(quantity);
templateSheet.getRange('D8').setValue(unitPrice);
// 数式再計算を待つ
SpreadsheetApp.flush();
Utilities.sleep(2000);
// PDF生成
createPdf(ss.getId(), templateSheet.getSheetId(), customerName);
}
}
function generateEstimateNo() {
var now = new Date();
var y = now.getFullYear();
var m = ('0' + (now.getMonth() + 1)).slice(-2);
var random = ('000' + Math.floor(Math.random() * 1000)).slice(-3);
return 'EST-' + y + m + '-' + random;
}
|
このコードでは、品目エリアの初期化(clearContent)を転記前に行うことで、前回データが残るトラブルを防いでいます。generateEstimateNo関数で「EST-202604-001」のような見積番号を自動採番します。
PDF変換とメール送付の自動化
テンプレートへのデータ転記が完了したら、次はPDFへの変換です。GASではスプレッドシートの特定シートをPDFとしてエクスポートするAPIが用意されています。
PDF生成のコード
| コード |
|---|
function createPdf(ssId, sheetId, customerName) {
var url = 'https://docs.google.com/spreadsheets/d/'
+ ssId + '/export?'
+ 'format=pdf'
+ '&gid=' + sheetId
+ '&size=A4'
+ '&portrait=true'
+ '&fitw=true'
+ '&gridlines=false';
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
}
};
var response = UrlFetchApp.fetch(url, options);
var pdfBlob = response.getBlob()
.setName(customerName + '_見積書.pdf');
var folder = DriveApp.getFolderById('フォルダIDをここに入れる');
var file = folder.createFile(pdfBlob);
return file;
}
|
エクスポートURLのパラメータで用紙サイズ(A4)、向き(縦)、グリッド線の非表示などを指定しています。生成されたPDFはGoogle Driveの任意のフォルダに保存されます。
メール自動送付(オプション)
生成したPDFをそのままメールに添付して送る場合は、GmailApp.sendEmailを使います。
| コード |
|---|
function sendEstimateMail(email, customerName, pdfBlob) {
GmailApp.sendEmail(
email,
customerName + '様 お見積書のご送付',
customerName + '様
お世話になっております。
' +
'お見積書を添付にてお送りいたします。
' +
'ご不明点がございましたらお気軽にお問い合わせください。
' +
'株式会社○○',
{ attachments: [pdfBlob] }
);
}
|
データシートに顧客のメールアドレス列を追加しておけば、見積書の生成からメール送付まで完全に自動化できます。月20件の見積書発行であれば、月10時間の手作業がボタン1つに置き換わります。
よくある失敗パターンと回避策
GASによる見積書自動化は比較的シンプルな処理ですが、実務で運用すると想定外のトラブルが起こります。BoostXがこれまで22パターンのGASテンプレートを構築してきた中で、繰り返し見てきた失敗パターンを紹介します。
| 失敗パターン | 原因 | 回避策 |
|---|---|---|
| 金額が0円で出力される | SpreadsheetApp.flush()を入れていないため、数式の再計算前にPDF化される | 転記後に必ずflush()を実行。さらにUtilities.sleep(2000)で2秒待機を入れる |
| PDFのレイアウトが崩れる | 印刷範囲が未設定、またはセル幅がA4に収まっていない | テンプレートシートで「ファイル > 印刷 > 印刷範囲の設定」を事前に実施。fitw=trueを指定 |
| 見積番号が重複する | 連番管理をランダム値で行っている | スプレッドシートに「最終番号」セルを作り、PropertiesServiceで排他制御する |
| 6分制限でタイムアウト | 一度に大量の見積書を生成しようとして実行時間を超過 | 1回の実行を30件以内に分割し、時間ベースのトリガーで複数回に分けて実行 |
| 前回のデータが残る | テンプレートシートの品目欄をクリアせずに次の見積書を転記 | 転記前にclearContent()で品目エリアを初期化する処理を追加 |
実務での注意点
消費税率の変更(軽減税率対応など)に備えて、税率はセルやスクリプトプロパティで管理し、コード内にハードコーディングしないことをおすすめします。税率変更のたびにコードを修正する手間がなくなります。
構築にかかる工数と費用の目安
GASによる見積書自動化の構築方法は、大きく「自社で構築」と「外注」の2つに分かれます。それぞれの工数と費用の目安は以下のとおりです。
| 項目 | 自社構築 | 外注(フリーランス) | 外注(開発会社) |
|---|---|---|---|
| 構築期間 | 2〜5日(学習含む) | 3〜7営業日 | 2〜4週間 |
| 初期費用 | 0円(人件費のみ) | 10万〜30万円 | 30万〜80万円 |
| 月額保守 | 0円(自社対応) | 1万〜3万円 | 3万〜5万円 |
| カスタマイズ性 | 高い(自社で自由に変更可) | 中(追加費用が発生) | 高い(要件定義から対応) |
| サポート | なし | 契約期間内 | SLA付きサポートあり |
見積書の自動化だけであれば自社構築も十分に可能です。ただし、請求書・納品書・発注書など複数の帳票を横断的に自動化したい場合や、既存の基幹システムとAPI連携が必要な場合は、専門の開発パートナーに依頼するほうが結果的にコストを抑えられます。
GASの公式ドキュメント(Google Apps Script公式リファレンス)には、SpreadsheetAppやGmailAppの全メソッドが掲載されています。自社構築に挑戦する場合の参考になります。
よくある質問
Q.GASで見積書を自動生成するのにプログラミング経験は必要ですか?
A.基本的なスプレッドシート操作ができれば、サンプルコードのコピー&ペーストで動かせます。変数名やセル範囲を自社フォーマットに合わせて変更する程度の調整は必要ですが、本格的なプログラミング経験は不要です。
Q.自動生成した見積書のフォーマットは変更できますか?
A.はい。テンプレートとなるスプレッドシートのデザインを変更すれば、そのまま出力に反映されます。ロゴの挿入、色の変更、項目の追加・削除なども自由に調整できます。
Q.1回の実行で何枚の見積書を生成できますか?
A.GASの実行時間制限は1回あたり6分です。見積書1枚の生成に約5〜10秒かかるため、1回の実行で30〜70枚程度の一括生成が可能です。それ以上の枚数が必要な場合はトリガーで分割実行します。
Q.GASの見積書自動化を外注する場合の費用相場は?
A.フリーランスへの依頼で10万〜30万円、開発会社への依頼で30万〜80万円が相場です。BoostXでは初期10万円〜+月額保守3〜5万円で対応しています。テンプレートの複雑さや連携先の数で費用が変動します。
まとめ
この記事のポイント
- GASを使えば、スプレッドシートのテンプレートから見積書をPDFとして自動生成できます。追加コストは不要です
- テンプレート設計では、金額セルに数式を入れておき、GASからは品目・数量・単価のみを書き込む構成が安定します
- SpreadsheetApp.flush()の実行忘れや印刷範囲の未設定は、もっとも多い失敗原因です。事前に確認してください
- 自社構築なら2〜5日・費用0円で導入可能です。複数帳票の横断自動化やAPI連携が必要な場合は外注も選択肢になります
- 月20件の見積書発行で月10時間の削減が見込めます。繰り返し作業こそGAS自動化の効果が大きい領域です
2026年4月