AIで請求書作成システムを作る。Gemini×スプレッドシート×GASを使って会話だけで完成

請求書のフォーマットがメンバーごとにバラバラ。会計ツールや請求書作成ツールなどSaaSを入れるほどの規模ではないが、毎回手作業で作るのは非効率だし、ミスも出る。この問題を、Geminiとスプレッドシートだけで解決した——GASのコードは1行も書いていない。
この記事でできるようになること
30分後:
- スプレッドシート上で、入力してボタンを押すだけで請求書のPDFが自動生成される仕組みが動いている
- 「GASのコードをGeminiに書かせる」感覚がつかめている
その先:
- 顧客管理シートとの連携で、宛名を選択式にできる
- PDFの保存先をGoogleドライブの任意のフォルダに指定できる
- 発行済み請求書の入金管理まで拡張できる
- 請求書以外にも、見積書・発注書・報告書など同じ手法で応用できる
結論
GASが書けなくても、Geminiと会話するだけでスプレッドシートの自動化は実現できる。
向いている人:
- 経理専任がいない少人数チームで、請求書を統一フォーマットで管理したい人
- SaaSの月額コスト・アカウント管理・運用が割に合わないと感じている人
- スプレッドシートは日常的に使っているが、GASやプログラミングの経験がない人
向いていない人:
- 月に数十件以上の請求書を発行する規模。素直に請求書SaaSを使うべきだ
- Googleスプレッドシートを使っていない環境
今回Geminiを選んだのは、GoogleスプレッドシートとGASという同じGoogleのエコシステム内で作業するためだ。スプレッドシートのセル構造、GASの文法、Googleドライブとの連携について、Geminiは他のAIより正確に答える傾向がある。ChatGPTやClaudeでも同様のことはできるが、Google製品の文脈に限ればGeminiの精度が一歩上だった。
この方法の本質は「請求書を作ること」ではない。「プログラミングが必要だった作業を、AIとの会話で実現する」という構造の変化だ。請求書はその一例に過ぎない。
最終アウトプット
今回作った請求書作成システムの構成は以下の通り。
| シート名 | 役割 |
| 入力シート | 宛名・請求日・品目などを入力する |
| テンプレート | 請求書のフォーマット(ひな形) |
| 顧客管理 | 顧客ID・宛名を管理し、入力シートと連携する |
| 請求書管理 | 発行済み請求書の一覧と入金状況を管理する |
入力シートに情報を入れて「作成」ボタンを押すと、テンプレートに沿った請求書がPDFで出力され、Googleドライブの指定フォルダに自動保存される。

具体的な使用方法と手順
前提条件:
- Googleアカウント(無料)
- Gemini(無料)
- Googleスプレッドシート(無料)
全体の流れ:
- Geminiに相談して全体像を把握する
- スプレッドシートの土台を作る
- GASのコードをGeminiに書かせる
- 動作確認と修正
- 機能を追加する
工程1〜4で約30分。工程5は必要に応じて。
Geminiに相談して全体像を把握する
最初にやることは、自分がやりたいことをGeminiに伝えて「本当にできるか」を確認すること。
ここで大事なのは、ある程度具体的なイメージを持って聞くことだ。「スプレッドシートで請求書を作りたい」だけではざっくりしすぎている。Geminiの認識がずれて、全く違うものが出来上がる。
まず自分の中で整理しておくべきことは3つ。
- 何が課題なのか:請求書のフォーマットがバラバラで、作成のたびに時間がかかる
- なぜ解決したいのか:メンバーの誰が作っても同じフォーマットで、ミスなく作れるようにしたい
- どんな仕組みがほしいのか:入力してボタンを押すと、テンプレートに沿って請求書が作成される
これを踏まえて、Geminiに送ったプロンプトがこれだ。
スプレッドシートで請求書を作成するシステムを作成したい。項目を入力して「作成ボタン」を押下すると、新しいシートでフォーマットに合わせてシートが作成されるイメージ。
Geminiは「Google Apps Script(GAS)を使えば実現できる」と回答した。GASとは、スプレッドシートに組み込める自動処理プログラムのこと。エクセルの「マクロ」に近いものだと思えばいい。
Geminiが返してきた全体像はこうだ。
- 入力用シートを作る(宛名、請求日、品目などを入力する表)
- テンプレートシートを作る(請求書のひな形)
- GASを設定する(入力データをテンプレートに転記するプログラム)
- 作成ボタンを設置する(ボタンを押すとプログラムが動く)

