← ノームズリンク トップ実務ノウハウ一覧

KNOW-HOW

単価表や顧客単価表を作成する

過去の見積と請求書を自動で1か所に集め、台帳から会社の単価表と顧客別の単価表を数字で作れます。

公開: 2026.09.18 / 実務ノウハウ

メールから単価表までの流れ メールから単価表までの流れ 手順1 一括整理・見積台帳 手順2 法則性を数値化 補足 送受信メール(見積・請求 書) PDFと本文を自動保存 受信簿(1添付=1行) 見積台帳(1行=1品目) ピボット・関数で集計 会社の単価表 顧客別単価表 次の見積に使う
メールから単価表までの流れ(概念図。細部は省いています)

なぜ大事か

見積の単価は、担当者の記憶とメールの添付ファイルに散らばります。前回の見積が手元に出てこないと、同じ取引先に前回と違う単価を出し、担当が替わると価格の根拠が消えます。見積書と請求書を電子データでやり取りした場合、送った分も含めて保存することが電子帳簿保存法で求められています。国税庁のパンフレットは保存の要件として、改ざん防止の措置(事務処理規程を定めて守る等)、日付・金額・取引先での検索、ディスプレイ・プリンタの備え付けを挙げています。基準期間の売上高が5,000万円以下等で、データのダウンロードの求めに応じられる場合は、検索の要件は不要とあります。この記事の受信簿は、日付・金額・取引先で検索できる一覧を兼ねます。改ざん防止の措置と備え付けは別に必要です。

困りごと→起きること→仕組みがあると

困りごと起きること仕組みがあると
過去の見積がメールとPDFに散らばる同じ取引先に前回と違う単価を出す台帳から「前回いくらで出したか」を1本の式で引ける
単価の根拠が担当者の記憶担当が替わると価格の根拠が消える会社の単価表(件数・最小・平均・最大)が根拠になる
見積・請求書PDFの保存が人任せ電子取引データを日付・金額・取引先で検索できない受信簿が検索用の一覧になる。改ざん防止の措置とディスプレイ・プリンタの備え付けは別途必要(国税庁パンフレット)
値上げ交渉の材料がない労務費・処分費の上昇を単価に反映できない品目別の推移(最新年と前年の平均)を数字で示せる

手順

手順1手順1 提出済み見積や請求書の情報を一括整理、見積台帳を作成。

最初に、メールの送受信の両方から、見積書と請求書の添付PDFを規則的な名前で1か所に集めます。自動保存した名前は改名せず、恒久の名前にします。自動の仕組みは、添付1件ごとに「受信簿」へ1行(日時・送受・アドレス・保存ファイル名・状態=未入力)を足します。人は月1回、未入力の行のPDFを開き、明細(品目・数量・単価)を「1行=見積1通の1品目」の見積台帳に写します。写したら受信簿に取引先と合計金額を入れ、状態を「転記済」にします。見積・請求書でないPDFは「対象外」にします。Microsoft 365 なら Power Automate の標準コネクタだけで追加費用なしに組めます(対象プランに含まれます)。Google Workspace では Apps Script で関数を書きます。式と名前の見本は命名規則の表にあります。

