現地調査メモと過去の類似見積から、工事見積の明細の初期案を作る
現地調査のメモと過去の類似見積を入力に、見積書に載せる工事項目と数量の根拠を洗い出し、明細行の骨子を作ります。単価は単価表からプログラムが引くため、AIが金額を決めることはありません。営業の作業は、明細を一から組むことから、抜けと数量を確かめることに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Power Automate/Python
- 対象業界
- IT・SaaS/不動産/建設/製造
- 対象部門
- 営業
- 対象業務
- 書類作成/比較検討
- 主な課題
- 営業フォローが追いつかない/属人化している/書類作成に時間がかかる
- AIで行う処理
- 生成
- 主な効果
- 品質標準化/対応スピード向上/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 営業が現地調査を行い、メモと写真を残す(面積、既存の設備、搬入経路、作業可能な時間帯)
- 販売管理システムで、似た案件の過去見積を探す(件名や顧客名で検索)
- 見つかった見積をExcelのテンプレートにコピーする
- 今回の案件に合わせて、明細行を足したり削ったりする
- 数量を調査メモから拾って書き換える
- 単価表を見て単価を確認し、必要なら書き換える
- 抜けがないかを見直す(経験の浅い営業は先輩に確認する)
- 上長が確認し、顧客へ提出する
- 営業が現地調査を行い、所定の項目に沿ってメモを残す
- 営業が見積作成を実行する
- 自動調査メモから、工事種別・面積・階数・作業時間帯・搬入条件などの条件を取り出す
- 自動条件の近い過去見積を上位5件探す
- 自動過去見積の明細構成と調査メモを照らし、今回載せるべき明細行の候補を作る
- 自動数量の根拠が調査メモにある行は数量を入れ、無い行は空欄のまま「要確認」にする
- 自動単価表から現行の単価を引き、金額を計算してExcelのテンプレートに書き込む
- 人営業が明細の過不足と数量を確認し、空欄を埋める
- 人上長が単価・掛率・値引きを含めて確認し、提出する
各工程の詳しい説明を読む
- 営業が現地調査を行い、メモと写真を残す(面積、既存の設備、搬入経路、作業可能な時間帯)
- 販売管理システムで、似た案件の過去見積を探す(件名や顧客名で検索)
- 見つかった見積をExcelのテンプレートにコピーする
- 今回の案件に合わせて、明細行を足したり削ったりする
- 数量を調査メモから拾って書き換える
- 単価表を見て単価を確認し、必要なら書き換える
- 抜けがないかを見直す(経験の浅い営業は先輩に確認する)
- 上長が確認し、顧客へ提出する
問題は4つあります。
(a)類似案件が探せない。 販売管理システムの検索は件名と顧客名しか効かず、「搬入にエレベーターが使えない、3階の原状回復」のような条件では探せません。結局、覚えている人に聞くことになります。
(b)コピー元の見積に引きずられる。 前の案件の明細をコピーするため、今回は不要な項目が残ったり、今回必要な項目が抜けたりします。
(c)単価が古い。 コピー元の見積の単価がそのまま残り、単価表の改定が反映されないことがあります。材料費の値上がりが続く時期ほど、ここで利益が削られます。
(d)抜けの確認がベテラン頼み。 撤去、養生、夜間割増、廃材処分、駐車場代といった「付帯の項目」の抜けは、経験がないと気づけません。見積提出後に抜けが分かると、追加請求が難しくなります。
- 営業が現地調査を行い、所定の項目に沿ってメモを残す
- 営業が見積作成を実行する
- 【自動】 調査メモから、工事種別・面積・階数・作業時間帯・搬入条件などの条件を取り出す
- 【自動】 条件の近い過去見積を上位5件探す
- 【自動】 過去見積の明細構成と調査メモを照らし、今回載せるべき明細行の候補を作る
- 【自動】 数量の根拠が調査メモにある行は数量を入れ、無い行は空欄のまま「要確認」にする
- 【自動】 単価表から現行の単価を引き、金額を計算してExcelのテンプレートに書き込む
- 【人】 営業が明細の過不足と数量を確認し、空欄を埋める
- 【人】 上長が単価・掛率・値引きを含めて確認し、提出する
自動化されるのは「探す」「思い出す」「転記する」「単価を引く」の4つです。残るのは「この案件で本当に要るか」「数量は合っているか」「いくらで出すか」を決めることです。
02今回想定するシステム構成
現地調査メモ(所定の書式)・写真 │ ▼【実行】営業が見積作成を実行 Python(見積作成スクリプト) │ ├──▶ 調査メモから条件を取り出す(Claude API) │ ├──▶ 過去見積の検索(販売管理システムの明細データ) │ └─ 条件で絞り込み、明細構成の近い上位5件を選ぶ │ ├──▶ Claude API ── 明細行の候補と数量の根拠を作る(金額は扱わない) │ ├──▶ 単価表から単価を引き、金額を計算する(プログラム) │ └──▶ Excelの見積書テンプレートへ書き込む │ ▼【人が確認】営業が過不足と数量を確認 │ ▼【人が承認】上長が金額を確認して提出
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python | Power Automate、Google Apps Script |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 見積書 | Excelのテンプレート | 販売管理システムの見積機能 |
| 過去見積・単価表 | 販売管理システム、Excelの単価表 | 基幹システム |
Python を置いているのは、Excelの見積書テンプレートへ書き込む処理と、単価の計算を確実に行うためです。 見積書をExcelで作っている会社は多く、テンプレートの書式を崩さずに行を差し込む処理は、ワークフローツールより Python のほうが扱いやすい領域です。見積を販売管理システム側で作っているなら、そのシステムの取り込み形式に合わせて出力します。
03どうやって実装するのか
処理の起点を決める
営業が見積作成を実行したときを起点にします。現地調査メモの保存をきっかけに自動で走らせる構成は取りません。
理由は、メモが書きかけの状態で明細が作られると、数量の空欄が大量に並んで使い物にならないためです。また、同じ顧客で複数の案を出す場合、営業がどの前提で見積を作るかを選ぶ必要があります。営業が「この前提で作る」と決めた時点を起点にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 現地調査メモ | 工事種別、面積、階数、天井高、既存設備、搬入経路、作業可能時間、顧客の要望 | 共有フォルダ(所定の書式) |
| 過去見積の明細 | 案件の条件、明細行(項目・仕様・数量・単位)、受注の有無 | 販売管理システム |
| 単価表 | 項目コード、項目名、仕様、単位、現行単価、改定日 | Excelの単価表 |
| 見積の作成ルール | 必ず載せる付帯項目、条件ごとに加える項目(夜間なら割増など) | 設定ファイル |
4番目の「作成ルール」を明文化することが、この構成の準備の中心です。 ベテランが頭の中で持っている「3階以上でエレベーターが使えなければ、階段での搬入費を載せる」といったルールを書き出します。ルールで決まるものはルールで入れ、AIには「ルールにないが、類似案件には載っていた項目」を拾わせます。
データの取得方法を決める
調査メモ: 自由記述だと条件の取り出しが安定しません。調査メモの書式を決めることが最初の作業です。 工事種別、面積(平米)、階数、エレベーターの有無、作業可能時間帯、既存設備の撤去の有無、といった項目を必須欄にし、それ以外を自由記述にします。
過去見積: 販売管理システムから明細データを書き出します。案件ごとの条件(工事種別・面積・階数など)が明細データと別に管理されている場合は、案件番号で結合します。条件がデータとして残っていない過去見積は、件名から条件を推定するしかなく、精度が落ちます。 直近2〜3年分に絞るほうが、単価の新しさの面でも扱いやすくなります。
類似案件の探し方: 条件(工事種別・面積の帯・階数・作業時間帯)で絞り込んだうえで、明細の項目構成が近いものを選びます。受注した見積を優先します。 失注した見積には、競合に負けた単価や、顧客に不要と言われた項目が含まれているためです。
単価表: Excelの単価表を読み込みます。項目コードで引けるように整えておきます。
Excelへの書き込み: Python のライブラリ openpyxl でテンプレートを開き、明細行を書き込みます。注意点として、openpyxl でブックを読み込むときの data_only は、数式のセルから「数式そのもの(既定)」を取るか「Excelが最後にそのシートを読んだときに保存された値」を取るかを切り替えるものです。数式の計算はExcel側で行われる前提で設計し、合計金額はプログラム側でも計算して別に持ち、照合に使います。
AIへ渡す前に整形する
- 調査メモの必須欄の確認 … 工事種別・面積・階数が空欄なら処理を止め、営業に入力を求めます。条件が欠けたまま類似案件を探すと、まったく違う規模の見積が参照されます
- 単位の統一 … 面積が「坪」と「平米」で混在していることがあります。平米に揃えます
- 過去見積の単価の除去 … 類似案件の明細をAIに渡すとき、単価と金額の列を落として渡します。 AIに過去の金額を見せないことで、金額を推測で入れる余地を無くします
- 項目名の正規化 … 過去見積では同じ項目が「養生費」「養生」「床養生一式」と揺れています。単価表の項目コードに寄せる対応表を作ります
- 作成ルールの適用 … ルールで決まる付帯項目は、AIに渡す前にプログラムで入れておきます
3番が、この構成でもっとも効く前処理です。
AIに処理させる
2回に分けて呼び出します。
1回目:調査メモから条件を取り出す。 自由記述の部分から、「搬入は階段のみ」「土日のみ作業可」「既存のパーティションは再利用」などの条件を拾い、決められた項目に整理させます。
2回目:明細行の候補を作る。
| 処理 | 内容 |
|---|---|
| 項目の洗い出し | 調査メモの条件と類似案件の明細構成を照らし、今回載せるべき項目を列挙する |
| 項目コードの対応付け | 各項目を単価表の項目コードに対応付ける。対応するものが無ければ「単価表に無い」とする |
| 数量の根拠付け | 数量が調査メモから決まる項目は、どの記載から計算したかを書く |
| 不要項目の指摘 | 類似案件には載っていたが、今回の条件では不要と思われる項目を理由とともに示す |
| 確認事項の列挙 | 数量が決められない項目、顧客に確認すべき条件を並べる |
AIに金額・単価・掛率を扱わせません。 出力にも金額の欄を持たせません。
指示内容を固定する
あなたは内装工事会社の見積担当を補佐する担当者です。
今回の現地調査の条件と、条件の近い過去見積の明細構成(金額は含みません)を渡します。
今回の見積に載せるべき明細行の候補を作ってください。
【厳守事項】
- 単価、金額、掛率、値引きを出力しないでください。
それらは別の仕組みで計算します。
- 数量は、調査メモの記載から計算できる場合だけ入れてください。
計算に使った記載(例「面積 120平米」)を quantity_basis に書いてください。
記載から決まらない数量は null にし、needs_confirmation に入れてください。
- 項目は、下の単価表の項目コードに対応付けてください。
対応するコードが無い項目は item_code を null にし、理由を書いてください。
新しい項目コードを作らないでください。
- 過去見積に載っているという理由だけで項目を加えないでください。
今回の調査メモの条件から必要と言える理由を reason に書いてください。
- 過去見積に載っていたが今回は不要と判断した項目は、excluded に理由とともに書いてください。
- 労務費・法定福利費など、人件費にかかわる項目を省略・削減する提案をしないでください。
【今回の調査条件】
{survey_conditions}
【作成ルールで既に入っている項目】
{rule_based_items}
【条件の近い過去見積の明細構成(上位5件、金額なし)】
{similar_quotes}
【単価表の項目一覧(コード・名称・仕様・単位のみ)】
{price_items}
「数量は調査メモの記載から計算できる場合だけ入れる」の1行が、この構成でもっとも重要です。 これが無いと、AIは類似案件の数量を「このくらいだろう」と流用します。見積の数量が現地と合わないまま提出されると、赤字の工事になるか、顧客からの信頼を失います。
出力形式を固定する
{
"survey_id": "",
"conditions": {
"work_type": "",
"area_m2": 0,
"floor": 0,
"elevator": true,
"work_hours": "",
"carry_in": ""
},
"line_items": [
{
"item_code": "",
"item_name": "",
"spec": "",
"unit": "",
"quantity": null,
"quantity_basis": "",
"reason": "",
"source": "rule | similar_quote | survey"
}
],
"excluded": [
{ "item_name": "", "reason": "" }
],
"needs_confirmation": [],
"similar_quote_ids": []
}
source で、その行がルールから入ったのか、類似案件から拾ったのか、調査メモから直接拾ったのかを区別します。営業が確認するとき、類似案件由来の行を重点的に見れば済むようにするためです。
数量は数値型、または null で返させます。「約120」のような文字列が入ると計算で壊れます。
システムへ連携する
プログラム側で次の処理を行い、Excelの見積書テンプレートへ書き込みます。
| 処理 | 内容 |
|---|---|
| 単価の付与 | item_code で単価表を引き、現行単価を入れる |
| 金額の計算 | 数量 × 単価。数量が null の行は金額を空欄にする |
| テンプレートへの書き込み | 明細行を差し込み、書式を保つ |
| 確認欄の作成 | needs_confirmation と、類似案件由来の行に印を付ける |
| 保存 | 案件番号をファイル名に含めて共有フォルダへ |
販売管理システムへの登録は、上長の承認後に行います。 下書きの段階で登録すると、未確定の見積が実績として集計に混ざります。
人が確認する
全件、人が確認します。確認は2段階です。
- 営業 … 明細の過不足、数量、空欄の数量を確認する。顧客に確認すべき条件を洗い出す
- 上長 … 単価・掛率・値引き・最終金額を確認し、提出を承認する
理由は、見積が顧客への約束になるためです。提出した見積の金額と範囲は、受注後の工事の採算と、追加請求の可否を決めます。
確認を速くするための設計が要ります。
- 類似案件から拾った行と、数量が空欄の行を色分けする
- 各行の
reasonとquantity_basisを、見積書とは別のシートに並べる - 参照した類似案件の見積書へのリンクを付ける
- 除外した項目も一覧で見せる(抜けではなく意図的に外したことが分かるように)
例外に対処する
| 起きること | 対応 |
|---|---|
| 調査メモの必須欄が空 | 処理を止めて入力を求める |
| 条件の近い過去見積が見つからない | 作成ルールだけで明細を作り、「類似案件なし」と明示する。遠い案件で埋めない |
| 単価表に無い項目が必要 | item_code を null にして人へ回す。単価を推測しない |
| 数量が調査メモから決まらない | null のまま返し、確認事項に入れる |
| 過去見積の単価が単価表と大きく違う | 過去の単価は使わない。単価表の改定を確認する |
| 顧客が指定した仕様が単価表の仕様と違う | 仕様の差を確認事項に入れる。近い仕様の単価で代用しない |
| 同じ顧客への過去見積と金額が大きく違う | 上長の確認画面で比較を表示する。理由の説明を営業に求める |
| 現地調査の写真にしか情報が無い | この構成では写真を読ませない。営業がメモに書き起こす |
| 下請の見積が必要な専門工事 | 明細に「協力会社見積」の行を入れ、金額は空欄にする |
記録を残す
- 調査メモと、取り出した条件
- 参照した類似案件の番号
- AIが出した明細の候補と、除外した項目
- 営業が追加・削除・修正した行
- 上長が承認した最終版と提出日
- 受注・失注の結果
4番目と6番目を突き合わせると、この構成の実力が見えます。 営業が毎回追加している項目は、作成ルールに入れるべき項目です。受注した見積で除外されていた項目は、本当に不要だったのか、後から追加請求したのかを確認します。
見積の履歴には原価や利益にかかわる情報が含まれます。保管場所の閲覧権限を営業部と管理部門に限定します。
04実装レベルの3段階
半自動化で効果の大半が出ます。 45分が18分程度になります。本格構成の価値は時間よりも、営業が毎回追加している項目を作成ルールへ吸い上げ、見積の質を揃えていくことにあります。
05工数削減シミュレーション
導入後 120件 × 18分 ÷ 60 = 36 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 案件ごとに内容が違う個別見積が月50件以上あり、過去の見積書と単価表が社内に蓄積されている会社。見積の作成がベテラン営業に偏っている場合。
- 見積が定価表からの積み上げだけで済む場合。過去の見積書が紙で保管され、明細がデータとして残っていない場合。単価表が整備されておらず、担当者ごとに単価が違う場合(まず単価表を作る)。
07最小構成で試す方法
- 過去3か月に受注した見積から、種別の違うものを5件選ぶ
- それぞれの現地調査メモと、提出した見積の明細(金額を消したもの)を用意する
- 5件のうち1件を「今回の案件」とし、残る4件を「類似案件」として生成AIの画面に貼り付ける
- 上のプロンプトで明細の候補を作らせる
- 実際に提出した明細と並べ、抜けた項目・余計な項目・数量の誤りを数える
5件を順番に「今回の案件」にして、5回試します。 これで、類似案件から項目を拾う方式が自社の見積に通用するかが分かります。
判断の目安は次のとおりです。
| 5回の結果 | 判断 |
|---|---|
| 付帯項目の抜けがほぼ無い | 半自動化に進む価値がある |
| 抜けは少ないが数量の誤りが多い | 調査メモの書式を先に直す。数量の根拠がメモに無い |
| 抜けが多い | 類似案件の選び方が合っていない。条件の項目を見直す |
金額を消して渡すことを守ってください。 金額を渡すと、AIが金額に言及し始め、試験の目的から外れます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが数量を類似案件から流用する | 数量の根拠を必須にし、根拠が無ければ null にさせる |
| AIが金額や値引きに言及する | 過去見積の金額を消して渡す。出力に金額の欄を持たせない |
| 類似案件の選び方が合わない | 条件(種別・面積の帯・階数・時間帯)で先に絞る。受注した見積を優先する |
| 項目名の揺れで単価表と対応しない | 項目名の対応表を作る。対応しない項目は人へ回す |
| 古い単価が残る | 単価は必ず単価表から引く。過去見積の単価を使わない |
| 調査メモが自由記述で条件が取れない | 必須欄を決めた書式にする。空欄なら処理を止める |
| Excelテンプレートの書式が崩れる | 行の差し込み位置と書式のコピーを決めておく。合計はプログラム側でも計算して照合する |
| 営業が初期案をそのまま提出する | 類似案件由来の行と空欄の数量を色分けし、確認済みの印が無いと提出できない運用にする |
| 失注した見積の明細が参照される | 受注した見積を優先する。失注見積は明示的に区別する |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 顧客名、工事場所、現地調査の内容、過去見積の明細、単価表。単価表と過去見積の金額は、自社の原価構造と利益にかかわる営業秘密です。
- 金額を外部AIに渡さない … この構成では、過去見積の単価・金額、単価表の単価を生成AIに渡しません。項目名・仕様・単位・数量だけを渡します。設計として金額を渡さないことで、流出の範囲を狭めています
- 顧客情報 … 調査メモに顧客名や入居者の情報が含まれます。生成AIへ渡す前に、顧客名を案件番号に置き換えることを検討してください
- 学習利用 … 入力を学習に使わない設定または契約のサービスを選びます
- 労務費の扱い … 建設業では、改正建設業法が2025年12月12日に完全施行され、中央建設業審議会が作成・勧告した「労務費に関する基準」に照らして著しく低い労務費等で見積を提出した受注者は指導・監督の対象になるなど、見積にかかわるルールが整備されています。AIの提案で労務費や法定福利費にかかわる項目を省く、削るといった判断をさせないでください。 プロンプトで禁じているのはこのためです
- アクセス権限 … 見積の下書きと履歴の閲覧を、営業部と管理部門に限定します
- 自動実行してよい範囲 … 明細の候補の作成とテンプレートへの書き込みまでです。顧客への提出と販売管理システムへの登録は、上長の承認後に人が行います
誤りが起きた場合のリスクは、項目や数量の誤りによる赤字工事、追加請求をめぐる顧客とのトラブル、法令上の問題のある見積の提出です。見積は受注後の工事の採算を決める書類です。 初期案はあくまで初期案として扱ってください。
10まず何から始めるか
1週目:調査メモの書式と作成ルールを書き出す
ベテラン営業2名に、現地調査で必ず確認する項目と、「この条件ならこの項目を載せる」というルールを書き出してもらいます。30〜50件出れば十分です。この書き出しだけで、経験の浅い営業の見積の抜けが減ります。
2週目:過去5件で試す
受注した見積5件で、金額を消した明細を使って最小構成を試します。抜け・余計な項目・数量の誤りを数え、作成ルールと調査メモの書式を直します。
3〜4週目:半自動化を組む
単価表の項目コードと過去見積の項目名の対応表を作り、類似案件の検索からExcelテンプレートへの書き込みまでを Python で組みます。営業2名が2週間使い、45分が何分になるかを実測します。
2か月目以降: 営業全員に広げます。営業が追加・削除した行を毎月集計し、作成ルールに吸い上げる運用を決めます。受注結果を記録し、類似案件の選び方に反映します。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 建設業法・入契法の改正法(令和6年法律第49号)の改正規定が令和7年12月12日から完全施行されること。中央建設業審議会が「労務費の基準」を作成・勧告できることとし、著しく低い労務費等で見積を提出した受注者は指導・監督の対象となること | 国土交通省:建設業法・入契法改正(令和6年法律第49号)について | 2026-09-14 |
| 令和7年12月2日の中央建設業審議会で「労務費に関する基準」が作成され、実施が勧告されたこと | 国土交通省:労務費に関する基準 | 2026-09-14 |
openpyxl でブックを読み込む際の data_only が、数式のセルから数式(既定)を取るか、Excelが最後にシートを読んだときに保存された値を取るかを切り替えるものであること | openpyxl: Tutorial | 2026-09-14 |
販売管理システムからの見積明細の取り出し方式は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。 見積書に記載すべき内訳と、労務費に関する基準の自社の工種への当てはめは、国土交通省の資料と顧問の専門家に確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0056)についてのご相談はこちらから。