この時点で「できる」と確認が取れた。次にやるべきは、疑問点をこの段階で潰しておくこと。後からだと手戻りが発生する。
私の場合、品目(摘要・数量・単価)の数が請求書ごとに変わる点が気になった。
例えば、「摘要・数量・単価」は、これを1セットとして1つや2つなど数が増えます。その数の増減を入力用シートで表現できる?
Geminiの回答は明快だった。入力用シートにあらかじめ品目の行を多め(8〜10行分など)に用意しておき、GASで「データが入っている行だけを転記する」処理を組み込めばいい、と。品目が3つなら3行分だけ、7つなら7行分だけ転記される。

ポイント:
- Geminiへの相談は「Google検索」のつもりでやらないこと。「ほぼ人間」だと思って、わからないことはそのまま聞く。曖昧な点を残さず、この段階でできるだけ潰しておく
スプレッドシートの土台を作る
ここはAIの出番ではない。自分の手でスプレッドシートを作る工程だ。
新しいGoogleスプレッドシートを作成し、以下の4つのシートを用意する。
- 入力シート — 請求情報を入力するシート
- テンプレート — 請求書のフォーマット(ひな形)
- 顧客管理 — 顧客IDと宛名を管理するシート
- 請求書管理 — 発行済み請求書の一覧
なお、スプレッドシートではなくエクセルで管理表を作りたい場合は、Claudeでエクセル収支管理表を作る。関数も書式設定も30分で完成も参考になる。Claudeはファイルそのものを生成してくれるため、用途によって使い分けるといい。
今回の場合は以下のように作成したが、自身のやりたいこと・解決したいことに合わせてここは作成してほしい。
まずは請求書に記載する情報を入力するシート。
小計や合計、税込みなどは簡単な関数を使えば計算できるため、必須の最小限の入力で設計を行う。
入力シートのセル配置(ユーザーが入力する箇所):
| セル | 項目 | 入力形式 |
| B2 | 宛名 | テキスト |
| B3 | 請求日 | 日付 |
| B4 | 入金期日 | 日付 |
| B5 | 件名 | テキスト |
| B8〜B15 | 摘要 | テキスト(8行分) |
| C8〜C15 | 数量 | 数字(8行分) |
| D8〜D15 | 単価 | 数字(8行分) |

次にテンプレートシートを作る。これが請求書の見た目になるので、実際に取引先に送るフォーマットで作り込む。
会社ロゴなども画像で入れて問題ない。
テンプレートのセル配置(GASが参照する箇所):
| セル | 内容 |
| A4 | 宛名(「○○ 御中」の形式) |
| F4 | 請求日 |
| F5 | 請求書番号 |
| B12 | 件名 |
| A16〜A25 | 摘要 |
| D16〜D25 | 数量 |
| E16〜E25 | 単価 |
| B27 | 入金期日 |
金額の列(F16〜F25など)には「=数量×単価」の計算式を入れておく。合計金額や消費税の計算式もテンプレート側で設定しておけば、GASは数値を転記するだけで済む。

最後に、顧客管理シート。
A列に顧客ID、C列に宛名を入れておく。GASがここを参照して、請求書番号や請求書のPDFファイルの名称を自動生成する。