Microsoft 365(Power Automate)
①「自動化したクラウド フロー」のトリガーに Office 365 Outlook「新しいメールが届いたとき (V3)」を置く。フォルダー=受信トレイ、「添付ファイルのみ」と「添付ファイルを含める」をはいにする。②「Apply to each」(添付ファイル)の中に「条件」を置き、名前が .pdf で終わり、かつインラインが false の添付だけを通す(署名の画像を除く)。③SharePoint「ファイルを作成する」で共有ライブラリの年/月のフォルダー(先に作る)に保存する。ファイル名は concat で「日時_差出人_添付ファイルの名前」。日時が UTC で渡る場合は convertTimeZone で日本時間に直す。④Excel Online (Business)「テーブルに行を追加する」で受信簿に1行足す。⑤本文は「Html からテキストへ」(コンテンツ変換・プレビュー)→「ファイルを作成する」で .md にする。メール1通を残すなら「電子メールのエクスポート (V2)」の出力を .eml で保存する。⑥送信分は同じフローを「送信済みアイテム」で複製し、名前に宛先を使う。
Google Workspace
①Gmail で条件 has:attachment filename:pdf →「フィルタを作成」→ラベル「見積」を付ける。②Apps Script で GmailApp.search('label:見積') のメッセージを順に処理する。getAttachments() のうち名前が .pdf で終わるものを folder.createFile(att).setName(接頭辞+'_'+att.getName()) で保存する。接頭辞=Utilities.formatDate(msg.getDate(),'Asia/Tokyo','yyyyMMdd-HHmm')+'_'+差出人。getFrom() の値に < > があれば内側のアドレスだけを使う。③本文は createFile(接頭辞+'_本文.md', msg.getPlainBody())。④受信簿に appendRow で1行足す。⑤時間主導型トリガー(1時間ごと)で動かし、処理後は removeLabel と addLabel でラベルを付け替えて二重保存を防ぐ。
どちらでもない場合
メールソフトから添付を手動で保存する。命名規則(日付_金額_取引先.pdf)とフォルダー(年/取引先)を最初に決めて守る。国税庁のパンフレットは、表計算ソフトで索引簿(連番・日付・金額・取引先・備考)を作る方法と、規則的なファイル名で特定のフォルダに集約する方法を示している。
添付と本文の自動保存と、人が写す範囲 添付と本文の自動保存と、人が写す範囲 自動(Power Automate / Apps Script) 自動(Power Automate / Apps Script) 人が月1回 メール(受信・送信済み) PDFの添付だけ保存 本文をテキスト化 .md で保存 受信簿に1添付=1行 PDFの表を読み取る 品目・数量・単価を台帳へ 受信簿を転記済にする
添付と本文の自動保存と、人が写す範囲(概念図。細部は省いています)

受信簿の列と見本(自動で入るのは日時・送受・アドレス・保存ファイル名・状態=未入力。取引先と合計金額は人が入れる。合計金額は書類の額面。Microsoft 365 では状態の列名を Status にする。会社名は架空)

日時送受アドレス保存ファイル名取引先合計金額状態
2026-04-12 09:30a-sha@example.co.jp20260412-0930_a-sha@example.co.jp_見積依頼書.pdfA社対象外
2026-04-12 15:00a-sha@example.co.jp20260412-1500_送_a-sha@example.co.jp_御見積書.pdfA社72000転記済
2026-04-30 10:10a-sha@example.co.jp20260430-1010_送_a-sha@example.co.jp_御請求書.pdfA社71100転記済
2026-07-05 15:00c-sha@example.co.jp20260705-1500_送_c-sha@example.co.jp_買取見積書.pdfC社36000転記済
2026-07-08 11:20b-sha@example.co.jp20260708-1120_b-sha@example.co.jp_注文書.pdf未入力

手順2手順2 法則性を数値化して会社としての単価見積表や顧客別単価表を作成する。

品目ごとの件数・最小・平均・最大・最新年の平均を並べたものが「会社としての単価見積表」、行=品目・列=取引先で最新年の平均単価を並べたものが「顧客別単価表」です。状態の値は、見積の行が「提出中・受注・失注・請求反映」、請求の行が「請求済」の5つに決めます。集計に入れるのは「受注」と「請求済」の行です。請求書を写したら、同じ案件の見積の行を「請求反映」に変え、二重に数えないようにします。この判定を補助列「集計」(1か0)に持たせ、ピボットと関数は集計=1で絞ります。失注・提出中は最小・最大の参考として分けて見ます。買取品目は単価をマイナスで入れると同じ表で集計できます(入れ方の一例)。