ポイント:
- セルの配置は後からGASに正確に伝える必要がある。「B2に宛名」「A16〜A28に摘要」など、どのセルに何があるかを明確に決めておくこと。ここが曖昧だと、GASが間違った場所にデータを転記する
GASのコードをGeminiに書かせる
スプレッドシートの土台ができたら、いよいよGASのコードをGeminiに作ってもらう。
ここで最も重要なのは、プロンプトの精度だ。「請求書を作るGASを書いて」では、Geminiはどのセルを参照してどこに転記すればいいかわからない。シートの構成とセルの位置を、一つ残らず正確に伝える。
面倒に感じるかもしれない。しかし、ここで手を抜くとGeminiが見当違いのコードを返し、修正の方が時間がかかる。作る前に要件を的確に伝える方が、結局は早い。
今回Geminiに送ったプロンプトがこれだ。
GASのプログラムを作成してほしい。
# やりたいこと
入力シートの対象内容を入力して、作成ボタンを押下すると、新しいシートで請求書が作成される。請求書のテンプレートはシート「テンプレート」を使用すること。# 存在するシート
– 入力シート
– テンプレート
– 顧客管理
– 請求書管理# ユーザーの入力
– B2:宛名(テキスト)
– B3:請求日(日付)
– B4:入金期日(日付)
– B5:件名(テキスト)
– B,C,D列に内容の項目(8行分用意)
– B8:摘要(テキスト)
– C8:数量(数字)
– D8:単価(数字)# テンプレート
– A4:宛名([#宛名] 御中)
– F4:請求日の日付(yyyy-mm-dd)
– F5:請求書番号(「顧客ID+請求日の日付」とする。顧客IDは宛名を「顧客管理」シートのC列から探して、対応するA列の値を取得する)
– B12:件名
– A16〜A25:摘要
– D16〜D25:数量
– E16〜E25:単価
– B30:入金期日
Geminiはこのプロンプトに対して、完成したGASのコードを返してくる。コードの中身を理解する必要はない。やることは3つだけだ。
- スプレッドシートのメニューから「拡張機能」>「Apps Script」を開く
- 最初から入っているコードを全て消して、Geminiが返したコードを貼り付ける
- 保存する(フロッピーディスクのアイコン)

次に、入力シートにボタンを設置する。
- スプレッドシートの「挿入」>「図形描画」で四角い図形を作成する
- 図形を入力シートに配置する
- 図形の右上にある「︙」(3点メニュー)をクリックし、「スクリプトを割り当て」を選択する
- Geminiが返したコード内の関数名を入力して「OK」を押す。関数名はコードの冒頭
function ○○()の○○部分で確認できる(今回の例ではcreateInvoice)
これで、ボタンを押すとGASが実行される状態になった。

ポイント:
- 初回実行時に「承認が必要です」という画面が表示される。「権限を確認」→自分のアカウントを選択→「許可」の順に進める。自分で作ったスクリプトなので問題ない
- プロンプトではセル位置を正確に書くこと。「B8:摘要」「A16〜A25:摘要」のように、入力側と転記先の両方を明示する。ここがずれると、GASが動いても請求書のレイアウトが崩れる
動作確認と修正
入力シートにテストデータを入れて、ボタンを押す。

ボタンを押して、テンプレートに沿った新しいシートが作成されれば成功だ。以下を確認する。
- 宛名が入っているか
- 請求日、入金期日が正しく転記されているか
- 摘要・数量・単価が正しい位置に入っているか
- 請求書番号が付いているか
- 金額の計算(数量×単価)が合っているか
問題がなければ、ここで最小限の機能は完成だ。
エラーが出た場合は、Geminiにそのまま伝える。エラーメッセージを貼り付けて「これを修正して」と言えばいい。
今回の場合、PDF出力のボタンを追加した際にエラー画面が表示されてしまった。このとき送ったのはこういうプロンプトだ。
「PDFをダウンロード」のボタンを押下すると、403エラーの画面が表示されてしまいます。ダウンロードではなく、PDFの画面を表示させるでも良い。
Geminiはエラーの原因と修正版のコードを返してきた。コードを差し替えるだけで解決した。

ポイント:
- エラーが出たらGoogle検索で調べようとしないこと。Geminiにエラーメッセージをそのまま貼って聞く方が早い。「ほぼ人間」に相談するつもりで
機能を追加する
最小限の機能が動いたら、ここから少しずつ機能を足していく。
「一度に全部やらない」。これが最も重要なポイントだ。
PDF出力、Googleドライブ保存、顧客管理連携、入金管理。やりたいことはたくさんあるだろう。しかし、これを一気にGeminiに頼むとコードが複雑になり、どこかでバグが出る。
AIには「コンテキスト」と呼ばれる、人間でいう記憶の容量がある。会話が長くなるとこの容量がいっぱいになり、重要な情報を忘れて的外れなコードを返すようになる。大量の要件を一度に投げると、この状態を引き起こしやすい。
だから、1つの機能を追加→動作確認→次の機能、というサイクルで進める。
追加機能の例1:PDF出力
請求書の作成について、新しいシートではなく、PDFにしてダウンロードまでさせることってできる?
Geminiが修正版のGASを返してくる。コードを差し替えて、テスト実行。

追加機能の例2:Googleドライブへの保存
請求書の作成は問題なくできています。次に行いたいことは、PDFの保存先です。Googleドライブの特定のフォルダに保存はできますか?
Geminiの回答で、フォルダIDという概念が出てくる。Googleドライブでフォルダを開いたときのURLの末尾にある英数字の羅列がフォルダIDだ。これをコードに設定すれば、PDFがそのフォルダに自動保存される。
- Googleドライブで保存先フォルダを開く
- ブラウザのURLを確認する(
https://drive.google.com/drive/folders/xxxxxxxx) - 末尾の英数字(
xxxxxxxxの部分)をコピーする - GASのコード内の指定箇所に貼り付ける

追加機能の例3:請求書の入金確認を行えるようにする
請求書のPDF作成までは完了。しかし、作成した請求書のその後(入金期日はいつなのか、アラート表示、入金はされたのか等)を追えないとあまり意味がない。
そこで、請求書PDFが作成されたら自動的に「請求書管理」シートに、管理用のシートを作成してもらう。格納したPDFファイルへのリンクも付けられるため今後発生する入金確認や消し込み、追跡・管理も比較的やりやすくなった。

ポイント:
- 1つずつ機能を足す。動くことを確認してから次に進む。時間をかけて大きく作るよりも、素早く小さく動くものを作って追加修正していく方が確実。AIが急におかしな回答を返し始めたら、会話が長くなりすぎているサインだ。新しいチャットを開いて、現状のコードを貼り付けてから追加依頼をすると良い
- Geminiの回答はやや長い。読むべきはコードと手順だけで、前置きや補足説明は飛ばしても問題ない。自分のやりたいこと・解決したいことだけを端的に伝えていくと、余計な会話で疲れずに済む
スプレッドシートに限らず、もっと手軽にミニツールを作りたい場合はAIで自分専用ツールを作る時代。Gemini Canvasで業務を自動化する方法も試してみてほしい。
また、経費管理をスマホで撮影するだけのツールもGeminiを使えば簡単に作成ができる。今回は書類を作る側、こちらはデータを記録する側だ。
評価
| 項目 | 評価 | コメント |
|---|---|---|
| コスト | ★★★★★ (5/5) | Gemini、スプレッドシート、GAS、Googleドライブ、すべて無料。追加コストはゼロ |
| クオリティ | ★★★★☆ (4/5) | 自社フォーマットに完全に合わせた請求書が作れる。PDF出力の品質も実務に耐える。デザインの自由度はSaaS専用ツールには劣るが、十分だ |
| 使いやすさ | ★★★★☆ (4/5) | 完成後はボタンを押すだけ。構築フェーズはGeminiとの対話が必要だが、コードを読む必要はない |
| 汎用性 | ★★★★★ (5/5) | 請求書に限らず、見積書・発注書・報告書など「テンプレートに情報を転記してPDF出力する」業務すべてに応用できる。「Geminiに聞いてGASを書かせる」手法自体が、あらゆるスプレッドシート業務に使える |
| 難易度 | ★★★☆☆ (3/5) | GASエディタを開く、コードを貼る、ボタンにスクリプトを割り当てるなど、初見では戸惑う操作がいくつかある。ただしGeminiが手順も含めて教えてくれるため、指示通りに進めれば完成する |
使用ツール・コスト / 所要時間
- コスト: 無料
- 所要時間: 約 30 分
編集者あとがき
今回作ったのは請求書システムだが、重要なのは請求書の出来ではない。
「GASを書く」というのは、これまで明確にプログラミングの領域だった。スプレッドシートの関数とは違う。エディタを開いて、JavaScriptベースのコードを書いて、デバッグして、動かす。非エンジニアにとっては完全に壁の向こう側だった。
その壁が、会話で消えた。
「こういうことがしたい」と言葉にするだけで、動くコードが出てくる。エラーが出たら「こうなった」と伝えるだけで、修正版が返ってくる。コードの中身は正直よくわからない。でも、動く。自分が思い描いた通りに動く。
この体験を通じて考えたことがある。「プログラミングが必要」という壁は、本当に壁だったのだろうか。壁だったのは「プログラミング」ではなく、「自分がやりたいことを、実現可能なレベルまで具体的に言語化する力」だったのではないか。
Geminiに「いい感じに作って」と投げても何も出てこない。「B2に宛名、B3に請求日、テンプレートのA4に御中付きで転記」——ここまで具体的に言語化して初めて、AIは正確に動く。逆に言えば、ここまで言語化できる人なら、コードが書けなくても何でも作れる時代になった。
技術の壁は下がった。残っているのは「何を作りたいか」を自分の言葉で語る力だけだ。
一方で、正直に書いておきたいこともある。
当初、私はもっと踏み込んだ自動化を考えていた。Gmailで届く報告メールをAIに読ませて、請求書に関するタスクを自動判別させ、請求書の作成まで一気通貫でやらせる構想だ。しかし、やめた。請求書は「間違いがあってはならないもの」だからだ。AIには、事実と異なる内容を生成するリスクや、指示していない情報を勝手に補完する癖がある。金額や宛名でそれが起きたら、信用問題になる。
だから今回は、GASという「決められた処理を正確に繰り返す」仕組みを選んだ。AIの役割はコードを書くところまで。実行するのはプログラムだ。AIが判断するのではなく、AIが作った仕組みが動く。この使い分けが、現時点では堅実だと考えている。
「AIがなんでもできる」という空気に乗って、いきなり高度な自動化に飛びつくと挫折する。現状から飛躍的な改善を狙うよりも、小さな一歩を着実に進めた方が、時間もコストも満足度は高い。今後AIの精度やセキュリティが改善されれば、もっと踏み込んだ自動化も現実になるだろう。そのときはまた試す。だが今日の一歩は、ここだ。
関連記事
ニュースを消費せず、思考に変える習慣。
一人の限界を超えるための、テックメディア。



