Microsoft 365(Excel)
①台帳を [挿入]>[テーブル] で Excel の表(名前=台帳)にする(見出し1行・空行なし・日付の昇順)。補助列は 年 =YEAR([@日付])、集計 =IF(OR([@状態]="受注",[@状態]="請求済"),1,0)、キー =[@取引先]&"|"&[@品目]。②[挿入]>[ピボットテーブル]→フィルター=集計(1)、行=品目、値=単価を「個数」「最小」「平均」「最大」で4回入れる→会社の単価表。列に「年」を足すと年別の平均が並ぶ。③同じピボットを複製し、フィルターに年=最新年を足して、行=品目・列=取引先・値=単価の平均→顧客別単価表。④前回1件の単価は =XLOOKUP("A社|木くず",台帳[キー],台帳[単価],"なし",0,-1)(-1=末尾から検索)。⑤数量帯別は =AVERAGEIFS(台帳[単価],台帳[品目],"廃プラ*",台帳[数量],">=1000",台帳[集計],1)。
Google Workspace(スプレッドシート)
①台帳の全列に見出しを付け、日付の昇順に並べる。補助列は L列 年 =YEAR(B2)、M列 集計 =IF(OR(H2="受注",H2="請求済"),1,0)、N列 キー =C2&"|"&D2(列の並びは台帳の見本の表)。②[挿入]>[ピボット テーブル]→フィルタ=集計(1)、行=品目、値=単価(COUNTA・MIN・AVERAGE・MAX)→会社の単価表。列に「年」を足すと年別。③フィルタに年=最新年を足し、行=品目・列=取引先・値=単価(AVERAGE)→顧客別単価表。④同じ集計を数式で持つ例: =QUERY(A:M,"select D, avg(G) where M=1 group by D pivot C")。⑤前回1件の単価は =XLOOKUP("A社|木くず",N:N,G:G,"なし",0,-1)。
どちらでもない場合
表計算ソフトのピボット機能と平均・最小・最大の関数で同じ集計を行う。単価表は「品目・単位・件数・最小・平均・最大・最新年平均」の列で1枚、顧客別単価表は「行=品目・列=取引先」で1枚作る。状態が受注と請求済の行だけを集計に入れる。
台帳から2つの単価表を作る 台帳から2つの単価表を作る 標準機能だけで作れる範囲 標準機能だけで作れる範囲 成果物 見積台帳(表) 補助列 年・集計・キー ピボット(集計=1で絞る) AVERAGEIFS(数量帯別) XLOOKUP(前回の単価) 会社の単価表(年別平均) 顧客別単価表(最新年) 人が検算する
台帳から2つの単価表を作る(概念図。細部は省いています)

会社としての単価見積表(ピボットの結果イメージ・集計=1〔受注と請求済〕のみ・数字は架空)

品目単位件数最小平均最大2026年平均
廃プラスチック類(混合)kg1440485850
木くずm365,8006,4007,2006,500
金属くず(鉄) 買取kg9-15-11-8-12
4t車 運搬2215,00017,50020,00018,000

手順3補足 作った単価表を次の見積に使い、台帳を保守する

会社の単価表は「この品目は最小いくら・平均いくらで受注しているか」、顧客別単価表と前回単価の式は「この取引先にはいくらで出してきたか」の根拠として、見積作成の前に見ます。自動保存の仕組みは黙って止まるため、月1回、保存先のPDFの数と受信簿の行数が一致するか、受信簿に「未入力」が残っていないかを確かめます。添付1件=1行のため、2つの数は一致します。値上げの相談では、品目別の推移(最新年と前年の平均)を台帳から出して示します。

Microsoft 365
①受信簿は台帳と別のブックにする。②月次点検は「スケジュール済みクラウド フロー」(月初)で組む。SharePoint「ファイルを取得する (プロパティのみ)」に「フォルダーへのエントリの制限」=PDFの保存先、「入れ子になった項目を含める」=はい を指定し、length() で数える。結果にはフォルダーも含まれるため、その数を引く。本文の .md は別のフォルダーに置く。③Excel Online (Business)「テーブルに存在する行を一覧表示する」で受信簿の行を数える(既定256行のため改ページをオン)。未入力は「フィルター クエリ」 Status eq '未入力' で数える。列名は英数字のみ使えるため、状態の列名を Status にする。④「メールを送信する (V2)」で3つの数字を担当者へ送る。
Google Workspace
①ピボット テーブルは範囲を列全体(例 A:N)で指定し、追加行を含める。②月次点検は Apps Script の時間主導型トリガー(月1回)で組む。PDFの保存先を folder.getFiles() で数えた件数、受信簿シートの getLastRow() から見出し分を引いた行数、状態が未入力の行数を MailApp.sendEmail で担当者へ送る。本文の .md は別のフォルダーに保存しておく。
どちらでもない場合
単価表は印刷して見積作成の手元に置き、月末に台帳の行を追加してから作り直す。作り直した日付を単価表の上に書く。保存先のPDFの数と受信簿の行数を月末に見比べる。

顧客別単価表(行=品目・列=取引先・値=2026年の集計=1の平均単価。右端は XLOOKUP で別に引いた前回1件の単価・数字は架空)

品目A社B社C社A社 前回(日付)
廃プラスチック類(混合) kg4545(2026-04-30)
木くず m36,4006,500(2026-06-11 提出中)
金属くず(鉄) kg-12なし
4t車 運搬 回18,00018,00020,00018,000(2026-04-30)

例と対応表

見積台帳の見本(抜粋・1行=1品目・番号の頭 Q=見積 I=請求)。列は A番号 B日付 C取引先 D品目 E数量 F単位 G単価 H状態。右に I金額(=数量×単価) J担当 K元ファイル名(受信簿の保存ファイル名) L年 M集計 Nキー を続ける

番号日付取引先品目数量単位単価(円)状態
Q-2026-04122026-04-12A社廃プラスチック類(混合)1200kg45請求反映
Q-2026-04122026-04-12A社4t車 運搬118000請求反映
I-2026-04302026-04-30A社廃プラスチック類(混合)1180kg45請求済
I-2026-04302026-04-30A社4t車 運搬118000請求済
Q-2026-05032026-05-03B社廃プラスチック類(混合)800kg52失注
Q-2026-06112026-06-11A社木くず15m36500提出中
Q-2026-07052026-07-05C社金属くず(鉄) 買取3000kg-12受注

ファイル名・フォルダーの規則と、Power Automate の式の見本(受信日時・差出人・件名・添付ファイルの名前は動的なコンテンツ)

対象規則・式根拠・注記
自動保存のPDF(受信)受信日時_差出人アドレス_元ファイル名.pdf20260412-0930_a-sha@example.co.jp_見積依頼書.pdfこの名前を恒久の名前にする。改名しない。検索は受信簿で行う
自動保存のPDF(送信)送信日時_送_宛先アドレス_元ファイル名.pdf20260412-1500_送_a-sha@example.co.jp_御見積書.pdf送信済みアイテムでは差出人が自社になるため、宛先を名前に使う
メール本文同じ接頭辞_本文.md20260412-0930_a-sha@example.co.jp_本文.mdPDFと接頭辞で紐づく。「Html からテキストへ」の結果を .md の名前で保存する
メール1通(必要な場合)同じ接頭辞_メール.eml20260412-0930_a-sha@example.co.jp_メール.eml「電子メールのエクスポート (V2)」の出力を保存する
接頭辞の式convertTimeZone(受信日時,'UTC','Tokyo Standard Time','yyyyMMdd-HHmm')20260412-0930日時が UTC(末尾が Z)で渡る場合に日本時間へ直す
ファイル名の式concat(接頭辞,'_',差出人,'_',添付ファイルの名前)上のPDFの例と同じ文字列の連結は concat 関数で行う
PDFだけ通す条件endsWith(添付ファイルの名前,'.pdf') が true、かつ インライン が falseimage001.png は保存しないendsWith は大文字と小文字を区別しない
件名を名前に使う場合replace(replace(件名,':','_'),'/','_')Re_ 見積の件SharePoint と OneDrive のファイル名に使えない文字を取り除く
手動保存のPDF(フローを使わない場合)日付_金額_取引先.pdf(金額=その1通の合計)20260412_72000_A社.pdf国税庁パンフレットの「規則的なファイル名」の例と同じ並び
フォルダー自動保存=年/月。手動保存=年/取引先 も可2026/04/国税庁パンフレット(特定のフォルダに集約)

工程ごとの道具(環境別)

工程Microsoft 365Google Workspaceどちらでもない
添付PDFを1か所に集めるPower Automate: 新しいメールが届いたとき (V3)→Apply to each→条件(.pdf・インラインでない)→ファイルを作成するGmail フィルタ(has:attachment filename:pdf)→Apps Script を時間主導型トリガーで実行手動保存+命名規則
メール本文を保存コンテンツ変換(プレビュー)「Html からテキストへ」→ファイルを作成する(.md)Apps Script の getPlainBody() を createFile で .md として保存テキスト形式で保存
メール1通を丸ごと保存Office 365 Outlook「電子メールのエクスポート (V2)」→ファイルを作成する(.eml)
受信簿に1添付=1行を自動追記Excel Online (Business)「テーブルに行を追加する」(Excel の表が必要)Apps Script の appendRow でシート末尾に1行追加手入力
PDFの表を取り込むExcel [データ]>[データの取得]>[ファイルから]>[PDF から](人が実行・.NET Framework 4.5 以降が必要)ドライブ→アプリで開く→Google ドキュメント(2MB以下・表は検出されない可能性)→人が写す手入力
請求書PDFから項目を自動抽出AI Builder 請求書処理(AI Builder クレジット消費・有料)
単価の集計Excel ピボットテーブル/AVERAGEIFS/XLOOKUPスプレッドシート ピボット テーブル/QUERY/XLOOKUP表計算ソフトのピボット機能
月次点検の通知スケジュール済みクラウド フロー+「メールを送信する (V2)」Apps Script 時間主導型トリガー+MailApp.sendEmail手作業(月末)

使う道具

道具無料か有料か役割
Power Automate(標準コネクタ)無料(対象の Office 365 / Microsoft 365 プラン〔Business Basic/Standard/Premium、E1/E3/E5 等〕に含まれる。1日 6,000 アクション)メール添付の自動保存・本文のテキスト化・受信簿への行の追加・月次点検メール
Excel(Power Query・ピボットテーブル・AVERAGEIFS・XLOOKUP)無料(Excel に含まれる。Power Query「PDF から」は .NET Framework 4.5 以降が必要。XLOOKUP は Excel 2016・2019 では使えない)PDF の表の取り込み・単価の集計・前回単価の検索
AI Builder 請求書処理・テキスト認識有料(AI Builder クレジットが必要。Microsoft 365 ライセンスには含まれない。新規顧客は Copilot クレジットを購入。Premium ライセンスの付属分は2026年11月1日に廃止。未使用分の繰り越しなし)請求書PDFの明細の抽出・スキャン画像の文字起こし
Gmail フィルタ+Apps Script無料(Google Workspace に含まれる。1日の実行時間などの上限あり)添付PDFと本文の自動保存・受信簿への行の追加・月次点検メール
Google スプレッドシート(ピボット テーブル・QUERY・XLOOKUP)無料(Workspace に含まれる)単価の集計・前回単価の検索
Google ドライブの Google ドキュメント変換無料(Workspace に含まれる。ファイルは 2MB 以下。リスト・表・列は検出されない可能性あり)スキャンPDFの文字起こし

ここが危ない

台帳の列設計、フローの組み方、単価の集計方法は会社ごとに違います。ここから先は参加フォームから聞いてください。 参加フォームから聞く →

見積書や請求書と同じく、契約書の項目抽出は難しいため、本気で作ったものをSaaSに実装して使えるようにしています。

出典・確認した公式情報